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:48 UTC
[43/50] [abbrv] isis git commit: ISIS-1194: using PersistenceSession
rather than AdapterManager interface where possible;
ISIS-1194: using PersistenceSession rather than AdapterManager interface where possible;
removed:
- adapterFor(RootOid) and adapterFor(RootOid, ConcurrencyChecking) from AdapterManager; always call PersistenceSession instead
- remove remapRecreatedojo, remapAsPersistent from AdapterManagerDefault, as are now never called
- simplified OidUtils (part of RO rendering), moving logic into PersistenceSession as new "adapterForAny(RootOid)" method
- in PersistenceSession:
- inlined getOidAdapterMap() and getPojoAdapterMap();
- marked methods private where possible
also:
- added RendererContext5 to expose the SpecificationLoader (though in the end, not actually required)
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/d627d827
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/d627d827
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/d627d827
Branch: refs/heads/master
Commit: d627d827d40cffedf26b5f36761e4bcea6c7f4ad
Parents: ecdb512
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Sep 14 21:14:26 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 21:14:26 2015 +0100
----------------------------------------------------------------------
.../integtestsupport/IsisSystemForTest.java | 2 +-
.../metamodel/adapter/mgr/AdapterManager.java | 39 ----
.../noruntime/RuntimeContextNoRuntime.java | 10 --
.../adaptermanager/AdapterManagerDefault.java | 27 ---
.../container/DomainObjectContainerResolve.java | 2 +-
.../internal/RuntimeContextFromSession.java | 11 --
.../AbstractIsisSessionTemplate.java | 4 +-
.../system/persistence/PersistenceSession.java | 177 +++++++++++++------
.../rendering/RendererContext5.java | 30 ++++
.../restfulobjects/server/ResourceContext.java | 4 +-
.../restfulobjects/server/util/OidUtils.java | 40 +----
.../viewer/wicket/model/models/ActionModel.java | 2 +-
12 files changed, 157 insertions(+), 191 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
index 8e9a348..2dc250c 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
@@ -587,7 +587,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
public ObjectAdapter recreateAdapter(RootOid oid) {
ensureSessionInProgress();
- return getAdapterManager().adapterFor(oid);
+ return getPersistenceSession().adapterFor(oid);
}
public ObjectAdapter remapAsPersistent(Object pojo, RootOid persistentOid) {
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
index 3c06936..899a656 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
@@ -25,7 +25,6 @@ import org.apache.isis.applib.annotation.ActionSemantics;
import org.apache.isis.core.commons.components.Injectable;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
public interface AdapterManager extends Injectable {
@@ -120,46 +119,8 @@ public interface AdapterManager extends Injectable {
}
- /**
- * As per {@link #adapterFor(RootOid, ConcurrencyChecking)}, with
- * {@link ConcurrencyChecking#NO_CHECK no checking}.
- *
- * <p>
- * This method will <i>always</i> return an object, possibly indicating it is persistent; so make sure that you
- * know that the oid does indeed represent an object you know exists.
- * </p>
- */
- ObjectAdapter adapterFor(RootOid oid);
- /**
- * Either returns an existing {@link ObjectAdapter adapter} (as per
- * {@link #getAdapterFor(Oid)}), otherwise re-creates an adapter with the
- * specified (persistent) {@link Oid}.
- *
- * <p>
- * Typically called when the {@link Oid} is already known, that is, when
- * resolving an already-persisted object. Is also available for
- * <tt>Memento</tt> support however, so {@link Oid} could also represent a
- * {@link Oid#isTransient() transient} object.
- *
- * <p>
- * The pojo itself is recreated by delegating to a {@link AdapterManager}.
- *
- * <p>
- * The {@link ConcurrencyChecking} parameter determines whether concurrency checking is performed.
- * If it is requested, then a check is made to ensure that the {@link Oid#getVersion() version}
- * of the {@link RootOid oid} of the recreated adapter is the same as that of the provided {@link RootOid oid}.
- * If the version differs, then a {@link ConcurrencyException} is thrown.
- *
- * <p>
- * ALSO, even if a {@link ConcurrencyException}, then the provided {@link RootOid oid}'s {@link Version version}
- * will be {@link RootOid#setVersion(Version) set} to the current
- * value. This allows the client to retry if they wish.
- *
- * @throws {@link org.apache.isis.core.runtime.persistence.ObjectNotFoundException} if the object does not exist.
- */
- ObjectAdapter adapterFor(RootOid oid, ConcurrencyChecking concurrencyChecking);
/**
* Looks up or creates a standalone (value) or root adapter.
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index 814a784..4297fb0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -141,16 +141,6 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
}
@Override
- public ObjectAdapter adapterFor(RootOid rootOid) {
- throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
- }
-
- @Override
- public ObjectAdapter adapterFor(RootOid rootOid, ConcurrencyChecking concurrencyChecking) {
- throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
- }
-
- @Override
public ObjectAdapter getAdapterFor(Oid oid) {
throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
index e894cdc..b631847 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
@@ -27,7 +27,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
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;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -102,27 +101,8 @@ public class AdapterManagerDefault implements AdapterManager,
return persistenceSession.adapterFor(pojo, parentAdapter, collection);
}
-
- @Override
- public ObjectAdapter adapterFor(final RootOid rootOid) {
- return persistenceSession.adapterFor(rootOid);
- }
-
- @Override
- public ObjectAdapter adapterFor(
- final RootOid oid,
- final ConcurrencyChecking concurrencyChecking) {
- return persistenceSession.adapterFor(oid, concurrencyChecking);
- }
-
-
//endregion
- //region > remapRecreatedPojo
- public void remapRecreatedPojo(ObjectAdapter adapter, final Object pojo) {
- persistenceSession.remapRecreatedPojo(adapter, pojo);
- }
- //endregion
//region > mapRecreatedPojo
@@ -141,13 +121,6 @@ public class AdapterManagerDefault implements AdapterManager,
//endregion
- //region > remapAsPersistent
-
- public void remapAsPersistent(final ObjectAdapter adapter, RootOid hintRootOid) {
- persistenceSession.remapAsPersistent(adapter, hintRootOid);
- }
-
- //endregion
//region > Injectable
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
index a186b9d..d8cffd9 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/container/DomainObjectContainerResolve.java
@@ -95,7 +95,7 @@ public class DomainObjectContainerResolve {
}
private ObjectAdapter adapterFor(final RootOid oid) {
- return getAdapterManager().adapterFor(oid);
+ return getPersistenceSession().adapterFor(oid);
}
// /////////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index 3f5a6b5..9eba740 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -35,7 +35,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
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;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProviderAbstract;
@@ -123,16 +122,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
}
@Override
- public ObjectAdapter adapterFor(RootOid oid) {
- return getPersistenceSession().adapterFor(oid);
- }
-
- @Override
- public ObjectAdapter adapterFor(RootOid oid, ConcurrencyChecking concurrencyChecking) {
- return getPersistenceSession().adapterFor(oid, concurrencyChecking);
- }
-
- @Override
public void injectInto(Object candidate) {
if (AdapterManagerAware.class.isAssignableFrom(candidate.getClass())) {
final AdapterManagerAware cast = AdapterManagerAware.class.cast(candidate);
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java
index 0205dd0..5a18234 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/sessiontemplate/AbstractIsisSessionTemplate.java
@@ -81,10 +81,10 @@ public abstract class AbstractIsisSessionTemplate {
// //////////////////////////////////////
protected ObjectAdapter adapterFor(final Object targetObject) {
- return getAdapterManager().adapterFor(targetObject);
+ return getPersistenceSession().adapterFor(targetObject);
}
protected ObjectAdapter adapterFor(final RootOid rootOid) {
- return getAdapterManager().adapterFor(rootOid);
+ return getPersistenceSession().adapterFor(rootOid);
}
// //////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/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 9ef8083..d2455a8 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
@@ -256,8 +256,8 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
LOG.debug("opening " + this);
}
- getOidAdapterMap().open();
- getPojoAdapterMap().open();
+ oidAdapterMap.open();
+ pojoAdapterMap.open();
persistenceManager = applicationComponents.getPersistenceManagerFactory().getPersistenceManager();
@@ -356,14 +356,14 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
try {
- getOidAdapterMap().close();
+ oidAdapterMap.close();
} catch(final Throwable ex) {
// ignore
LOG.error("close: oidAdapterMap#close() failed; continuing to avoid memory leakage");
}
try {
- getPojoAdapterMap().close();
+ pojoAdapterMap.close();
} catch(final Throwable ex) {
// ignore
LOG.error("close: pojoAdapterMap#close() failed; continuing to avoid memory leakage");
@@ -1178,12 +1178,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
debug.appendln();
- debug.appendTitle(getPojoAdapterMap().debugTitle());
- getPojoAdapterMap().debugData(debug);
+ debug.appendTitle(pojoAdapterMap.debugTitle());
+ pojoAdapterMap.debugData(debug);
debug.appendln();
- debug.appendTitle(getOidAdapterMap().debugTitle());
- getOidAdapterMap().debugData(debug);
+ debug.appendTitle(oidAdapterMap.debugTitle());
+ oidAdapterMap.debugData(debug);
debug.appendTitle("Persistor");
getTransactionManager().debugData(debug);
@@ -1265,19 +1265,11 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
private final PojoAdapterHashMap pojoAdapterMap = new PojoAdapterHashMap();
private final OidAdapterHashMap oidAdapterMap = new OidAdapterHashMap();
- public PojoAdapterHashMap getPojoAdapterMap() {
- return pojoAdapterMap;
- }
-
- public OidAdapterHashMap getOidAdapterMap() {
- return oidAdapterMap;
- }
-
@Override
public ObjectAdapter getAdapterFor(final Object pojo) {
ensureThatArg(pojo, is(notNullValue()));
- return getPojoAdapterMap().getAdapter(pojo);
+ return pojoAdapterMap.getAdapter(pojo);
}
@Override
@@ -1285,11 +1277,11 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
ensureThatArg(oid, is(notNullValue()));
ensureMapsConsistent(oid);
- return getOidAdapterMap().getAdapter(oid);
+ return oidAdapterMap.getAdapter(oid);
}
- public ObjectAdapter existingOrValueAdapter(Object pojo) {
+ private ObjectAdapter existingOrValueAdapter(Object pojo) {
// attempt to locate adapter for the pojo
ObjectAdapter adapter = getAdapterFor(pojo);
@@ -1328,7 +1320,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
/**
* Fail early if any problems.
*/
- public void ensureMapsConsistent(final ObjectAdapter adapter) {
+ private void ensureMapsConsistent(final ObjectAdapter adapter) {
if (adapter.isValue()) {
return;
}
@@ -1345,7 +1337,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
private void ensureMapsConsistent(final Oid oid) {
ensureThatArg(oid, is(notNullValue()));
- final ObjectAdapter adapter = getOidAdapterMap().getAdapter(oid);
+ final ObjectAdapter adapter = oidAdapterMap.getAdapter(oid);
if (adapter == null) {
return;
}
@@ -1355,7 +1347,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
private void ensurePojoAdapterMapConsistent(final ObjectAdapter adapter) {
final Object adapterPojo = adapter.getObject();
- final ObjectAdapter adapterAccordingToPojoAdapterMap = getPojoAdapterMap().getAdapter(adapterPojo);
+ final ObjectAdapter adapterAccordingToPojoAdapterMap = pojoAdapterMap.getAdapter(adapterPojo);
// take care not to touch the pojo, since it might have been deleted.
ensureThatArg(
adapter, is(adapterAccordingToPojoAdapterMap),
@@ -1365,7 +1357,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
private void ensureOidAdapterMapConsistent(final ObjectAdapter adapter) {
final Oid adapterOid = adapter.getOid();
- final ObjectAdapter adapterAccordingToOidAdapterMap = getOidAdapterMap()
+ final ObjectAdapter adapterAccordingToOidAdapterMap = oidAdapterMap
.getAdapter(adapterOid);
// take care not to touch the pojo, since it might have been deleted.
ensureThatArg(
@@ -1375,13 +1367,82 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
- @Override
+ public ObjectAdapter adapterForAny(RootOid rootOid) {
+
+ final ObjectSpecId specId = rootOid.getObjectSpecId();
+ final ObjectSpecification spec = getSpecificationLoader().lookupBySpecId(specId);
+ if(spec == null) {
+ // eg "NONEXISTENT:123"
+ return null;
+ }
+
+ if(spec.containsFacet(ViewModelFacet.class)) {
+
+ // this is a hack; the RO viewer when rendering the URL for the view model loses the "view model" indicator
+ // ("*") from the specId, meaning that the marshalling logic above in RootOidDefault.deString() creates an
+ // oid in the wrong state. The code below checks for this and recreates the oid with the current state of 'view model'
+ if(!rootOid.isViewModel()) {
+ rootOid = new RootOid(rootOid.getObjectSpecId(), rootOid.getIdentifier(), Oid.State.VIEWMODEL);
+ }
+
+ try {
+ return adapterFor(rootOid);
+ } catch(final ObjectNotFoundException ex) {
+ return null;
+ } catch(final PojoRecreationException ex) {
+ return null;
+ }
+ } else {
+ try {
+ ObjectAdapter objectAdapter = loadObjectInTransaction(rootOid);
+ return objectAdapter.isTransient() ? null : objectAdapter;
+ } catch(final ObjectNotFoundException ex) {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * As per {@link #adapterFor(RootOid, ConcurrencyChecking)}, with
+ * {@link ConcurrencyChecking#NO_CHECK no checking}.
+ *
+ * <p>
+ * This method will <i>always</i> return an object, possibly indicating it is persistent; so make sure that you
+ * know that the oid does indeed represent an object you know exists.
+ * </p>
+ */
public ObjectAdapter adapterFor(final RootOid rootOid) {
return adapterFor(rootOid, ConcurrencyChecking.NO_CHECK);
}
- @Override
+ /**
+ * Either returns an existing {@link ObjectAdapter adapter} (as per
+ * {@link #getAdapterFor(Oid)}), otherwise re-creates an adapter with the
+ * specified (persistent) {@link Oid}.
+ *
+ * <p>
+ * Typically called when the {@link Oid} is already known, that is, when
+ * resolving an already-persisted object. Is also available for
+ * <tt>Memento</tt> support however, so {@link Oid} could also represent a
+ * {@link Oid#isTransient() transient} object.
+ *
+ * <p>
+ * The pojo itself is recreated by delegating to a {@link AdapterManager}.
+ *
+ * <p>
+ * The {@link ConcurrencyChecking} parameter determines whether concurrency checking is performed.
+ * If it is requested, then a check is made to ensure that the {@link Oid#getVersion() version}
+ * of the {@link RootOid oid} of the recreated adapter is the same as that of the provided {@link RootOid oid}.
+ * If the version differs, then a {@link ConcurrencyException} is thrown.
+ *
+ * <p>
+ * ALSO, even if a {@link ConcurrencyException}, then the provided {@link RootOid oid}'s {@link Version version}
+ * will be {@link RootOid#setVersion(Version) set} to the current
+ * value. This allows the client to retry if they wish.
+ *
+ * @throws {@link org.apache.isis.core.runtime.persistence.ObjectNotFoundException} if the object does not exist.
+ */
public ObjectAdapter adapterFor(
final RootOid rootOid,
final ConcurrencyChecking concurrencyChecking) {
@@ -1412,9 +1473,9 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
// check for exception, but don't throw if suppressed through thread-local
final Version otherVersion = originalOid.getVersion();
final Version thisVersion = recreatedOid.getVersion();
- if(thisVersion != null &&
- otherVersion != null &&
- thisVersion.different(otherVersion)) {
+ if( thisVersion != null &&
+ otherVersion != null &&
+ thisVersion.different(otherVersion)) {
if(concurrencyCheckingGloballyEnabled && ConcurrencyChecking.isCurrentlyEnabled()) {
LOG.info("concurrency conflict detected on " + recreatedOid + " (" + otherVersion + ")");
@@ -1444,7 +1505,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
- public Object recreatePojo(RootOid oid) {
+ private Object recreatePojo(RootOid oid) {
if(oid.isTransient() || oid.isViewModel()) {
return recreatePojoDefault(oid);
} else {
@@ -1528,7 +1589,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* Should only be called if the pojo is known not to be
* {@link #getAdapterFor(Object) mapped}.
*/
- public ObjectAdapter createCollectionAdapter(
+ private ObjectAdapter createCollectionAdapter(
final Object pojo,
final ObjectAdapter parentAdapter,
final OneToManyAssociation otma) {
@@ -1554,8 +1615,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
-
-
/**
* {@inheritDoc}
*
@@ -1586,7 +1645,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
LOG.debug("removing root adapter from oid map");
}
- boolean removed = getOidAdapterMap().remove(transientRootOid);
+ boolean removed = oidAdapterMap.remove(transientRootOid);
if (!removed) {
LOG.warn("could not remove oid: " + transientRootOid);
// should we fail here with a more serious error?
@@ -1597,7 +1656,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
for (final ObjectAdapter collectionAdapter : rootAndCollectionAdapters) {
final Oid collectionOid = collectionAdapter.getOid();
- removed = getOidAdapterMap().remove(collectionOid);
+ removed = oidAdapterMap.remove(collectionOid);
if (!removed) {
LOG.warn("could not remove collectionOid: " + collectionOid);
// should we fail here with a more serious error?
@@ -1633,7 +1692,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
oidMarshaller) + " (was: " + transientRootOid.enString(oidMarshaller) + ")");
}
adapter.replaceOid(persistedRootOid);
- getOidAdapterMap().add(persistedRootOid, adapter);
+ oidAdapterMap.add(persistedRootOid, adapter);
// associate the collection adapters with new Oids, and re-map
if (LOG.isDebugEnabled()) {
@@ -1642,7 +1701,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
for (final ObjectAdapter collectionAdapter : rootAndCollectionAdapters) {
final ParentedCollectionOid previousCollectionOid = (ParentedCollectionOid) collectionAdapter.getOid();
final ParentedCollectionOid persistedCollectionOid = previousCollectionOid.asPersistent(persistedRootOid);
- getOidAdapterMap().add(persistedCollectionOid, collectionAdapter);
+ oidAdapterMap.add(persistedCollectionOid, collectionAdapter);
}
@@ -1658,9 +1717,9 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
final Object collectionPojoActuallyOnPojo = getCollectionPojo(otma, adapter);
if (collectionPojoActuallyOnPojo != collectionPojoWrappedByAdapter) {
- getPojoAdapterMap().remove(collectionAdapter);
+ pojoAdapterMap.remove(collectionAdapter);
collectionAdapter.replacePojo(collectionPojoActuallyOnPojo);
- getPojoAdapterMap().add(collectionPojoActuallyOnPojo, collectionAdapter);
+ pojoAdapterMap.add(collectionPojoActuallyOnPojo, collectionAdapter);
}
}
@@ -1669,7 +1728,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
}
- public static Object getCollectionPojo(final OneToManyAssociation association, final ObjectAdapter ownerAdapter) {
+ private static Object getCollectionPojo(final OneToManyAssociation association, final ObjectAdapter ownerAdapter) {
final PropertyOrCollectionAccessorFacet accessor = association.getFacet(PropertyOrCollectionAccessorFacet.class);
return accessor.getProperty(ownerAdapter, InteractionInitiatedBy.FRAMEWORK);
}
@@ -1738,6 +1797,18 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
unmap(adapter);
}
+ private void unmap(final ObjectAdapter adapter) {
+ ensureMapsConsistent(adapter);
+
+ final Oid oid = adapter.getOid();
+ if (oid != null) {
+ oidAdapterMap.remove(oid);
+ }
+ pojoAdapterMap.remove(adapter);
+ }
+
+
+
public void remapRecreatedPojo(ObjectAdapter adapter, final Object pojo) {
removeAdapter(adapter);
@@ -1746,7 +1817,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
- public ObjectAdapter createRootOrAggregatedAdapter(final Oid oid, final Object pojo) {
+ private ObjectAdapter createRootOrAggregatedAdapter(final Oid oid, final Object pojo) {
final ObjectAdapter createdAdapter;
if(oid instanceof RootOid) {
final RootOid rootOid = (RootOid) oid;
@@ -1762,7 +1833,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* Creates a new transient root {@link ObjectAdapter adapter} for the supplied domain
* object.
*/
- public ObjectAdapter createTransientOrViewModelRootAdapter(final Object pojo) {
+ private ObjectAdapter createTransientOrViewModelRootAdapter(final Object pojo) {
final RootOid rootOid = oidGenerator.createTransientOrViewModelOid(pojo);
return createRootAdapter(pojo, rootOid);
}
@@ -1779,7 +1850,7 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* {@link #getAdapterFor(Object) mapped}, and for immutable value types
* referenced.
*/
- public ObjectAdapter createStandaloneAdapter(final Object pojo) {
+ private ObjectAdapter createStandaloneAdapter(final Object pojo) {
return createAdapter(pojo, null);
}
@@ -1790,12 +1861,12 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
* @see #createStandaloneAdapter(Object)
* @see #createCollectionAdapter(Object, ParentedCollectionOid)
*/
- public ObjectAdapter createRootAdapter(final Object pojo, RootOid rootOid) {
+ private ObjectAdapter createRootAdapter(final Object pojo, RootOid rootOid) {
Ensure.ensureThatArg(rootOid, is(not(nullValue())));
return createAdapter(pojo, rootOid);
}
- public ObjectAdapter createCollectionAdapter(
+ private ObjectAdapter createCollectionAdapter(
final Object pojo,
ParentedCollectionOid collectionOid) {
Ensure.ensureThatArg(collectionOid, is(not(nullValue())));
@@ -1812,13 +1883,13 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
}
- public ObjectAdapter mapAndInjectServices(final ObjectAdapter adapter) {
+ private ObjectAdapter mapAndInjectServices(final ObjectAdapter adapter) {
// since the whole point of this method is to map an adapter that's just been created.
// so we *don't* call ensureMapsConsistent(adapter);
Assert.assertNotNull(adapter);
final Object pojo = adapter.getObject();
- Assert.assertFalse("POJO Map already contains object", pojo, getPojoAdapterMap().containsPojo(pojo));
+ Assert.assertFalse("POJO Map already contains object", pojo, pojoAdapterMap.containsPojo(pojo));
if (LOG.isDebugEnabled()) {
// don't interact with the underlying object because may be a ghost
@@ -1840,11 +1911,11 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
// add all aggregated collections
final ObjectSpecification objSpec = adapter.getSpecification();
if (!adapter.isParentedCollection() || adapter.isParentedCollection() && !objSpec.isImmutable()) {
- getPojoAdapterMap().add(pojo, adapter);
+ pojoAdapterMap.add(pojo, adapter);
}
// order is important - add to pojo map first, then identity map
- getOidAdapterMap().add(adapter.getOid(), adapter);
+ oidAdapterMap.add(adapter.getOid(), adapter);
// must inject after mapping, otherwise infinite loop
servicesInjector.injectServicesInto(pojo);
@@ -1852,16 +1923,6 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
return adapter;
}
- public void unmap(final ObjectAdapter adapter) {
- ensureMapsConsistent(adapter);
-
- final Oid oid = adapter.getOid();
- if (oid != null) {
- getOidAdapterMap().remove(oid);
- }
- getPojoAdapterMap().remove(adapter);
- }
-
//endregion
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext5.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext5.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext5.java
new file mode 100644
index 0000000..f91d9d2
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext5.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restfulobjects.rendering;
+
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+
+/**
+ * TODO: roll-up in the future (introduced only so that API does not break)
+ */
+public interface RendererContext5 extends RendererContext4 {
+
+ public SpecificationLoader getSpecificationLoader();
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
index 3801a78..999959a 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
@@ -51,11 +51,11 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.DomainModel;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.RequestParameter;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext4;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext5;
import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
-public class ResourceContext implements RendererContext4 {
+public class ResourceContext implements RendererContext5 {
private final HttpHeaders httpHeaders;
private final UriInfo uriInfo;
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
index 1e52cd2..e344dba 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
@@ -19,15 +19,8 @@
package org.apache.isis.viewer.restfulobjects.server.util;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
-import org.apache.isis.core.runtime.persistence.PojoRecreationException;
-import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
@@ -61,41 +54,10 @@ public final class OidUtils {
final RendererContext rendererContext,
final String oidStrUnencoded) {
RootOid rootOid = RootOid.deString(oidStrUnencoded, getOidMarshaller());
- final ObjectSpecId specId = rootOid.getObjectSpecId();
- final ObjectSpecification spec = IsisContext.getSpecificationLoader().lookupBySpecId(specId);
- if(spec == null) {
- // eg "NONEXISTENT:123"
- return null;
- }
-
- // TODO: the logic to figure out which PersistenceSession API to call should be pushed down into PersistenceSession itself.
final PersistenceSession persistenceSession = rendererContext.getPersistenceSession();
- if(spec.containsFacet(ViewModelFacet.class)) {
-
- // this is a hack; the RO viewer when rendering the URL for the view model loses the "view model" indicator
- // ("*") from the specId, meaning that the marshalling logic above in RootOidDefault.deString() creates an
- // oid in the wrong state. The code below checks for this and recreates the oid with the current state of 'view model'
- if(!rootOid.isViewModel()) {
- rootOid = new RootOid(rootOid.getObjectSpecId(), rootOid.getIdentifier(), Oid.State.VIEWMODEL);
- }
-
- try {
- return persistenceSession.adapterFor(rootOid);
- } catch(final ObjectNotFoundException ex) {
- return null;
- } catch(final PojoRecreationException ex) {
- return null;
- }
- } else {
- try {
- ObjectAdapter objectAdapter = persistenceSession.loadObjectInTransaction(rootOid);
- return objectAdapter.isTransient() ? null : objectAdapter;
- } catch(final ObjectNotFoundException ex) {
- return null;
- }
- }
+ return persistenceSession.adapterForAny(rootOid);
}
private static OidMarshaller getOidMarshaller() {
http://git-wip-us.apache.org/repos/asf/isis/blob/d627d827/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index c7d3255..84d1152 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -399,7 +399,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
try {
final RootOid oid = RootOid.deStringEncoded(encoded, getOidMarshaller());
- return getAdapterManager().adapterFor(oid);
+ return getPersistenceSession().adapterFor(oid);
} catch (final Exception e) {
return null;
}