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 2018/09/06 16:13:02 UTC
[isis] 15/18: ISIS-1976: further simplify
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 9e286dcfc3555f66d4f3283fc891dc17307f9bff
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 6 09:13:00 2018 +0200
ISIS-1976: further simplify
Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
.../commons/internal/exceptions/_Exceptions.java | 20 ++++++
.../adaptermanager/ObjectAdapterContext.java | 78 ++++++++++++----------
.../ObjectAdapterContext_AdapterManager.java | 24 ++-----
.../ObjectAdapterContext_Consistency.java | 8 +--
.../adaptermanager/RootAndCollectionAdapters.java | 13 ++--
5 files changed, 76 insertions(+), 67 deletions(-)
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
index 968f0f9..214936a 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
@@ -81,6 +81,26 @@ public final class _Exceptions {
public static IllegalStateException notImplemented() {
return new IllegalStateException("internal error: code was reached, that is not implemented yet");
}
+
+ /**
+ * Used to hide from the compiler the fact, that this call always throws.
+ *
+ * <pre>{
+ * throw unexpectedCodeReach();
+ * return 0; // won't compile: unreachable code
+ *}</pre>
+ *
+ * hence ...
+ *
+ * <pre>{
+ * throwUnexpectedCodeReach();
+ * return 0;
+ *}</pre>
+ *
+ */
+ public static void throwUnexpectedCodeReach() {
+ throw unexpectedCodeReach();
+ }
/**
* Used to hide from the compiler the fact, that this call always throws.
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 477c873..a665d20 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -26,7 +26,6 @@ import java.util.function.Function;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.commons.ensure.IsisAssertException;
@@ -137,6 +136,7 @@ public class ObjectAdapterContext {
private final Cache cache = new Cache();
+ @SuppressWarnings("unused")
private final PersistenceSession persistenceSession;
private final ServicesInjector servicesInjector;
private final SpecificationLoader specificationLoader;
@@ -179,50 +179,51 @@ public class ObjectAdapterContext {
// -- CACHING POJO
- @Deprecated // don't expose caching
- protected ObjectAdapter lookupAdapterByPojo(Object pojo) {
+ // package private // don't expose caching
+ ObjectAdapter lookupAdapterByPojo(Object pojo) {
return cache.lookupAdapterByPojo(pojo);
}
- @Deprecated // don't expose caching
- public boolean containsAdapterForPojo(Object pojo) {
+ // package private // don't expose caching
+ boolean containsAdapterForPojo(Object pojo) {
return lookupAdapterByPojo(pojo)!=null;
}
// -- CACHING OID
- @Deprecated // don't expose caching
- protected ObjectAdapter lookupAdapterById(Oid oid) {
+ // package private // don't expose caching
+ ObjectAdapter lookupAdapterById(Oid oid) {
return cache.lookupAdapterById(oid);
}
// -- CACHING BOTH
- @Deprecated // don't expose caching
- public void addAdapter(ObjectAdapter adapter) {
+ // package private // don't expose caching
+ void addAdapter(ObjectAdapter adapter) {
cache.addAdapter(adapter);
}
- @Deprecated // don't expose caching
- public void removeAdapter(ObjectAdapter adapter) {
+ // package private // don't expose caching
+ void removeAdapter(ObjectAdapter adapter) {
cache.removeAdapter(adapter);
}
// -- CACHE CONSISTENCY
- @Deprecated // don't expose caching
- public void ensureMapsConsistent(final ObjectAdapter adapter) {
+ // package private // don't expose caching
+ void ensureMapsConsistent(final ObjectAdapter adapter) {
consistencyMixin.ensureMapsConsistent(adapter);
}
- @Deprecated // don't expose caching
- public void ensureMapsConsistent(final Oid oid) {
+ // package private // don't expose caching
+ void ensureMapsConsistent(final Oid oid) {
consistencyMixin.ensureMapsConsistent(oid);
}
// -- FACTORIES
- public static interface ObjectAdapterFactories {
+ // package private
+ static interface ObjectAdapterFactories {
/**
* Creates (but does not {@link #mapAndInjectServices(ObjectAdapter) map}) a new
@@ -266,7 +267,8 @@ public class ObjectAdapterContext {
private final ObjectAdapterFactories objectAdapterFactories;
- public ObjectAdapterFactories getFactories() {
+ // package private
+ ObjectAdapterFactories getFactories() {
return objectAdapterFactories;
}
@@ -289,11 +291,20 @@ public class ObjectAdapterContext {
@Deprecated // don't expose caching
public ObjectAdapter lookupAdapterFor(final Oid oid) {
- return adapterManagerMixin.lookupAdapterFor(oid);
+ Objects.requireNonNull(oid);
+ consistencyMixin.ensureMapsConsistent(oid);
+ return cache.lookupAdapterById(oid);
}
- @Deprecated // don't expose caching
- public void removeAdapterFromCache(final ObjectAdapter adapter) {
+ // package private
+ ObjectAdapter lookupParentedCollectionAdapter(ParentedCollectionOid collectionOid) {
+ Objects.requireNonNull(collectionOid);
+ consistencyMixin.ensureMapsConsistent(collectionOid);
+ return cache.lookupAdapterById(collectionOid);
+ }
+
+ // package private // don't expose caching
+ void removeAdapterFromCache(final ObjectAdapter adapter) {
adapterManagerMixin.removeAdapterFromCache(adapter);
}
@@ -331,12 +342,7 @@ public class ObjectAdapterContext {
final List<Object> registeredServices = servicesInjector.getRegisteredServices();
for (final Object service : registeredServices) {
final ObjectAdapter serviceAdapter = objectAdapterProviderMixin.adapterFor(service);
-
- // remap as Persistent if required
- if (serviceAdapter.getOid().isTransient()) {
- _Exceptions.unexpectedCodeReach();
- //remapAsPersistent(serviceAdapter, null, persistenceSession);
- }
+ Assert.assertFalse("expected to not be 'transient'", serviceAdapter.getOid().isTransient());
}
}
@@ -349,7 +355,8 @@ public class ObjectAdapterContext {
return createdAdapter;
}
- public ObjectAdapter adapterForViewModel(Object viewModelPojo, Function<ObjectSpecId, RootOid> rootOidFactory) {
+ // package private
+ ObjectAdapter adapterForViewModel(Object viewModelPojo, Function<ObjectSpecId, RootOid> rootOidFactory) {
ObjectAdapter viewModelAdapter = adapterManagerMixin.lookupAdapterFor(viewModelPojo);
if(viewModelAdapter == null) {
final ObjectSpecification objectSpecification =
@@ -370,20 +377,16 @@ public class ObjectAdapterContext {
* @param session
*/
@Deprecated // expected to be moved
- public void remapAsPersistent(final ObjectAdapter adapter, RootOid newRootOid, PersistenceSession session) {
+ public void remapAsPersistent(final ObjectAdapter rootAdapter, RootOid newRootOid, PersistenceSession session) {
Objects.requireNonNull(newRootOid);
+ Assert.assertFalse("expected to not be a parented collection", rootAdapter.isParentedCollection());
- // TODO: REVIEW: think this is redundant; would seem this method is only ever called for roots anyway.
- final ObjectAdapter rootAdapter = adapter.getAggregateRoot();
final RootOid transientRootOid = (RootOid) rootAdapter.getOid();
- Assert.assertTrue("expected same", Objects.equals(adapter, rootAdapter));
-
final RootAndCollectionAdapters rootAndCollectionAdapters =
- new RootAndCollectionAdapters(adapter, adapterManagerMixin);
+ new RootAndCollectionAdapters(rootAdapter, this);
- Assert.assertTrue("expected same", Objects.equals(rootAndCollectionAdapters.getRootAdapter().getOid(), transientRootOid));
removeFromCache(rootAndCollectionAdapters);
final RootOid persistedRootOid;
@@ -392,7 +395,7 @@ public class ObjectAdapterContext {
throw new IsisAssertException("hintRootOid must be persistent");
}
final ObjectSpecId hintRootOidObjectSpecId = newRootOid.getObjectSpecId();
- final ObjectSpecId adapterObjectSpecId = adapter.getSpecification().getSpecId();
+ final ObjectSpecId adapterObjectSpecId = rootAdapter.getSpecification().getSpecId();
if(!hintRootOidObjectSpecId.equals(adapterObjectSpecId)) {
throw new IsisAssertException("hintRootOid's objectType must be same as that of adapter " +
"(was: '" + hintRootOidObjectSpecId + "'; adapter's is " + adapterObjectSpecId + "'");
@@ -406,8 +409,7 @@ public class ObjectAdapterContext {
LOG.debug("replacing root adapter and re-adding into maps; oid is now: {} (was: {})", persistedRootOid.enString(), transientRootOid.enString());
}
- final ObjectAdapter adapterReplacement = adapter.withOid(persistedRootOid);
-
+ final ObjectAdapter adapterReplacement = rootAdapter.withOid(persistedRootOid);
replaceRootAdapter(adapterReplacement, rootAndCollectionAdapters);
if (LOG.isDebugEnabled()) {
@@ -477,5 +479,7 @@ public class ObjectAdapterContext {
return newAdapter;
}
+
+
}
\ No newline at end of file
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
index 1af091f..fc50a81 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
@@ -23,6 +23,7 @@ import java.util.Objects;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
@@ -43,6 +44,7 @@ class ObjectAdapterContext_AdapterManager {
private static final Logger LOG = LoggerFactory.getLogger(ObjectAdapterContext_AdapterManager.class);
private final ObjectAdapterContext objectAdapterContext;
+ @SuppressWarnings("unused")
private final PersistenceSession persistenceSession;
private final ServicesInjector servicesInjector;
@@ -68,10 +70,8 @@ class ObjectAdapterContext_AdapterManager {
* @param recreatedPojo - already known to the object store impl, or a service
*/
//@Override
- public ObjectAdapter addRecreatedPojoToCache(Oid oid, Object recreatedPojo) {
+ ObjectAdapter addRecreatedPojoToCache(Oid oid, Object recreatedPojo) {
// attempt to locate adapter for the pojo
- // REVIEW: this check is possibly redundant because the pojo will most likely
- // have just been instantiated, so won't yet be in any maps
final ObjectAdapter adapterLookedUpByPojo = lookupAdapterFor(recreatedPojo);
if (adapterLookedUpByPojo != null) {
return adapterLookedUpByPojo;
@@ -80,6 +80,7 @@ class ObjectAdapterContext_AdapterManager {
// attempt to locate adapter for the Oid
final ObjectAdapter adapterLookedUpByOid = lookupAdapterFor(oid);
if (adapterLookedUpByOid != null) {
+ _Exceptions.throwUnexpectedCodeReach();
return adapterLookedUpByOid;
}
@@ -128,23 +129,6 @@ class ObjectAdapterContext_AdapterManager {
return objectAdapterContext.lookupAdapterByPojo(pojo);
}
- /**
- * Gets the {@link ObjectAdapter adapter} for the {@link Oid} if it exists
- * in the identity map.
- *
- * @param oid
- * - must not be <tt>null</tt>
- * @return adapter, or <tt>null</tt> if doesn't exist.
- * @deprecated don't expose caching
- */
- //@Override
- ObjectAdapter lookupAdapterFor(final Oid oid) {
- Objects.requireNonNull(oid);
- objectAdapterContext.ensureMapsConsistent(oid);
-
- return objectAdapterContext.lookupAdapterById(oid);
- }
-
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);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
index 30746a1..2f26bff 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
@@ -35,9 +35,11 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
* Responsibility: ObjectAdapter Cache/Map consistency
* </p>
* @since 2.0.0-M2
+ * @deprecated expected to be made obsolete
*/
class ObjectAdapterContext_Consistency {
+ @SuppressWarnings("unused")
private static final Logger LOG = LoggerFactory.getLogger(ObjectAdapterContext_Consistency.class);
private final ObjectAdapterContext objectAdapterContext;
@@ -47,9 +49,8 @@ class ObjectAdapterContext_Consistency {
/**
* Fail early if any problems.
- * @deprecated https://issues.apache.org/jira/browse/ISIS-1976
*/
- protected void ensureMapsConsistent(final ObjectAdapter adapter) {
+ void ensureMapsConsistent(final ObjectAdapter adapter) {
if (adapter.isValue()) {
return;
}
@@ -62,9 +63,8 @@ class ObjectAdapterContext_Consistency {
/**
* Fail early if any problems.
- * @deprecated https://issues.apache.org/jira/browse/ISIS-1976
*/
- protected void ensureMapsConsistent(final Oid oid) {
+ void ensureMapsConsistent(final Oid oid) {
Objects.requireNonNull(oid);
final ObjectAdapter adapter = objectAdapterContext.lookupAdapterById(oid);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/RootAndCollectionAdapters.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/RootAndCollectionAdapters.java
index 19d0e0e..fed267d 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/RootAndCollectionAdapters.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/RootAndCollectionAdapters.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.runtime.system.persistence.adaptermanager;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
-import java.util.Objects;
import java.util.Set;
import com.google.common.collect.Maps;
@@ -32,7 +31,6 @@ import org.slf4j.LoggerFactory;
import org.apache.isis.core.commons.ensure.Assert;
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.ParentedCollectionOid;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -49,8 +47,10 @@ import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
*/
class RootAndCollectionAdapters implements Iterable<ObjectAdapter> {
+ @SuppressWarnings("unused")
private static final Logger LOG = LoggerFactory.getLogger(RootAndCollectionAdapters.class);
+ private final ObjectAdapterContext context;
private final ObjectAdapter parentAdapter;
private final RootOid rootAdapterOid;
@@ -58,11 +58,12 @@ class RootAndCollectionAdapters implements Iterable<ObjectAdapter> {
public RootAndCollectionAdapters(
final ObjectAdapter parentAdapter,
- final ObjectAdapterContext_AdapterManager adapterManagerMixin) {
+ final ObjectAdapterContext context) {
Assert.assertNotNull(parentAdapter);
this.rootAdapterOid = (RootOid) parentAdapter.getOid();
this.parentAdapter = parentAdapter;
- addCollectionAdapters(adapterManagerMixin);
+ this.context = context;
+ addCollectionAdapters();
}
public ObjectAdapter getRootAdapter() {
@@ -102,10 +103,10 @@ class RootAndCollectionAdapters implements Iterable<ObjectAdapter> {
// Helpers
////////////////////////////////////////////////////////////////////////
- private void addCollectionAdapters(ObjectAdapterContext_AdapterManager adapterManagerMixin) {
+ private void addCollectionAdapters() {
for (final OneToManyAssociation otma : parentAdapter.getSpecification().getCollections(Contributed.EXCLUDED)) {
final ParentedCollectionOid collectionOid = new ParentedCollectionOid((RootOid) rootAdapterOid, otma);
- final ObjectAdapter collectionAdapter = adapterManagerMixin.lookupAdapterFor(collectionOid);
+ final ObjectAdapter collectionAdapter = context.lookupParentedCollectionAdapter(collectionOid);
if (collectionAdapter != null) {
// collection adapters are lazily created and so there may not be one.
addCollectionAdapter(otma, collectionAdapter);