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