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/08 23:13:47 UTC
[isis] 06/06: ISIS-1976: let OAs for values also have an Oid
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 2ce76eb32b2e1d363b8957d3e28cd4086dd499af
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Sep 9 01:10:04 2018 +0200
ISIS-1976: let OAs for values also have an Oid
Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
.../isis/core/metamodel/adapter/oid/Oid.java | 19 ++-
.../isis/core/metamodel/adapter/oid/RootOid.java | 4 -
.../runtime/persistence/adapter/PojoAdapter.java | 12 +-
.../PersistenceSessionServiceInternalDefault.java | 4 +-
.../adaptermanager/ObjectAdapterContext.java | 2 +-
...ObjectAdapterContext_ObjectAdapterProvider.java | 132 ++-------------------
.../persistence/adaptermanager/OidProviders.java | 21 +---
.../model/mementos/ObjectAdapterMemento.java | 5 -
8 files changed, 27 insertions(+), 172 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
index 0b9a201..e087e12 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
@@ -59,16 +59,15 @@ public interface Oid extends Encodable {
boolean isViewModel();
boolean isPersistent();
+
+ default boolean isValue() {
+ return false;
+ }
public static enum State {
- PERSISTENT("P"),
- TRANSIENT("T"),
- VIEWMODEL("V");
-
- private final String code;
- private State(final String code) {
- this.code = code;
- }
+ PERSISTENT,
+ TRANSIENT,
+ VIEWMODEL;
public boolean isTransient() {
return this == TRANSIENT;
@@ -80,10 +79,6 @@ public interface Oid extends Encodable {
return this == PERSISTENT;
}
- public String getCode() {
- return code;
- }
-
public static State from(final Bookmark bookmark) {
final Bookmark.ObjectState objectState = bookmark.getObjectState();
return from(objectState);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
index 2f67f7e..7cbb26d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
@@ -284,10 +284,6 @@ public class RootOid implements TypedOid, Serializable {
// -- ROOT-ID SUPPORT FOR VALUE
- public boolean isValue() {
- return false;
- }
-
private RootOid() { identifier=null; objectSpecId=null; state=null; };
private static final RootOid VALUE_OID = new RootOid() {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index a83c9a8..da29ebe 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -19,6 +19,8 @@
package org.apache.isis.core.runtime.persistence.adapter;
+import static org.apache.isis.commons.internal.base._With.requires;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,13 +54,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
private final SpecificationLoader specificationLoader;
private final PersistenceSession persistenceSession;
- /**
- * can be {@link #replacePojo(Object) replace}d.
- */
private final Object pojo;
- /**
- * can be {@link #replaceOid(Oid) replace}d.
- */
private final Oid oid;
/**
@@ -81,7 +77,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
throw new IsisException("Adapter can't be used to adapt an adapter: " + pojo);
}
this.pojo = pojo;
- this.oid = oid;
+ this.oid = requires(oid, "oid");
}
// -- getSpecification
@@ -122,7 +118,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
@Override
public boolean isValue() {
- return oid == null;
+ return oid.isValue();
}
// -- isTransient, representsPersistent, isDestroyed
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java
index f7d944c..5ee3b82 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java
@@ -89,11 +89,11 @@ public class PersistenceSessionServiceInternalDefault implements PersistenceSess
@Override
public Bookmark bookmarkFor(Object domainObject) {
final ObjectAdapter adapter = getPersistenceSession().adapterFor(domainObject);
- final Oid oid = adapter.getOid();
- if(oid == null) {
+ if(adapter.isValue()) {
// values cannot be bookmarked
return null;
}
+ final Oid oid = adapter.getOid();
if(!(oid instanceof RootOid)) {
// must be root
return null;
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 fa273bc..c43ec56 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
@@ -139,7 +139,7 @@ public class ObjectAdapterContext {
PersistenceSession persistenceSession) {
this.consistencyMixin = new ObjectAdapterContext_Consistency(this);
- this.objectAdapterProviderMixin = new ObjectAdapterContext_ObjectAdapterProvider(this, persistenceSession, authenticationSession);
+ this.objectAdapterProviderMixin = new ObjectAdapterContext_ObjectAdapterProvider(this, persistenceSession);
this.adapterManagerMixin = new ObjectAdapterContext_AdapterManager(this, persistenceSession);
this.mementoSupportMixin = new ObjectAdapterContext_MementoSupport(this, persistenceSession);
this.serviceLookupMixin = new ObjectAdapterContext_ServiceLookup(this, servicesInjector);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index 3e1041f..e3c4cd9 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -18,8 +18,9 @@
*/
package org.apache.isis.core.runtime.system.persistence.adaptermanager;
+import static org.apache.isis.commons.internal.base._With.requires;
+
import java.util.List;
-import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -27,21 +28,15 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.isis.commons.internal.base._Lazy;
-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.metamodel.IsisJdoMetamodelPlugin;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.core.runtime.system.persistence.adaptermanager.factories.OidFactory;
@@ -58,64 +53,40 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
private static final Logger LOG = LoggerFactory.getLogger(ObjectAdapterContext_ObjectAdapterProvider.class);
private final ObjectAdapterContext objectAdapterContext;
private final PersistenceSession persistenceSession;
- private final AuthenticationSession authenticationSession;
private final ServicesInjector servicesInjector;
private final SpecificationLoader specificationLoader;
- private final IsisJdoMetamodelPlugin isisJdoMetamodelPlugin;
private final OidFactory oidFactory;
ObjectAdapterContext_ObjectAdapterProvider(ObjectAdapterContext objectAdapterContext,
- PersistenceSession persistenceSession, AuthenticationSession authenticationSession) {
+ PersistenceSession persistenceSession) {
this.objectAdapterContext = objectAdapterContext;
this.persistenceSession = persistenceSession;
- this.authenticationSession = authenticationSession;
this.servicesInjector = persistenceSession.getServicesInjector();
this.specificationLoader = servicesInjector.getSpecificationLoader();
- this.isisJdoMetamodelPlugin = IsisJdoMetamodelPlugin.get();
this.oidFactory = OidFactory.builder(pojo->specificationLoader.loadSpecification(pojo.getClass()))
.add(new OidProviders.OidForServices())
.add(new OidProviders.OidForValues())
.add(new OidProviders.OidForViewModels())
.add(new OidProviders.OidForPersistables())
- .add(new OidProviders.OidForMixins())
- .add(new OidProviders.OidForStandaloneCollections())
+ .add(new OidProviders.OidForOthers())
.build();
}
-// @Override
-// public Oid oidFor(Object pojo) {
-// if(pojo == null) {
-// return null;
-// }
-// final Oid persistentOrValueOid = persistentOrValueOid(pojo);
-// if(persistentOrValueOid != null) {
-// return persistentOrValueOid;
-// }
-// final RootOid rootOid = objectAdapterContext.rootOidFor(pojo);
-//
-// return rootOid;
-// }
-
@Override
public ObjectAdapter adapterFor(Object pojo) {
-
+
if(pojo == null) {
return null;
}
-
+
final ObjectAdapter existing = objectAdapterContext.lookupAdapterByPojo(pojo);
if (existing != null) {
return existing;
}
final RootOid rootOid = oidFactory.oidFor(pojo);
- if(rootOid.isValue()) {
- return objectAdapterContext.getFactories().createRootAdapter(pojo, null);
- }
-
final ObjectAdapter newAdapter = objectAdapterContext.getFactories().createRootAdapter(pojo, rootOid);
-
return objectAdapterContext.mapAndInjectServices(newAdapter);
}
@@ -123,12 +94,12 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
@Override
public ObjectAdapter adapterFor(Object pojo, ObjectAdapter parentAdapter, OneToManyAssociation collection) {
- assert parentAdapter != null;
- assert collection != null;
+ requires(parentAdapter, "parentAdapter");
+ requires(collection, "collection");
- final ObjectAdapter existingOrValueAdapter = existingOrValueAdapter(pojo);
- if(existingOrValueAdapter != null) {
- return existingOrValueAdapter;
+ final ObjectAdapter existing = objectAdapterContext.lookupAdapterByPojo(pojo);
+ if (existing != null) {
+ return existing;
}
objectAdapterContext.ensureMapsConsistent(parentAdapter);
@@ -184,86 +155,5 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
.collect(Collectors.toList());
}
-// private Oid persistentOrValueOid(Object pojo) {
-//
-// Oid oid;
-//
-// // equivalent to isInstanceOfPersistable = pojo instanceof Persistable;
-// final boolean isInstanceOfPersistable = isisJdoMetamodelPlugin.isPersistenceEnhanced(pojo.getClass());
-//
-// // pojo may have been lazily loaded by object store, but we haven't yet seen it
-// if (isInstanceOfPersistable) {
-// oid = persistentOid(pojo);
-//
-// // TODO: could return null if the pojo passed in !dnIsPersistent() || !dnIsDetached()
-// // in which case, we would ought to map as a transient object, rather than fall through and treat as a value?
-// } else {
-// oid = null;
-// }
-//
-// if(oid != null) {
-// return oid;
-// }
-//
-// // need to create (and possibly map) the adapter.
-// final ObjectSpecification objSpec = specificationLoader.loadSpecification(pojo.getClass());
-//
-// // we create value facets as standalone (so not added to maps)
-// if (objSpec.containsFacet(ValueFacet.class)) {
-// //TODO[ISIS-1976] don't need an adapter, just its oid
-// oid = objectAdapterContext.getFactories().createStandaloneAdapter(pojo).getOid();
-// return oid;
-// }
-//
-// return null;
-// }
-
-// private Oid persistentOid(final Object pojo) {
-// if (persistenceSession.getPersistenceManager().getObjectId(pojo) == null) {
-// return null;
-// }
-// final RootOid oid = objectAdapterContext.createPersistentOrViewModelOid(pojo);
-// return oid;
-// }
-
- private ObjectAdapter existingOrValueAdapter(Object pojo) {
-
- // attempt to locate adapter for the pojo
- ObjectAdapter adapter = objectAdapterContext.lookupAdapterByPojo(pojo);
- if (adapter != null) {
- return adapter;
- }
-
- // equivalent to isInstanceOfPersistable = pojo instanceof Persistable;
- final boolean isInstanceOfPersistable = isisJdoMetamodelPlugin.isPersistenceEnhanced(pojo.getClass());
-
- // pojo may have been lazily loaded by object store, but we haven't yet seen it
- if (isInstanceOfPersistable) {
- adapter = addPersistentToCache(pojo);
-
- // TODO: could return null if the pojo passed in !dnIsPersistent() || !dnIsDetached()
- // in which case, we would ought to map as a transient object, rather than fall through and treat as a value?
- } else {
- adapter = null;
- }
-
- if(adapter != null) {
- return adapter;
- }
-
- // need to create (and possibly map) the adapter.
- final ObjectSpecification objSpec = specificationLoader.loadSpecification(pojo.getClass());
-
- // we create value facets as standalone (so not added to maps)
- if (objSpec.containsFacet(ValueFacet.class)) {
- adapter = objectAdapterContext.getFactories().createStandaloneAdapter(pojo);
- return adapter;
- }
-
- return null;
- }
-
-
-
}
\ No newline at end of file
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
index e01e83e..afcd193 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
@@ -79,11 +79,11 @@ public class OidProviders {
}
- public static class OidForMixins implements OidProvider {
+ public static class OidForOthers implements OidProvider {
@Override
public boolean isHandling(Object pojo, ObjectSpecification spec) {
- return spec.isMixin();
+ return true; // try to handle anything
}
@Override
@@ -95,22 +95,5 @@ public class OidProviders {
}
- public static class OidForStandaloneCollections implements OidProvider {
-
- @Override
- public boolean isHandling(Object pojo, ObjectSpecification spec) {
- return true; //FIXME spec.isParentedOrFreeCollection() && !spec.isParented();
- }
-
- @Override
- public RootOid oidFor(Object pojo, ObjectSpecification spec) {
- final PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
- final String identifier = persistenceSession.identifierFor(pojo, Oid.State.TRANSIENT);
- return new RootOid(spec.getSpecId(), identifier, Oid.State.TRANSIENT);
- }
-
- }
-
-
}
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
index f422f28..243cbac 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
@@ -432,11 +432,6 @@ public class ObjectAdapterMemento implements Serializable {
}
final RootOid oid = (RootOid) adapter.getOid();
-
- if(oid==null) {
- System.out.println("!!! "+adapter.getSpecification());
- }
-
if (oid.isTransient()) {
transientMemento = new Memento(adapter);
type = Type.TRANSIENT;