You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/09/15 08:03:22 UTC

[17/50] [abbrv] isis git commit: ISIS-1194: PersistenceSession now implements QuerySubmitter API (cf it implementing AdapterManager)

ISIS-1194: PersistenceSession now implements QuerySubmitter API (cf it implementing AdapterManager)


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/0c3f2f7a
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/0c3f2f7a
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/0c3f2f7a

Branch: refs/heads/master
Commit: 0c3f2f7af2e7135f3a1ae175df2993ffcc68f03b
Parents: fa309dc
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Sep 12 08:57:16 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:19 2015 +0100

----------------------------------------------------------------------
 .../system/persistence/PersistenceSession.java  | 32 +++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0c3f2f7a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index 6405ee2..e3f2c33 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -48,6 +48,8 @@ import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
@@ -56,6 +58,7 @@ import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacetUtils;
 import org.apache.isis.core.metamodel.facets.object.callbacks.CallbackFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.CreatedCallbackFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.LoadedCallbackFacet;
@@ -108,7 +111,8 @@ import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 
-public class PersistenceSession implements TransactionalResource, SessionScopedComponent, DebuggableWithTitle, AdapterManager {
+public class PersistenceSession implements TransactionalResource, SessionScopedComponent, DebuggableWithTitle, AdapterManager,
+        QuerySubmitter {
 
     private static final Logger LOG = LoggerFactory.getLogger(PersistenceSession.class);
 
@@ -337,12 +341,38 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         setState(State.CLOSED);
     }
 
+    //endregion
+
+    //region > Injectable
+    //endregion
+
     @Override
     public void injectInto(final Object candidate) {
         if (AdapterManagerAware.class.isAssignableFrom(candidate.getClass())) {
             final AdapterManagerAware cast = AdapterManagerAware.class.cast(candidate);
             cast.setAdapterManager(this);
         }
+        if (QuerySubmitterAware.class.isAssignableFrom(candidate.getClass())) {
+            final QuerySubmitterAware cast = QuerySubmitterAware.class.cast(candidate);
+            cast.setQuerySubmitter(this);
+        }
+    }
+
+    //region > QuerySubmitter impl
+
+    @Override
+    public <T> List<ObjectAdapter> allMatchingQuery(final Query<T> query) {
+        final ObjectAdapter instances = findInstancesInTransaction(query,
+                QueryCardinality.MULTIPLE);
+        return CollectionFacetUtils.convertToAdapterList(instances);
+    }
+
+    @Override
+    public <T> ObjectAdapter firstMatchingQuery(final Query<T> query) {
+        final ObjectAdapter instances = findInstancesInTransaction(query,
+                QueryCardinality.SINGLE);
+        final List<ObjectAdapter> list = CollectionFacetUtils.convertToAdapterList(instances);
+        return list.size() > 0 ? list.get(0) : null;
     }
 
     //endregion