You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/01/16 17:30:21 UTC
[isis] branch master updated: ISIS-2265: prepares removal of
StandaloneList
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 8bf9fff ISIS-2265: prepares removal of StandaloneList
8bf9fff is described below
commit 8bf9fff5c934f56e0e50ab2d62ccde9d1118c09e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 16 18:30:08 2020 +0100
ISIS-2265: prepares removal of StandaloneList
also decouples PersistenceSession from ObjectAdapter
---
.../java/org/apache/isis/applib/tree/TreeNode.java | 1 +
.../ClassSubstitutorForCollections.java | 6 +-
.../apache/isis/core/metamodel/spec/Container.java | 18 +++---
.../isis/core/metamodel/spec/FreeStandingList.java | 70 +++++++++-------------
.../isis/core/metamodel/spec/ManagedObject.java | 16 +++++
.../specloader/SpecificationLoaderDefault.java | 13 ++--
.../specimpl/ObjectSpecificationAbstract.java | 6 +-
...neList.java => CollectionFacetOnContainer.java} | 18 +++---
...st.java => ObjectSpecificationOnContainer.java} | 14 ++---
.../ValueTypeProviderForCollections.java | 4 +-
.../persistence/session/PersistenceSession.java | 12 +---
.../repository/RepositoryServiceDefault.java | 2 -
.../PersistenceQueryFindAllInstancesProcessor.java | 7 +--
...sistenceQueryFindUsingApplibQueryProcessor.java | 3 +-
.../queries/PersistenceQueryProcessor.java | 9 ++-
.../queries/PersistenceQueryProcessorAbstract.java | 12 ++--
.../persistence/PersistenceSession5.java | 44 +++++++-------
17 files changed, 128 insertions(+), 127 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode.java b/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode.java
index 927ad3b..2fbdd00 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode.java
@@ -30,6 +30,7 @@ import javax.annotation.Nullable;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.core.commons.internal.base._NullSafe;
+//@Container
public interface TreeNode<T> {
// -- VALUE
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/classsubstitutor/ClassSubstitutorForCollections.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/classsubstitutor/ClassSubstitutorForCollections.java
index a690888..b9a5996 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/classsubstitutor/ClassSubstitutorForCollections.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/classsubstitutor/ClassSubstitutorForCollections.java
@@ -31,7 +31,7 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.apache.isis.applib.annotation.OrderPrecedence;
-import org.apache.isis.core.metamodel.spec.FreeStandingList;
+import org.apache.isis.core.metamodel.spec.Container;
@Component
@Named("isisMetaModel.ClassSubstitutorForCollections")
@@ -40,8 +40,8 @@ public class ClassSubstitutorForCollections implements ClassSubstitutor {
@Override
public Class<?> getClass(@lombok.NonNull @org.springframework.lang.NonNull Class<?> cls) {
- if(FreeStandingList.class.isAssignableFrom(cls)) {
- return FreeStandingList.class;
+ if(Container.class.isAssignableFrom(cls)) {
+ return Container.class;
}
// legacy
if(Vector.class.isAssignableFrom(cls)) {
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Container.java
similarity index 66%
copy from persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessor.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Container.java
index 9e10702..b62272d 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Container.java
@@ -16,15 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.queries;
+package org.apache.isis.core.metamodel.spec;
-import java.util.List;
+/**
+ * possibly just temporary for refactoring
+ *
+ * @since 2.0
+ */
+public interface Container {
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.persistence.jdo.datanucleus5.persistence.query.PersistenceQuery;
+ ObjectSpecification getElementSpecification();
-public interface PersistenceQueryProcessor<T extends PersistenceQuery> {
- List<ObjectAdapter> process(T query);
-}
+ String titleString();
-// Copyright (c) Naked Objects Group Ltd.
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/FreeStandingList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/FreeStandingList.java
index 8a9fcea..5b43e41 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/FreeStandingList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/FreeStandingList.java
@@ -19,65 +19,47 @@
package org.apache.isis.core.metamodel.spec;
-import java.util.AbstractList;
-import java.util.List;
-import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.metamodel.commons.ToString;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+
/**
* A list returned from an action, ie not associated or owned by any entity.
*/
-public class FreeStandingList extends AbstractList<ManagedObject> {
-
- private final List<ManagedObject> instances;
- private final ObjectSpecification instanceSpecification;
-
- public static <T extends ManagedObject> FreeStandingList of(
- final ObjectSpecification instanceSpecification,
- final List<T> instances) {
-
- return new FreeStandingList(instanceSpecification, instances.stream()
- .map(x->(T)x)
- .collect(Collectors.toList()));
+@RequiredArgsConstructor(staticName = "of")
+public class FreeStandingList implements Container {
+
+ @Getter(onMethod = @__(@Override))
+ @NonNull private final ObjectSpecification elementSpecification;
+ @NonNull private final Can<ManagedObject> elements;
+
+ public Stream<ManagedObject> stream() {
+ return elements.stream();
}
- private FreeStandingList(
- final ObjectSpecification instanceSpecification,
- final List<ManagedObject> instances) {
-
- this.instanceSpecification = instanceSpecification;
- this.instances = instances;
- }
-
- /**
- * Required implementation of {@link AbstractList}.
- */
- @Override
- public ManagedObject get(final int index) {
- return instances.get(index);
- }
-
- /**
- * Required implementation of {@link AbstractList}.
- */
- @Override
public int size() {
- return instances.size();
- }
-
- public ObjectSpecification getElementSpecification() {
- return instanceSpecification;
+ return elements.size();
}
+ @Override
public String titleString() {
- return instanceSpecification.getPluralName() + ", " + size();
+ switch(elements.getCardinality()) {
+ case ONE:
+ return getElementSpecification().getSingularName();
+ default:
+ return getElementSpecification().getPluralName() + ", " + size();
+ }
}
@Override
public String toString() {
final ToString s = new ToString(this);
- s.append("elements", instanceSpecification.getFullIdentifier());
+ s.append("elements", getElementSpecification().getFullIdentifier());
// title
String title;
@@ -88,9 +70,11 @@ public class FreeStandingList extends AbstractList<ManagedObject> {
}
s.append("title", title);
- s.append("vector", instances);
+ s.append("vector", elements);
return s.toString();
}
+
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
index 33aa57b..3e34ff6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
@@ -33,6 +33,7 @@ import javax.annotation.Nullable;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.domain.DomainObjectList;
+import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.commons.internal.base._Tuples.Indexed;
import org.apache.isis.core.commons.internal.collections._Arrays;
import org.apache.isis.core.commons.internal.collections._Lists;
@@ -281,6 +282,21 @@ public interface ManagedObject {
.map(ManagedObject::unwrapSingle)
.collect(_Lists.toUnmodifiable());
}
+
+ /**
+ *
+ * @param adapters
+ * @return non-null, unmodifiable
+ */
+ public static List<Object> unwrapMultipleAsList(@Nullable final Can<? extends ManagedObject> adapters) {
+ if (adapters == null) {
+ return Collections.emptyList();
+ }
+ return adapters.stream()
+ .map(ManagedObject::unwrapSingle)
+ .collect(_Lists.toUnmodifiable());
+ }
+
/**
*
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
index 4e27c28..cbae7c5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
@@ -56,7 +56,7 @@ import org.apache.isis.core.metamodel.services.classsubstitutor.ClassSubstitutor
import org.apache.isis.core.metamodel.services.classsubstitutor.ClassSubstitutorDefault;
import org.apache.isis.core.metamodel.services.classsubstitutor.ClassSubstitutorForCollections;
import org.apache.isis.core.metamodel.services.classsubstitutor.ClassSubstitutorRegistry;
-import org.apache.isis.core.metamodel.spec.FreeStandingList;
+import org.apache.isis.core.metamodel.spec.Container;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
@@ -64,7 +64,7 @@ import org.apache.isis.core.metamodel.specloader.postprocessor.PostProcessor;
import org.apache.isis.core.metamodel.specloader.specimpl.IntrospectionState;
import org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract;
import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
-import org.apache.isis.core.metamodel.specloader.specimpl.standalonelist.ObjectSpecificationOnStandaloneList;
+import org.apache.isis.core.metamodel.specloader.specimpl.standalonelist.ObjectSpecificationOnContainer;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorAbstract;
import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
import org.apache.isis.core.metamodel.valuetypes.ValueTypeProviderDefault;
@@ -374,7 +374,7 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
}
requires(upTo, "upTo");
-
+
val substitutedType = classSubstitutorRegistry.getClass(type);
if (substitutedType == null) {
return null;
@@ -454,7 +454,8 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
*/
private ObjectSpecification createSpecification(final Class<?> cls) {
- if(isMetamodelFullyIntrospected() && isisConfiguration.getCore().getMetaModel().getIntrospector().isLockAfterFullIntrospection()) {
+ if(isMetamodelFullyIntrospected()
+ && isisConfiguration.getCore().getMetaModel().getIntrospector().isLockAfterFullIntrospection()) {
throw _Exceptions.illegalState(
"Cannot introspect class '%s' because the metamodel has been fully introspected and is now locked. " +
"One reason this can happen is if you are attempting to invoke an action through the WrapperFactory " +
@@ -465,9 +466,9 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
// ... and create the specs
final ObjectSpecificationAbstract objectSpec;
- if (FreeStandingList.class.isAssignableFrom(cls)) {
+ if (Container.class.isAssignableFrom(cls)) {
- objectSpec = new ObjectSpecificationOnStandaloneList(facetProcessor, postProcessor);
+ objectSpec = new ObjectSpecificationOnContainer(facetProcessor, postProcessor);
objectSpec.setMetaModelContext(metaModelContext);
} else {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 196bfea..7f5bd90 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -88,7 +88,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
import org.apache.isis.core.metamodel.specloader.postprocessor.PostProcessor;
-import org.apache.isis.core.metamodel.specloader.specimpl.standalonelist.ObjectSpecificationOnStandaloneList;
+import org.apache.isis.core.metamodel.specloader.specimpl.standalonelist.ObjectSpecificationOnContainer;
import org.apache.isis.core.security.authentication.AuthenticationSession;
import static org.apache.isis.core.commons.internal.base._NullSafe.stream;
@@ -704,7 +704,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
* The association with the given {@link ObjectAssociation#getId() id}.
*
* <p>
- * This is overridable because {@link ObjectSpecificationOnStandaloneList}
+ * This is overridable because {@link ObjectSpecificationOnContainer}
* simply returns <tt>null</tt>.
*
* <p>
@@ -712,7 +712,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
*
* <p>
* TODO: could this be made final? (ie does the framework ever call this
- * method for an {@link ObjectSpecificationOnStandaloneList})
+ * method for an {@link ObjectSpecificationOnContainer})
*/
@Override
public ObjectAssociation getAssociation(final String id) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnContainer.java
similarity index 76%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnContainer.java
index f5e1fc2..10ed085 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnContainer.java
@@ -19,7 +19,6 @@
package org.apache.isis.core.metamodel.specloader.specimpl.standalonelist;
-import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Stream;
@@ -30,19 +29,18 @@ import org.apache.isis.core.metamodel.spec.FreeStandingList;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import static org.apache.isis.core.commons.internal.base._Casts.uncheckedCast;
+import lombok.val;
-public class CollectionFacetOnStandaloneList extends CollectionFacetAbstract {
+public class CollectionFacetOnContainer extends CollectionFacetAbstract {
- public CollectionFacetOnStandaloneList(final FacetHolder holder) {
+ public CollectionFacetOnContainer(final FacetHolder holder) {
super(holder);
}
@Override
- public <T extends ManagedObject> Stream<T> stream(T wrappedObjectList) {
- final List<ManagedObject> list = collection(wrappedObjectList);
- return list.stream()
- .map(x->uncheckedCast(x));
+ public Stream<ManagedObject> stream(ManagedObject wrappedObjectList) {
+ val list = unwrap(wrappedObjectList);
+ return list.stream();
}
/**
@@ -51,7 +49,7 @@ public class CollectionFacetOnStandaloneList extends CollectionFacetAbstract {
*/
@Override
public int size(final ManagedObject wrappedInstanceCollectionVector) {
- return collection(wrappedInstanceCollectionVector).size();
+ return unwrap(wrappedInstanceCollectionVector).size();
}
@Override
@@ -66,7 +64,7 @@ public class CollectionFacetOnStandaloneList extends CollectionFacetAbstract {
// -- HELPER
- private List<ManagedObject> collection(final ManagedObject wrappedObjectList) {
+ private FreeStandingList unwrap(final ManagedObject wrappedObjectList) {
return (FreeStandingList) wrappedObjectList.getPojo();
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnContainer.java
similarity index 92%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnContainer.java
index e8855f2..f998da9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnContainer.java
@@ -27,8 +27,8 @@ import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetDefaultToObject;
import org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetOnStandaloneList;
import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.Container;
import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
-import org.apache.isis.core.metamodel.spec.FreeStandingList;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -42,9 +42,9 @@ import static org.apache.isis.core.commons.internal.base._With.mapIfPresentElse;
/**
* A custom {@link ObjectSpecification} that is designed to treat the
- * {@link FreeStandingList} class as a "standalone" collection.
+ * {@link Container} class as a "standalone" collection.
*/
-public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbstract {
+public class ObjectSpecificationOnContainer extends ObjectSpecificationAbstract {
private static final String NAME = "Instances";
private static final String DESCRIBED_AS = "Typed instances";
@@ -52,10 +52,10 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst
// -- constructor
- public ObjectSpecificationOnStandaloneList(
+ public ObjectSpecificationOnContainer(
final FacetProcessor facetProcessor,
final PostProcessor postProcessor) {
- super(FreeStandingList.class, NAME, facetProcessor, postProcessor);
+ super(Container.class, NAME, facetProcessor, postProcessor);
this.specId = ObjectSpecId.of(getCorrespondingClass().getName());
FacetUtil.addFacet(
@@ -70,7 +70,7 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst
protected void introspectTypeHierarchy() {
loadSpecOfSuperclass(Object.class);
- addFacet(new CollectionFacetOnStandaloneList(this));
+ addFacet(new CollectionFacetOnContainer(this));
addFacet(new TypeOfFacetDefaultToObject(this) {
});
@@ -120,7 +120,7 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst
@Override
public String getTitle(ManagedObject contextAdapterIfAny, ManagedObject targetAdapter) {
- return ((FreeStandingList) targetAdapter.getPojo()).titleString();
+ return ((Container) targetAdapter.getPojo()).titleString();
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuetypes/ValueTypeProviderForCollections.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuetypes/ValueTypeProviderForCollections.java
index 98f9415..8939891 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuetypes/ValueTypeProviderForCollections.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuetypes/ValueTypeProviderForCollections.java
@@ -31,7 +31,7 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.apache.isis.applib.annotation.OrderPrecedence;
-import org.apache.isis.core.metamodel.spec.FreeStandingList;
+import org.apache.isis.core.metamodel.spec.Container;
@Component
@Named("isisMetaModel.ValueTypeProviderCollections")
@@ -44,7 +44,7 @@ public class ValueTypeProviderForCollections implements ValueTypeProvider {
ValueTypeDefinition.collection(List.class),
ValueTypeDefinition.collection(Set.class),
ValueTypeDefinition.collection(SortedSet.class),
- ValueTypeDefinition.collection(FreeStandingList.class)
+ ValueTypeDefinition.collection(Container.class)
));
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/session/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/session/PersistenceSession.java
index 4bc5c02..07fbb25 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/session/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/session/PersistenceSession.java
@@ -20,12 +20,12 @@ package org.apache.isis.core.runtime.persistence.session;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import org.apache.isis.applib.query.Query;
import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.commons.internal.context._Context;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.spec.EntityState;
import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -88,14 +88,8 @@ public interface PersistenceSession {
/**@since 2.0*/
Map<RootOid, Object> fetchPersistentPojos(List<RootOid> rootOids);
- // -------------------------------------------------------------------------------------------------
- // -- API NOT STABLE YET - SUBJECT TO REFACTORING
- // -------------------------------------------------------------------------------------------------
-
- // -- TODO remove ObjectAdapter references from API
-
- <T> List<ObjectAdapter> allMatchingQuery(final Query<T> query);
- <T> ObjectAdapter firstMatchingQuery(final Query<T> query);
+ Can<ManagedObject> allMatchingQuery(final Query<?> query);
+ Optional<ManagedObject> firstMatchingQuery(final Query<?> query);
/**
* Removes the specified object from the system. The specified object's data
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
index 27717fa..6d02c05 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
@@ -186,8 +186,6 @@ public class RepositoryServiceDefault implements RepositoryService {
return _Casts.uncheckedCast(ManagedObject.unwrapMultipleAsList(allMatching));
}
-
-
@Override
public <T> Optional<T> uniqueMatch(final Class<T> type, final Predicate<T> predicate) {
final List<T> instances = allMatches(type, predicate, 0, 2); // No need to fetch more than 2.
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
index b52e100..4e43990 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryFindAllInstancesProcessor.java
@@ -18,9 +18,8 @@
*/
package org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.queries;
-import java.util.List;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.commons.collections.Can;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.persistence.jdo.datanucleus5.persistence.PersistenceSession5;
import org.apache.isis.persistence.jdo.datanucleus5.persistence.query.PersistenceQueryFindAllInstances;
@@ -35,7 +34,7 @@ public class PersistenceQueryFindAllInstancesProcessor extends PersistenceQueryP
}
@Override
- public List<ObjectAdapter> process(final PersistenceQueryFindAllInstances persistenceQuery) {
+ public Can<ManagedObject> process(final PersistenceQueryFindAllInstances persistenceQuery) {
val spec = persistenceQuery.getSpecification();
val cls = spec.getCorrespondingClass();
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
index 16abee0..0852cde 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
@@ -24,6 +24,7 @@ import java.util.Map;
import javax.jdo.Query;
+import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.commons.internal.collections._Lists;
import org.apache.isis.core.commons.internal.collections._Maps;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -46,7 +47,7 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
}
@Override
- public List<ObjectAdapter> process(final PersistenceQueryFindUsingApplibQueryDefault persistenceQuery) {
+ public Can<ManagedObject> process(final PersistenceQueryFindUsingApplibQueryDefault persistenceQuery) {
final String queryName = persistenceQuery.getQueryName();
final ObjectSpecification objectSpec = persistenceQuery.getSpecification();
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessor.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessor.java
index 9e10702..e5c1d2c 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessor.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessor.java
@@ -18,13 +18,12 @@
*/
package org.apache.isis.persistence.jdo.datanucleus5.datanucleus.persistence.queries;
-import java.util.List;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.commons.collections.Can;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.persistence.jdo.datanucleus5.persistence.query.PersistenceQuery;
public interface PersistenceQueryProcessor<T extends PersistenceQuery> {
- List<ObjectAdapter> process(T query);
+
+ Can<ManagedObject> process(T query);
}
-// Copyright (c) Naked Objects Group Ltd.
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java
index 49695d5..9ae40d7 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/persistence/queries/PersistenceQueryProcessorAbstract.java
@@ -25,14 +25,18 @@ import javax.jdo.listener.InstanceLifecycleEvent;
import org.datanucleus.enhancement.Persistable;
import org.apache.isis.applib.services.registry.ServiceRegistry;
+import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.commons.internal.assertions._Assert;
import org.apache.isis.core.commons.internal.collections._Lists;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.persistence.jdo.applib.services.IsisJdoSupport_v3_2;
import org.apache.isis.persistence.jdo.datanucleus5.persistence.IsisLifecycleListener;
import org.apache.isis.persistence.jdo.datanucleus5.persistence.PersistenceSession5;
import org.apache.isis.persistence.jdo.datanucleus5.persistence.query.PersistenceQuery;
+import lombok.val;
+
public abstract class PersistenceQueryProcessorAbstract<T extends PersistenceQuery>
implements PersistenceQueryProcessor<T> {
@@ -49,9 +53,9 @@ implements PersistenceQueryProcessor<T> {
* {@link IsisLifecycleListener#postLoad(InstanceLifecycleEvent) {
* to be called.
*/
- protected List<ObjectAdapter> loadAdapters(final List<?> pojos) {
- final List<ObjectAdapter> adapters = _Lists.newArrayList();
- for (final Object pojo : pojos) {
+ protected Can<ManagedObject> loadAdapters(final List<?> pojos) {
+ val adapters = _Lists.<ManagedObject>newArrayList();
+ for (val pojo : pojos) {
// ought not to be necessary, however for some queries it seems that the
// lifecycle listener is not called
ObjectAdapter adapter;
@@ -66,7 +70,7 @@ implements PersistenceQueryProcessor<T> {
}
adapters.add(adapter);
}
- return adapters;
+ return Can.ofCollection(adapters);
}
// -- HELPER
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
index 0f2e508..482e024 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
@@ -26,6 +26,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
import static java.util.Objects.requireNonNull;
@@ -48,6 +49,7 @@ import org.apache.isis.applib.services.command.Command;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
import org.apache.isis.applib.services.iactn.Interaction;
import org.apache.isis.applib.services.xactn.TransactionService;
+import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.internal.collections._Maps;
import org.apache.isis.core.commons.internal.exceptions._Exceptions;
@@ -57,7 +59,6 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.PojoRefreshException;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
import org.apache.isis.core.metamodel.facets.object.callbacks.CallbackFacet;
import org.apache.isis.core.metamodel.facets.object.callbacks.LoadedCallbackFacet;
import org.apache.isis.core.metamodel.facets.object.callbacks.LoadedLifecycleEventFacet;
@@ -73,9 +74,9 @@ import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingCallbackFa
import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingLifecycleEventFacet;
import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
import org.apache.isis.core.metamodel.spec.EntityState;
-import org.apache.isis.core.metamodel.spec.FreeStandingList;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.security.authentication.AuthenticationSession;
import org.apache.isis.persistence.jdo.applib.exceptions.NotPersistableException;
import org.apache.isis.persistence.jdo.applib.exceptions.UnsupportedFindException;
import org.apache.isis.persistence.jdo.applib.fixturestate.FixturesInstalledStateHolder;
@@ -92,7 +93,6 @@ import org.apache.isis.persistence.jdo.datanucleus5.persistence.command.Persiste
import org.apache.isis.persistence.jdo.datanucleus5.persistence.query.PersistenceQuery;
import org.apache.isis.persistence.jdo.datanucleus5.persistence.query.PersistenceQueryFindAllInstances;
import org.apache.isis.persistence.jdo.datanucleus5.persistence.query.PersistenceQueryFindUsingApplibQueryDefault;
-import org.apache.isis.core.security.authentication.AuthenticationSession;
import static org.apache.isis.core.commons.internal.base._Casts.uncheckedCast;
@@ -220,7 +220,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
completeCommandFromInteractionAndClearDomainEvents();
- //TODO[2125] shold no longer be required
+ //TODO[2125] should no longer be required
// try {
// val currentTransaction = transactionManager.getCurrentTransaction();
// transactionManager.flushTransaction(currentTransaction);
@@ -307,17 +307,16 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
interaction.clear();
}
- // -- QuerySubmitter impl, findInstancesInTransaction
@Override
- public <T> List<ObjectAdapter> allMatchingQuery(final Query<T> query) {
- final ObjectAdapter instances = findInstancesInTransaction(query, QueryCardinality.MULTIPLE);
- return CollectionFacet.Utils.toAdapterList(instances);
+ public Can<ManagedObject> allMatchingQuery(final Query<?> query) {
+ val instances = findInstancesInTransaction(query, QueryCardinality.MULTIPLE);
+ return instances;
}
+
@Override
- public <T> ObjectAdapter firstMatchingQuery(final Query<T> query) {
- final ObjectAdapter instances = findInstancesInTransaction(query, QueryCardinality.SINGLE);
- final List<ObjectAdapter> list = CollectionFacet.Utils.toAdapterList(instances);
- return list.size() > 0 ? list.get(0) : null;
+ public Optional<ManagedObject> firstMatchingQuery(final Query<?> query) {
+ val instances = findInstancesInTransaction(query, QueryCardinality.SINGLE);
+ return instances.getFirst();
}
/**
@@ -330,7 +329,10 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
* @throws org.apache.isis.persistence.jdo.applib.exceptions.UnsupportedFindException
* if the criteria is not support by this persistor
*/
- private <T> ObjectAdapter findInstancesInTransaction(final Query<T> query, final QueryCardinality cardinality) {
+ private Can<ManagedObject> findInstancesInTransaction(
+ final Query<?> query,
+ final QueryCardinality cardinality) {
+
if (log.isDebugEnabled()) {
log.debug("findInstances using (applib) Query: {}", query);
}
@@ -343,11 +345,15 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
final PersistenceQueryProcessor<? extends PersistenceQuery> processor = lookupProcessorFor(persistenceQuery);
- final List<ObjectAdapter> instances = transactionService.executeWithinTransaction(
+ final Can<ManagedObject> instances = transactionService.executeWithinTransaction(
()->processPersistenceQuery(processor, persistenceQuery) );
- final ObjectSpecification specification = persistenceQuery.getSpecification();
- final FreeStandingList results = FreeStandingList.of(specification, instances);
- return adapterFor(results);
+
+ return instances;
+
+ //XXX legacy of
+ //final ObjectSpecification specification = persistenceQuery.getSpecification();
+ //final FreeStandingList results = FreeStandingList.of(specification, instances);
+ //return adapterFor(results);
}
/**
@@ -378,7 +384,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
return processor;
}
@SuppressWarnings("unchecked")
- private <Q extends PersistenceQuery> List<ObjectAdapter> processPersistenceQuery(
+ private <Q extends PersistenceQuery> Can<ManagedObject> processPersistenceQuery(
final PersistenceQueryProcessor<Q> persistenceQueryProcessor,
final PersistenceQuery persistenceQuery) {
return persistenceQueryProcessor.process((Q) persistenceQuery);
@@ -863,8 +869,6 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
}
-
-
}