This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 03ebe04fc7 ISIS-3119: purge IdStringifier.Abstract
03ebe04fc7 is described below
commit 03ebe04fc753d2ddde0d5ce8a2920ba20f7a5c32
Author: Andi Huber <[email protected]>
AuthorDate: Thu Aug 11 14:42:38 2022 +0200
ISIS-3119: purge IdStringifier.Abstract
---
.../applib/services/bookmark/IdStringifier.java | 57 ++++++++--------------
.../ValueSemanticsBasedOnIdStringifier.java | 4 +-
...nIdStringifierWithTargetEntityClassSupport.java | 5 +-
.../idstringifier/IdStringifierLookupService.java | 4 +-
.../IsisModulePersistenceJdoDatanucleus.java | 28 +++++------
.../changetracking/JdoLifecycleListener.java | 4 --
.../valuetypes/JdoDatastoreIdValueSemantics.java | 4 +-
.../jpa/integration/entity/JpaEntityFacet.java | 3 +-
8 files changed, 44 insertions(+), 65 deletions(-)
diff --git
a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
index 5b0a0d0f5e..f8ad36560c 100644
---
a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
+++
b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
@@ -85,7 +85,18 @@ public interface IdStringifier<T> {
}
}
- abstract class Abstract<T> implements SupportingTargetEntityClass<T> {
+ /**
+ * Provided for backward compatibility with some v1 Ids that used a prefix
to determine their actual type.
+ * <p>
+ * (In v2 we provide this so in the constructor, so there's no need to
encode the type in the stringified form
+ * of the value).
+ *
+ * @param <T>
+ *
+ * @deprecated not used within the framework; eventually remove
+ */
+ @Deprecated
+ abstract class AbstractWithPrefix<T> implements
SupportingTargetEntityClass<T> {
public final static char SEPARATOR = '_';
@@ -95,22 +106,22 @@ public interface IdStringifier<T> {
*/
@Getter private final Class<T> correspondingClass;
- protected Abstract(
- final @NonNull Class<T> correspondingClass) {
+ private final String prefix;
+
+ public AbstractWithPrefix(
+ @NonNull final Class<T> correspondingClass,
+ @NonNull final String typeCode) {
_Assert.assertFalse(correspondingClass.isPrimitive(),
()->String.format("not allowed to be initialzed with a
primitive class (%s), "
+ "use the boxed variant instead",
correspondingClass));
this.correspondingClass = correspondingClass;
+ this.prefix = typeCode + SEPARATOR;
}
- /**
- * Overridable default implementation.
- * @param value
- */
@Override
- public String enstring(@NonNull final T value) {
- return value.toString();
+ public final String enstring(final @NonNull T value) {
+ return prefix + doEnstring(value);
}
@Override
@@ -118,34 +129,6 @@ public interface IdStringifier<T> {
throw _Exceptions.unsupportedOperation();
}
- }
-
- /**
- * Provided for backward compatibility with some v1 Ids that used a prefix
to determine their actual type.
- *
- * <p>
- * (In v2 we provide this so in the constructor, so there's no need to
encode the type in the stringified form
- * of the value).
- * </p>
- *
- * @param <T>
- */
- abstract class AbstractWithPrefix<T> extends Abstract<T> {
-
- private final String prefix;
-
- public AbstractWithPrefix(
- @NonNull final Class<T> handledClass,
- @NonNull final String typeCode) {
- super(handledClass);
- this.prefix = typeCode + SEPARATOR;
- }
-
- @Override
- public final String enstring(final @NonNull T value) {
- return prefix + doEnstring(value);
- }
-
/**
* Overridable hook
*/
diff --git
a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
index ff82a6d475..2ac4622ec1 100644
---
a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
+++
b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
@@ -27,7 +27,9 @@ import lombok.NonNull;
import lombok.experimental.Accessors;
/**
- * @since 2.x {@index}
+ * Convenient base class for value-semantics,
+ * that are basically inferred from an {@link IdStringifier}.
+ * @since 2.0
*/
public abstract class ValueSemanticsBasedOnIdStringifier<T>
extends ValueSemanticsAbstract<T>
diff --git
a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport.java
b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport.java
index ccd179b90d..d37825569e 100644
---
a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport.java
+++
b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport.java
@@ -27,7 +27,10 @@ import lombok.NonNull;
import lombok.experimental.Accessors;
/**
- * @since 2.x {@index}
+ * Convenient base class for value-semantics,
+ * that are basically inferred from an {@link IdStringifier} with
target-entity-class-support.
+ * @see
org.apache.isis.applib.services.bookmark.IdStringifier.SupportingTargetEntityClass
+ * @since 2.0
*/
public abstract class
ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<T>
extends ValueSemanticsAbstract<T>
diff --git
a/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierLookupService.java
b/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierLookupService.java
index e21c017a34..4bb0cebd6a 100644
---
a/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierLookupService.java
+++
b/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierLookupService.java
@@ -51,7 +51,7 @@ import lombok.val;
* This is intended for framework use, there is little reason to call it
or override it.
* </p>
*
- * @since 2.x
+ * @since 2.0
*/
@Service
@Named(IsisModuleCoreRuntime.NAMESPACE + ".IdStringifierLookupService")
@@ -104,6 +104,8 @@ public class IdStringifierLookupService {
return Optional.ofNullable(_Casts.uncheckedCast(idStringifier));
}
+ // -- HELPER
+
private boolean handles(final IdStringifier<?> idStringifier, final
@NonNull Class<?> candidateValueClass) {
return idStringifier.getCorrespondingClass()
.isAssignableFrom(ClassUtils.resolvePrimitiveIfNecessary(candidateValueClass));
diff --git
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
index b89a179f22..d20fe551e3 100644
---
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
+++
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
@@ -19,14 +19,10 @@
package org.apache.isis.persistence.jdo.datanucleus;
import java.util.Collections;
-import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Set;
-import javax.inject.Provider;
import javax.jdo.JDOException;
import javax.jdo.PersistenceManagerFactory;
-import javax.jdo.annotations.PersistenceCapable;
import javax.sql.DataSource;
import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
@@ -40,7 +36,6 @@ import org.springframework.context.annotation.Primary;
import org.springframework.dao.support.PersistenceExceptionTranslator;
import org.springframework.transaction.interceptor.TransactionInterceptor;
-import org.apache.isis.applib.services.iactnlayer.InteractionService;
import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.core.config.IsisConfiguration;
@@ -48,7 +43,6 @@ import org.apache.isis.core.config.beans.IsisBeanTypeRegistry;
import
org.apache.isis.core.config.beans.aoppatch.TransactionInterceptorFactory;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import
org.apache.isis.core.metamodel.services.objectlifecycle.ObjectLifecyclePublisher;
-import org.apache.isis.core.transaction.changetracking.EntityChangeTracker;
import
org.apache.isis.persistence.jdo.datanucleus.changetracking.JdoLifecycleListener;
import org.apache.isis.persistence.jdo.datanucleus.config.DatanucleusSettings;
import org.apache.isis.persistence.jdo.datanucleus.dialect.DnJdoDialect;
@@ -138,17 +132,17 @@ public class IsisModulePersistenceJdoDatanucleus {
return new DnJdoDialect(dataSource);
}
- private static boolean ignore(final Class<?> entityType) {
- try {
- if(entityType.isAnonymousClass() || entityType.isLocalClass() ||
entityType.isMemberClass() || entityType.isInterface()) {
- return true;
- }
- val persistenceCapable =
entityType.getAnnotation(PersistenceCapable.class);
- return persistenceCapable == null; // ignore if doesn't have
@PersistenceCapable
- } catch (NoClassDefFoundError ex) {
- return true;
- }
- }
+// private static boolean ignore(final Class<?> entityType) {
+// try {
+// if(entityType.isAnonymousClass() || entityType.isLocalClass() ||
entityType.isMemberClass() || entityType.isInterface()) {
+// return true;
+// }
+// val persistenceCapable =
entityType.getAnnotation(PersistenceCapable.class);
+// return persistenceCapable == null; // ignore if doesn't have
@PersistenceCapable
+// } catch (NoClassDefFoundError ex) {
+// return true;
+// }
+// }
@Qualifier("local-pmf-proxy")
@Bean
diff --git
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.java
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.java
index 43f1c480e1..9a13c98b7b 100644
---
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.java
+++
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.java
@@ -19,7 +19,6 @@
package org.apache.isis.persistence.jdo.datanucleus.changetracking;
import javax.enterprise.inject.Vetoed;
-import javax.inject.Provider;
import javax.jdo.listener.AttachLifecycleListener;
import javax.jdo.listener.ClearLifecycleListener;
import javax.jdo.listener.CreateLifecycleListener;
@@ -32,13 +31,11 @@ import javax.jdo.listener.StoreLifecycleListener;
import org.datanucleus.enhancement.Persistable;
-import org.apache.isis.applib.services.iactnlayer.InteractionService;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import
org.apache.isis.core.metamodel.facets.object.publish.entitychange.EntityChangePublishingFacet;
import
org.apache.isis.core.metamodel.objectmanager.ObjectManager.EntityAdaptingMode;
import
org.apache.isis.core.metamodel.services.objectlifecycle.ObjectLifecyclePublisher;
import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.transaction.changetracking.EntityChangeTracker;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@@ -205,5 +202,4 @@ DetachLifecycleListener, DirtyLifecycleListener,
LoadLifecycleListener, StoreLif
return _Utils.adaptEntityAndInjectServices(metaModelContext, pojo,
bookmarking);
}
-
}
diff --git
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdValueSemantics.java
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdValueSemantics.java
index 2b9484b3c0..1447b7de1f 100644
---
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdValueSemantics.java
+++
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdValueSemantics.java
@@ -76,7 +76,7 @@ extends
ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<Datastore
// re-create-able through the constructor
//
// to do this, we also need to capture the class of the Id value class
itself, followed by the value (as a string)
- return value.getClass().getName() + IdStringifier.Abstract.SEPARATOR +
value.toString();
+ return value.getClass().getName() +
IdStringifier.AbstractWithPrefix.SEPARATOR + value.toString();
}
@SneakyThrows
@@ -84,7 +84,7 @@ extends
ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<Datastore
public DatastoreId destring(
final @NonNull String stringified,
final @Nullable Class<?> targetEntityClass) {
- int idx = stringified.indexOf(IdStringifier.Abstract.SEPARATOR);
+ int idx =
stringified.indexOf(IdStringifier.AbstractWithPrefix.SEPARATOR);
String clsName = stringified.substring(0, idx);
String keyStr = stringified.substring(idx + 1);
final Class<?> cls = _Context.loadClass(clsName);
diff --git
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacet.java
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacet.java
index 123e9c77c9..fa7097205b 100644
---
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacet.java
+++
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacet.java
@@ -70,8 +70,7 @@ public class JpaEntityFacet
super(EntityFacet.class, holder, Precedence.HIGH);
this.entityClass = entityClass;
this.serviceRegistry = serviceRegistry;
- this.idStringifierLookupService =
serviceRegistry.lookupService(IdStringifierLookupService.class).orElseThrow();
-
+ this.idStringifierLookupService =
serviceRegistry.lookupServiceElseFail(IdStringifierLookupService.class);
}
// -- ENTITY FACET