ISIS-939: simplifying PersistenceSession - removing PersistenceSession#resolveField (introduce ResolveFieldUtil for scimpi to call), also from the *ObjectStore impls - remove Persistor interface, instead PersistenceSession everywhere - remove ToPersistObjectSet interface, instead PersistenceSession everywhere - remove RecreatedPojoRemapper interface, instead PersistenceSession everywhere - remove EnlistedObjectDirtying interface, instead PersistenceSession everywhere - remove ObjectAdapterMemento#getTitleHint() and #captureTitleHintIfPossible() - re-introduce MessageBroker's #getApplicationError and #setApplicationError - remove ObjectAdapter#isTitleAvailable() and from PojoAdapter - removed commented out lines in ResolveState - simplify PersistenceSession (remove #mapRecreatedPojo, #remapRecreatedPojo) - introduce PersistenceQueryFactory from PersistenceSession - PersistenceSession creates IsisTransactionManager in its constructor
Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/5f8fca9b Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/5f8fca9b Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/5f8fca9b Branch: refs/heads/master Commit: 5f8fca9b9c13c0f2f81caccdbb247154e7b25cc7 Parents: bea5a02 Author: Dan Haywood <[email protected]> Authored: Mon Nov 3 22:55:07 2014 +0000 Committer: Dan Haywood <[email protected]> Committed: Thu Nov 6 16:19:00 2014 +0000 ---------------------------------------------------------------------- .../dispatcher/AbstractObjectProcessor.java | 3 +- .../scimpi/dispatcher/ResolveFieldUtil.java | 71 ++++ .../dispatcher/context/RequestContext.java | 13 +- .../dispatcher/view/collection/Collection.java | 5 +- .../view/display/AbstractTableView.java | 10 +- .../dispatcher/view/display/LongFormView.java | 5 +- .../scimpi/dispatcher/view/edit/EditObject.java | 3 +- .../view/simple/AbstractConditionalBlock.java | 10 +- .../dispatcher/view/simple/AbstractLink.java | 3 +- .../dispatcher/view/simple/RemoveElement.java | 7 +- .../model/isis/PersistenceSessionProvider.java | 5 +- .../model/mementos/ObjectAdapterMemento.java | 21 -- .../viewer/wicket/model/models/EntityModel.java | 10 - .../wicket/model/models/ModelAbstract.java | 4 +- .../FormComponentPanelAbstract.java | 24 +- .../viewer/wicket/ui/panels/FormAbstract.java | 8 +- .../viewer/wicket/ui/panels/PanelAbstract.java | 21 +- .../integtestsupport/IsisSystemForTest.java | 7 +- .../commons/authentication/MessageBroker.java | 11 + .../core/metamodel/adapter/ObjectAdapter.java | 2 - .../core/metamodel/adapter/ResolveState.java | 59 +--- .../metamodel/adapter/mgr/AdapterManager.java | 8 +- .../core/objectstore/InMemoryObjectStore.java | 11 +- .../internal/ObjectStoreInstances.java | 2 +- .../ObjectFixtureFilePersistor.java | 17 +- .../fixtures/FixturesInstallerDelegate.java | 5 +- .../isis/core/runtime/memento/Memento.java | 2 +- .../persistence/adapter/PojoAdapter.java | 7 - .../adaptermanager/AdapterManagerDefault.java | 24 +- .../objectstore/algorithm/PersistAlgorithm.java | 3 +- .../algorithm/PersistAlgorithmDefault.java | 5 +- .../PersistAlgorithmForDataNucleus.java | 5 +- .../algorithm/PersistAlgorithmUnified.java | 5 +- .../algorithm/ToPersistObjectSet.java | 45 --- ...shingServiceWithDefaultPayloadFactories.java | 2 +- .../runtime/system/persistence/ObjectStore.java | 12 +- .../persistence/PersistenceQueryFactory.java | 103 ++++++ .../system/persistence/PersistenceSession.java | 346 +++++++------------ .../persistence/PersistenceSessionFactory.java | 7 +- .../runtime/system/persistence/Persistor.java | 231 ------------- .../persistence/RecreatedPojoRemapper.java | 52 --- .../transaction/EnlistedObjectDirtying.java | 49 --- .../jdo/datanucleus/DataNucleusObjectStore.java | 28 +- .../persistence/FrameworkSynchronizer.java | 13 +- .../PersistenceQueryProcessorAbstract.java | 7 +- .../algorithm/PersistAlgorithmContractTest.java | 3 +- .../persistence/PersistenceSessionTest.java | 3 +- .../IsisSystemWithFixtures.java | 7 +- 48 files changed, 427 insertions(+), 877 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractObjectProcessor.java ---------------------------------------------------------------------- diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractObjectProcessor.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractObjectProcessor.java index d163bc1..97dd1ed 100644 --- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractObjectProcessor.java +++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractObjectProcessor.java @@ -21,7 +21,6 @@ package org.apache.isis.viewer.scimpi.dispatcher; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; -import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.scimpi.dispatcher.processor.Request; public abstract class AbstractObjectProcessor extends AbstractElementProcessor { @@ -38,7 +37,7 @@ public abstract class AbstractObjectProcessor extends AbstractElementProcessor { if (error != null) { throw new ScimpiException("Field " + objectField.getId() + " " + error); } - IsisContext.getPersistenceSession().resolveField(object, objectField); + ResolveFieldUtil.resolveField(object, objectField); object = objectField.get(object); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ResolveFieldUtil.java ---------------------------------------------------------------------- diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ResolveFieldUtil.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ResolveFieldUtil.java new file mode 100644 index 0000000..a0ae5cf --- /dev/null +++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ResolveFieldUtil.java @@ -0,0 +1,71 @@ +/* + * 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.scimpi.dispatcher; + +import org.apache.isis.core.metamodel.adapter.ObjectAdapter; +import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; + +import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; + +public final class ResolveFieldUtil { + + private ResolveFieldUtil(){} + + /** + * Walking the graph. + * + * <p> + * This combines the implementations of both the DN Objectstore + * and also the in-memory objectstore. + * </p> + */ + public static void resolveField(final ObjectAdapter object, final ObjectAssociation association) { + + + // DN impl. + { + final ObjectAdapter referencedCollectionAdapter = association.get(object); + + // this code originally brought in from the JPA impl, but seems reasonable. + if (association.isOneToManyAssociation()) { + ensureThatState(referencedCollectionAdapter, is(notNullValue())); + + final Object referencedCollection = referencedCollectionAdapter.getObject(); + ensureThatState(referencedCollection, is(notNullValue())); + + // if a proxy collection, then force it to initialize. just 'touching' the object is sufficient. + // REVIEW: I wonder if this is actually needed; does JDO use proxy collections? + referencedCollection.hashCode(); + } + + // the JPA impl used to also call its lifecycle listener on the referenced collection object, eg List, + // itself. I don't think this makes sense to do for JDO (the collection is not a PersistenceCapable). + } + + // In-memory objectstore impl + { + final ObjectAdapter referenceAdapter = association.get(object); + referenceAdapter.markAsResolvedIfPossible(); + } + + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java ---------------------------------------------------------------------- diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java index fc36d15..183a0b2 100644 --- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java +++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java @@ -23,19 +23,12 @@ import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.io.Serializable; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.TreeSet; - import com.google.common.collect.Maps; - import org.apache.commons.lang.StringEscapeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.apache.isis.core.commons.authentication.AuthenticationSession; import org.apache.isis.core.commons.debug.DebugBuilder; import org.apache.isis.core.commons.factory.InstanceUtil; @@ -50,7 +43,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.feature.Contributed; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.runtime.system.context.IsisContext; -import org.apache.isis.core.runtime.system.persistence.Persistor; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher; import org.apache.isis.viewer.scimpi.dispatcher.ErrorCollator; import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException; @@ -853,7 +846,7 @@ public abstract class RequestContext { } - protected Persistor getPersistenceSession() { + protected PersistenceSession getPersistenceSession() { return IsisContext.getPersistenceSession(); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/collection/Collection.java ---------------------------------------------------------------------- diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/collection/Collection.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/collection/Collection.java index 5a561b6..1002c9f 100644 --- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/collection/Collection.java +++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/collection/Collection.java @@ -20,12 +20,11 @@ package org.apache.isis.viewer.scimpi.dispatcher.view.collection; import java.util.Iterator; - import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; -import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor; +import org.apache.isis.viewer.scimpi.dispatcher.ResolveFieldUtil; import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException; import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext; import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope; @@ -48,7 +47,7 @@ public class Collection extends AbstractElementProcessor { if (!objectField.isOneToManyAssociation()) { throw new ScimpiException("Field " + objectField.getId() + " is not a collection"); } - IsisContext.getPersistenceSession().resolveField(object, objectField); + ResolveFieldUtil.resolveField(object, objectField); collection = objectField.get(object); } else { final String id = request.getOptionalProperty(COLLECTION); http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractTableView.java ---------------------------------------------------------------------- diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractTableView.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractTableView.java index 26df958..286d84d 100644 --- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractTableView.java +++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractTableView.java @@ -21,17 +21,17 @@ package org.apache.isis.viewer.scimpi.dispatcher.view.display; import java.util.Iterator; import java.util.List; - import org.apache.isis.applib.annotation.Where; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; -import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet; import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet; +import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet; import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.feature.Contributed; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.runtime.system.context.IsisContext; -import org.apache.isis.core.runtime.system.persistence.Persistor; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor; +import org.apache.isis.viewer.scimpi.dispatcher.ResolveFieldUtil; import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException; import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext; import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope; @@ -68,7 +68,7 @@ public abstract class AbstractTableView extends AbstractElementProcessor { throw new ScimpiException("Field " + objectField.getId() + " is not a collection"); } isFieldEditable = objectField.isUsable(IsisContext.getAuthenticationSession(), object, where).isAllowed(); - getPersistenceSession().resolveField(object, objectField); + ResolveFieldUtil.resolveField(object, objectField); collection = objectField.get(object); final TypeOfFacet facet = objectField.getFacet(TypeOfFacet.class); elementSpec = facet.valueSpec(); @@ -94,7 +94,7 @@ public abstract class AbstractTableView extends AbstractElementProcessor { } - protected Persistor getPersistenceSession() { + protected PersistenceSession getPersistenceSession() { return IsisContext.getPersistenceSession(); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/LongFormView.java ---------------------------------------------------------------------- diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/LongFormView.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/LongFormView.java index 5630bcb..1efad45 100644 --- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/LongFormView.java +++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/LongFormView.java @@ -20,12 +20,11 @@ package org.apache.isis.viewer.scimpi.dispatcher.view.display; import java.util.List; - import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.feature.Contributed; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; -import org.apache.isis.core.runtime.system.context.IsisContext; +import org.apache.isis.viewer.scimpi.dispatcher.ResolveFieldUtil; import org.apache.isis.viewer.scimpi.dispatcher.processor.Request; import org.apache.isis.viewer.scimpi.dispatcher.view.display.TableView.SimpleTableBuilder; import org.apache.isis.viewer.scimpi.dispatcher.view.field.LinkedObject; @@ -43,7 +42,7 @@ public class LongFormView extends AbstractFormView { rowClasses = rowClassesList.split("[,|/]"); } int noColumns; - IsisContext.getPersistenceSession().resolveField(object, field); + ResolveFieldUtil.resolveField(object, field); final ObjectAdapter collection = field.get(object); final ObjectSpecification elementSpec = collection.getElementSpecification(); final List<ObjectAssociation> fields = elementSpec.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.VISIBLE_AT_LEAST_SOMETIMES); http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java ---------------------------------------------------------------------- diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java index 4117ee7..deafb1a 100644 --- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java +++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java @@ -34,6 +34,7 @@ import org.apache.isis.core.metamodel.facets.object.choices.enums.EnumFacet; import org.apache.isis.core.metamodel.facets.value.booleans.BooleanValueFacet; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor; +import org.apache.isis.viewer.scimpi.dispatcher.ResolveFieldUtil; import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext; import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope; import org.apache.isis.viewer.scimpi.dispatcher.edit.EditAction; @@ -215,7 +216,7 @@ public class EditObject extends AbstractElementProcessor { final String fieldName = inputField.getName(); final ObjectAssociation field = object.getSpecification().getAssociation(fieldName); if (field.isVisible(IsisContext.getAuthenticationSession(), object, where).isAllowed()) { - IsisContext.getPersistenceSession().resolveField(object, field); + ResolveFieldUtil.resolveField(object, field); final ObjectAdapter fieldValue = field.get(object); if (inputField.isEditable()) { final String value = getValue(context, fieldValue); http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java ---------------------------------------------------------------------- diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java index a17fcdb..dc5b39a 100644 --- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java +++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java @@ -22,14 +22,13 @@ package org.apache.isis.viewer.scimpi.dispatcher.view.simple; import java.util.HashMap; import java.util.List; import java.util.Map; - import org.apache.isis.applib.annotation.Where; import org.apache.isis.applib.filter.Filters; import org.apache.isis.core.commons.authentication.AuthenticationSession; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.consent.Consent; -import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet; import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet; +import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet; import org.apache.isis.core.metamodel.spec.ActionType; import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.feature.Contributed; @@ -37,6 +36,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor; +import org.apache.isis.viewer.scimpi.dispatcher.ResolveFieldUtil; import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException; import org.apache.isis.viewer.scimpi.dispatcher.processor.Request; import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils; @@ -494,7 +494,8 @@ class TestFieldSet extends Test { boolean test(final Request request, final String attributeName, final String targetId) { final ObjectAdapter object = MethodsUtils.findObject(request.getContext(), targetId); final ObjectAssociation objectField = findProperty(attributeName, object); - IsisContext.getPersistenceSession().resolveField(object, objectField); + + ResolveFieldUtil.resolveField(object, objectField); final ObjectAdapter fld = objectField.get(object); if (fld != null) { final Object fieldValue = fld.getObject(); @@ -523,7 +524,7 @@ class TestFieldValue extends Test { final ObjectAdapter object = MethodsUtils.findObject(request.getContext(), targetId); final ObjectAssociation objectField = findProperty(fieldName, object); - IsisContext.getPersistenceSession().resolveField(object, objectField); + ResolveFieldUtil.resolveField(object, objectField); final ObjectAdapter fld = objectField.get(object); // TODO test for reference or value @@ -561,3 +562,4 @@ class TestSet extends Test { return valuePresent; } } + http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractLink.java ---------------------------------------------------------------------- diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractLink.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractLink.java index 743be2d..b6798be 100644 --- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractLink.java +++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractLink.java @@ -25,6 +25,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor; import org.apache.isis.viewer.scimpi.dispatcher.ForbiddenException; +import org.apache.isis.viewer.scimpi.dispatcher.ResolveFieldUtil; import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException; import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext; import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope; @@ -63,7 +64,7 @@ public abstract class AbstractLink extends AbstractElementProcessor { if (field.isVisible(IsisContext.getAuthenticationSession(), adapter, where).isVetoed()) { throw new ForbiddenException(field, ForbiddenException.VISIBLE); } - IsisContext.getPersistenceSession().resolveField(adapter, field); + ResolveFieldUtil.resolveField(adapter, field); adapter = field.get(adapter); if (adapter != null) { objectId = context.mapObject(adapter, Scope.INTERACTION); http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java ---------------------------------------------------------------------- diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java index 56ed442..3321b87 100644 --- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java +++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java @@ -30,10 +30,7 @@ import org.apache.isis.core.metamodel.spec.feature.Contributed; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation; import org.apache.isis.core.runtime.system.context.IsisContext; -import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor; -import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher; -import org.apache.isis.viewer.scimpi.dispatcher.ForbiddenException; -import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException; +import org.apache.isis.viewer.scimpi.dispatcher.*; import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext; import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope; import org.apache.isis.viewer.scimpi.dispatcher.edit.RemoveAction; @@ -90,7 +87,7 @@ public class RemoveElement extends AbstractElementProcessor { if (field.isVisible(IsisContext.getAuthenticationSession(), adapter, where).isVetoed()) { throw new ForbiddenException(field, ForbiddenException.VISIBLE); } - IsisContext.getPersistenceSession().resolveField(adapter, field); + ResolveFieldUtil.resolveField(adapter, field); Consent usable = field.isUsable(IsisContext.getAuthenticationSession(), adapter, where); if (usable.isAllowed()) { http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/isis/PersistenceSessionProvider.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/isis/PersistenceSessionProvider.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/isis/PersistenceSessionProvider.java index 2c210a3..3c6d78f 100644 --- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/isis/PersistenceSessionProvider.java +++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/isis/PersistenceSessionProvider.java @@ -19,9 +19,10 @@ package org.apache.isis.viewer.wicket.model.isis; -import org.apache.isis.core.runtime.system.persistence.Persistor; + +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; public interface PersistenceSessionProvider { - Persistor getPersistenceSession(); + PersistenceSession getPersistenceSession(); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java index 72658fd..107bde0 100644 --- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java +++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java @@ -236,7 +236,6 @@ public class ObjectAdapterMemento implements Serializable { final ObjectSpecification specification = adapter.getSpecification(); objectSpecId = specification.getSpecId(); init(adapter); - captureTitleHintIfPossible(); } private void init(final ObjectAdapter adapter) { @@ -267,26 +266,6 @@ public class ObjectAdapterMemento implements Serializable { } - - public void captureTitleHintIfPossible() { - if (this.titleHint != null) { - return; - } - - // REVIEW: this check is because Wicket 6.0.0 seems to call onEndRequest prior to onDetach - // so by the time we get here, there is no session to use... - if(IsisContext.inSession()) { - ObjectAdapter objectAdapter = this.getObjectAdapter(ConcurrencyChecking.NO_CHECK); - if (objectAdapter.isTitleAvailable()) { - this.titleHint = objectAdapter.titleString(); - } - } - } - - public String getTitleHint() { - return titleHint; - } - /** * Lazily looks up {@link ObjectAdapter} if required. * http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java index 2faca9b..a2ec3df 100644 --- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java +++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java @@ -357,16 +357,6 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements UiH adapterMemento = ObjectAdapterMemento.createOrNull(adapter); } - @Override - public void detach() { - if (isAttached()) { - if (adapterMemento != null) { - adapterMemento.captureTitleHintIfPossible(); - } - } - super.detach(); - } - // ////////////////////////////////////////////////////////// // PropertyModels http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java index 24361af..4556cd2 100644 --- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java +++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java @@ -25,7 +25,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager; import org.apache.isis.core.runtime.system.context.IsisContext; -import org.apache.isis.core.runtime.system.persistence.Persistor; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; /** * Adapter for {@link LoadableDetachableModel}s, providing access to some of the @@ -50,7 +50,7 @@ public abstract class ModelAbstract<T> extends LoadableDetachableModel<T> { return IsisContext.getAuthenticationSession(); } - protected Persistor getPersistenceSession() { + protected PersistenceSession getPersistenceSession() { return IsisContext.getPersistenceSession(); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/formcomponent/FormComponentPanelAbstract.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/formcomponent/FormComponentPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/formcomponent/FormComponentPanelAbstract.java index 785f473..59f152e 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/formcomponent/FormComponentPanelAbstract.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/formcomponent/FormComponentPanelAbstract.java @@ -20,20 +20,18 @@ package org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent; import java.util.List; - import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.Session; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.FormComponentPanel; import org.apache.wicket.model.IModel; - import org.apache.isis.core.commons.authentication.AuthenticationSession; import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider; import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAware; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.runtime.system.context.IsisContext; -import org.apache.isis.core.runtime.system.persistence.Persistor; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; import org.apache.isis.viewer.wicket.model.hints.UiHintContainer; import org.apache.isis.viewer.wicket.model.isis.PersistenceSessionProvider; import org.apache.isis.viewer.wicket.ui.ComponentType; @@ -52,18 +50,6 @@ public abstract class FormComponentPanelAbstract<T> extends FormComponentPanel<T private ComponentType componentType; - public FormComponentPanelAbstract(final ComponentType componentType) { - this(componentType, null); - } - - public FormComponentPanelAbstract(final String id) { - this(id, null); - } - - public FormComponentPanelAbstract(final ComponentType componentType, final IModel<T> model) { - this(componentType.getWicketId(), model); - } - public FormComponentPanelAbstract(final String id, final IModel<T> model) { super(id, model); this.componentType = ComponentType.lookup(id); @@ -156,19 +142,15 @@ public abstract class FormComponentPanelAbstract<T> extends FormComponentPanel<T // /////////////////////////////////////////////////////////////////// @Override - public Persistor getPersistenceSession() { + public PersistenceSession getPersistenceSession() { return IsisContext.getPersistenceSession(); } protected List<ObjectAdapter> getServices() { - return IsisContext.getPersistenceSession().getServices(); + return getPersistenceSession().getServices(); } - protected List<ObjectAdapter> getServiceAdapters() { - return IsisContext.getPersistenceSession().getServices(); - } - // ///////////////////////////////////////////////// // *Provider impl. // ///////////////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java index 048e25f..c98db31 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java @@ -33,7 +33,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager; import org.apache.isis.core.runtime.system.context.IsisContext; -import org.apache.isis.core.runtime.system.persistence.Persistor; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; import org.apache.isis.viewer.wicket.model.isis.PersistenceSessionProvider; import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry; import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor; @@ -134,12 +134,8 @@ public abstract class FormAbstract<T> extends Form<T> implements IHeaderContribu // Dependencies (from IsisContext) // /////////////////////////////////////////////////////////////////// - public IsisContext getIsisContext() { - return IsisContext.getInstance(); - } - @Override - public Persistor getPersistenceSession() { + public PersistenceSession getPersistenceSession() { return IsisContext.getPersistenceSession(); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java index 4667b12..690a0ff 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java @@ -19,10 +19,6 @@ package org.apache.isis.viewer.wicket.ui.panels; -import java.util.List; - -import com.google.inject.Inject; - import org.apache.wicket.Component; import org.apache.wicket.Session; import org.apache.wicket.markup.head.IHeaderResponse; @@ -30,14 +26,12 @@ import org.apache.wicket.markup.html.IHeaderContributor; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.request.resource.CssResourceReference; - import org.apache.isis.core.commons.authentication.AuthenticationSession; import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider; import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAware; -import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager; import org.apache.isis.core.runtime.system.context.IsisContext; -import org.apache.isis.core.runtime.system.persistence.Persistor; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; import org.apache.isis.viewer.wicket.model.hints.UiHintContainer; import org.apache.isis.viewer.wicket.model.isis.PersistenceSessionProvider; import org.apache.isis.viewer.wicket.ui.ComponentFactory; @@ -160,25 +154,18 @@ public abstract class PanelAbstract<T extends IModel<?>> extends Panel implement } // /////////////////////////////////////////////////////////////////// - // Dependencies (from IsisContext + // Dependencies (from IsisContext) // /////////////////////////////////////////////////////////////////// - public IsisContext getIsisContext() { - return IsisContext.getInstance(); - } - @Override - public Persistor getPersistenceSession() { + public PersistenceSession getPersistenceSession() { return IsisContext.getPersistenceSession(); } public AdapterManager getAdapterManager() { - return IsisContext.getPersistenceSession().getAdapterManager(); + return getPersistenceSession().getAdapterManager(); } - protected List<ObjectAdapter> getServiceAdapters() { - return IsisContext.getPersistenceSession().getServices(); - } // ///////////////////////////////////////////////// // Dependency Injection http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/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 66ac70c..03fce17 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 @@ -52,7 +52,6 @@ import org.apache.isis.core.runtime.system.DeploymentType; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.core.runtime.system.persistence.ObjectStore; import org.apache.isis.core.runtime.system.persistence.PersistenceSession; -import org.apache.isis.core.runtime.system.persistence.Persistor; import org.apache.isis.core.runtime.system.transaction.IsisTransaction; import org.apache.isis.core.runtime.system.transaction.IsisTransaction.State; import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager; @@ -547,7 +546,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic public ObjectAdapter reload(RootOid oid) { ensureSessionInProgress(); - final Persistor persistenceSession = getPersistenceSession(); + final PersistenceSession persistenceSession = getPersistenceSession(); return persistenceSession.loadObject(oid); } @@ -560,7 +559,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic ensureSessionInProgress(); ensureObjectIsNotPersistent(pojo); final ObjectAdapter adapter = adapterFor(pojo); - getPersistenceSession().remapAsPersistent(adapter, persistentOid); + getPersistenceSession().getAdapterManager().remapAsPersistent(adapter, persistentOid); return adapter; } @@ -803,7 +802,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic return getPersistenceSession().getTransactionManager(); } - public Persistor getPersistor() { + public PersistenceSession getPersistor() { return getPersistenceSession(); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/metamodel/src/main/java/org/apache/isis/core/commons/authentication/MessageBroker.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/authentication/MessageBroker.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/authentication/MessageBroker.java index 12d5068..dc36cce 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/commons/authentication/MessageBroker.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/authentication/MessageBroker.java @@ -33,6 +33,7 @@ public class MessageBroker implements Serializable, DebuggableWithTitle { private final List<String> messages = Lists.newArrayList(); private final List<String> warnings = Lists.newArrayList(); + private String applicationError; //region > acquire (factory method) @@ -57,6 +58,7 @@ public class MessageBroker implements Serializable, DebuggableWithTitle { public void reset() { warnings.clear(); messages.clear(); + applicationError = null; } //endregion @@ -85,6 +87,14 @@ public class MessageBroker implements Serializable, DebuggableWithTitle { //endregion + public String getApplicationError() { + return applicationError; + } + + public void setApplicationError(String applicationError) { + this.applicationError = applicationError; + } + //region > debugging @Override @@ -120,6 +130,7 @@ public class MessageBroker implements Serializable, DebuggableWithTitle { messages.clear(); return copy; } + //endregion http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java index 6dc619a..1954b3e 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java @@ -208,11 +208,9 @@ public interface ObjectAdapter extends Instance, org.apache.isis.applib.annotati boolean canTransitionToResolving(); - boolean isTitleAvailable(); void markAsResolvedIfPossible(); - Version getVersion(); void setVersion(Version version); http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ResolveState.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ResolveState.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ResolveState.java index f5beaf9..fbf1fe6 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ResolveState.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ResolveState.java @@ -19,6 +19,9 @@ package org.apache.isis.core.metamodel.adapter; +import java.util.*; +import com.google.common.collect.Maps; + import static org.apache.isis.core.metamodel.adapter.ResolveState.RepresentsPersistent.DOES_NOT_REPRESENT_PERSISTENT; import static org.apache.isis.core.metamodel.adapter.ResolveState.RepresentsPersistent.REPRESENTS_PERSISTENT; import static org.apache.isis.core.metamodel.adapter.ResolveState.RespondsToChanges.DOES_NOT_RESPOND_TO_CHANGES; @@ -26,14 +29,6 @@ import static org.apache.isis.core.metamodel.adapter.ResolveState.RespondsToChan import static org.apache.isis.core.metamodel.adapter.ResolveState.TransitionFrom.CANNOT_TRANSITION_FROM; import static org.apache.isis.core.metamodel.adapter.ResolveState.TransitionFrom.CAN_TRANSITION_FROM; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; - -import com.google.common.collect.Maps; - public final class ResolveState { private static final Map<String, ResolveState> statesByName = Maps.newHashMap(); @@ -61,40 +56,6 @@ public final class ResolveState { public static final ResolveState DESTROYED = new ResolveState("Destroyed", "D~~", null, CANNOT_TRANSITION_FROM, RESPONDS_TO_CHANGES, DOES_NOT_REPRESENT_PERSISTENT); public static final ResolveState VALUE = new ResolveState("Value", "V~~", null, CANNOT_TRANSITION_FROM, RESPONDS_TO_CHANGES, DOES_NOT_REPRESENT_PERSISTENT); - // 20120709: used only in <tt>Memento</tt>, when recreating a transient object. - // however, analysis is that could equally set to TRANSIENT, rendering this state - // surplus to requirements. - // public static final ResolveState SERIALIZING_TRANSIENT = new ResolveState("Serializing Transient", "T~S", TRANSIENT, CANNOT_TRANSITION_FROM, DOES_NOT_RESPOND_TO_CHANGES, REPRESENTS_TRANSIENT, DOES_NOT_REPRESENT_PERSISTENT); - - // no longer seem to be used - - // public static final ResolveState PART_RESOLVED = new - // ResolveState("Part Resolved", "Pr~~", null, RESOLVABLE_FROM, - // NOT_RESOLVABLE_INTO, RESPONDS_TO_CHANGES, DOES_NOT_REPRESENT_TRANSIENT, - // REPRESENTS_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING, COULD_RESOLVE); - // public static final ResolveState RESOLVING_PART = new - // ResolveState("Resolving Part", "P~r~", PART_RESOLVED, - // NOT_RESOLVABLE_FROM, RESOLVABLE_INTO, DOES_NOT_RESPOND_TO_CHANGES, - // DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, - // REPRESENTS_RESOLVING, COULD_RESOLVE); - - // no longer appear to be needed following the removal of remoting support. - - // public static final ResolveState SERIALIZING_GHOST = new - // ResolveState("Serializing Ghost", "PG~S", GHOST, NOT_RESOLVABLE_FROM, - // NOT_RESOLVABLE_INTO, DOES_NOT_RESPOND_TO_CHANGES, - // DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, - // DOES_NOT_REPRESENT_RESOLVING, COULD_RESOLVE); - // public static final ResolveState SERIALIZING_PART_RESOLVED = new - // ResolveState("Serializing Part Resolved", "Pr~S", PART_RESOLVED, - // NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, DOES_NOT_RESPOND_TO_CHANGES, - // DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, - // DOES_NOT_REPRESENT_RESOLVING, - // COULD_RESOLVE); - - // 20120709: only used in <tt>DefaultPersistAlgorithm</tt> - // able to remove because, after refactoring simplifications, ended up as equivalent to UPDATING. - // public static final ResolveState SERIALIZING_RESOLVED = new ResolveState("Serializing Resolved", "PRS", RESOLVED, CANNOT_TRANSITION_FROM, DOES_NOT_RESPOND_TO_CHANGES, DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT); /** @@ -104,28 +65,14 @@ public final class ResolveState { public static Map<ResolveState, ResolveState[]> changeToStatesByState = new HashMap<ResolveState, ResolveState[]>() { private static final long serialVersionUID = 1L; { - // previously also RESOLVING_PART and SERIALIZING_GHOST put(GHOST, new ResolveState[] { DESTROYED, RESOLVING, UPDATING }); put(NEW, new ResolveState[] { TRANSIENT, GHOST, VALUE }); - // previously also SERIALIZING_TRANSIENT put(TRANSIENT, new ResolveState[] { RESOLVED }); put(RESOLVING, new ResolveState[] { RESOLVED }); - // previously also SERIALIZING_RESOLVED put(RESOLVED, new ResolveState[] { GHOST, UPDATING, DESTROYED }); - //put(SERIALIZING_RESOLVED, new ResolveState[] { RESOLVED }); - //put(SERIALIZING_TRANSIENT, new ResolveState[] { TRANSIENT }); put(UPDATING, new ResolveState[] { RESOLVED }); put(DESTROYED, new ResolveState[] {}); put(VALUE, new ResolveState[] {}); - - // put(PART_RESOLVED, new ResolveState[] { RESOLVING , UPDATING, - // DESTROYED , RESOLVING_PART, SERIALIZING_PART_RESOLVED }); - // put(RESOLVING_PART, new ResolveState[] { PART_RESOLVED, RESOLVED - // }); - // put(SERIALIZING_GHOST, new ResolveState[] { GHOST }); - // put(SERIALIZING_PART_RESOLVED, new ResolveState[] { PART_RESOLVED - // }); - } }; http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/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 03423d1..8ebae19 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 @@ -121,7 +121,7 @@ public interface AdapterManager extends Injectable { ConcurrencyChecking.concurrencyChecking.set(prior); } } - + /** * Allows a caller to temporarily disable concurrency checking for the current thread. */ @@ -140,7 +140,7 @@ public interface AdapterManager extends Injectable { /** * As per {@link #adapterFor(TypedOid, ConcurrencyChecking)}, with - * {@value org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking#NO_CHECK no checking}. + * {@link org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.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 @@ -162,7 +162,7 @@ public interface AdapterManager extends Injectable { * {@link Oid#isTransient() transient} object. * * <p> - * The pojo itself is recreated by delegating to a {@link PojoRecreator} implementation. + * The pojo itself is recreated by delegating to a {@link org.apache.isis.core.metamodel.adapter.mgr.AdapterManager}. * The default impl just uses the {@link ObjectSpecification#createObject()}; * however object stores (eg JDO/DataNucleus) can provide alternative implementations * in order to ensure that the created pojo is attached to a persistence context. @@ -182,7 +182,7 @@ public interface AdapterManager extends Injectable { * will be {@link TypedOid#setVersion(org.apache.isis.core.metamodel.adapter.version.Version) set} to the current * value. This allows the client to retry if they wish. * - * @throws {@link ObjectNotFoundException} if the object does not exist. + * @throws {@link org.apache.isis.core.runtime.persistence.ObjectNotFoundException} if the object does not exist. */ ObjectAdapter adapterFor(TypedOid oid, ConcurrencyChecking concurrencyChecking); http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/objectstore/InMemoryObjectStore.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/objectstore/InMemoryObjectStore.java b/core/runtime/src/main/java/org/apache/isis/core/objectstore/InMemoryObjectStore.java index 58a426c..53e3775 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/objectstore/InMemoryObjectStore.java +++ b/core/runtime/src/main/java/org/apache/isis/core/objectstore/InMemoryObjectStore.java @@ -128,7 +128,7 @@ public class InMemoryObjectStore implements ObjectStore { // this could happen if we rehydrate a persisted object that // depends on another persisted object // not yet rehydrated. - getPersistenceSession().removeAdapter(existingAdapterLookedUpByPojo); + getPersistenceSession().getAdapterManager().removeAdapter(existingAdapterLookedUpByPojo); } final ObjectAdapter existingAdapterLookedUpByOid = getAdapterManager().getAdapterFor(oid); @@ -136,7 +136,7 @@ public class InMemoryObjectStore implements ObjectStore { throw new IsisException("A mapping already exists for " + oid + ": " + existingAdapterLookedUpByOid); } - final ObjectAdapter recreatedAdapter = getPersistenceSession().mapRecreatedPojo(oid, pojo); + final ObjectAdapter recreatedAdapter = getPersistenceSession().getAdapterManager().mapRecreatedPojo(oid, pojo); final Version version = objectStoreInstances.getVersion(oid); recreatedAdapter.setVersion(version); @@ -266,13 +266,6 @@ public class InMemoryObjectStore implements ObjectStore { adapter.markAsResolvedIfPossible(); } - @Override - public void resolveField(final ObjectAdapter object, final ObjectAssociation field) throws ObjectPersistenceException { - final ObjectAdapter referenceAdapter = field.get(object); - referenceAdapter.markAsResolvedIfPossible(); - } - - // /////////////////////////////////////////////////////// // getInstances, hasInstances http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/objectstore/internal/ObjectStoreInstances.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/objectstore/internal/ObjectStoreInstances.java b/core/runtime/src/main/java/org/apache/isis/core/objectstore/internal/ObjectStoreInstances.java index 028dffb..b24f332 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/objectstore/internal/ObjectStoreInstances.java +++ b/core/runtime/src/main/java/org/apache/isis/core/objectstore/internal/ObjectStoreInstances.java @@ -140,7 +140,7 @@ public class ObjectStoreInstances { if (adapterLookedUpByOid != null) { return adapterLookedUpByOid; } - return getPersistenceSession().mapRecreatedPojo(oid, pojo); + return getPersistenceSession().getAdapterManager().mapRecreatedPojo(oid, pojo); } // /////////////////////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java index 934ecbe..90ac06e 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java @@ -19,20 +19,10 @@ package org.apache.isis.core.runtime.fixturedomainservice; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.Reader; -import java.io.Writer; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - +import java.io.*; +import java.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager; import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet; @@ -46,7 +36,6 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.core.runtime.system.persistence.PersistenceSession; -import org.apache.isis.core.runtime.system.persistence.Persistor; public class ObjectFixtureFilePersistor { @@ -216,7 +205,7 @@ class LoadedObjects { } - protected Persistor getPersistenceSession() { + protected PersistenceSession getPersistenceSession() { return IsisContext.getPersistenceSession(); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java index 9dd3556..868c498 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java @@ -33,7 +33,6 @@ import org.apache.isis.core.metamodel.services.ServicesInjectorSpi; import org.apache.isis.core.runtime.system.DeploymentType; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.core.runtime.system.persistence.PersistenceSession; -import org.apache.isis.core.runtime.system.persistence.Persistor; import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager; /** @@ -147,7 +146,7 @@ public class FixturesInstallerDelegate { /** * Hook - default does nothing. */ - protected void preInstallFixtures(final Persistor persistenceSession) { + protected void preInstallFixtures(final PersistenceSession persistenceSession) { } // /////////////////////////////////////// @@ -238,7 +237,7 @@ public class FixturesInstallerDelegate { /** * Hook - default does nothing. */ - protected void postInstallFixtures(final Persistor persistenceSession) { + protected void postInstallFixtures(final PersistenceSession persistenceSession) { } // ///////////////////////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java index dd384d5..b470119 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java @@ -197,7 +197,7 @@ public class Memento implements Serializable { if (spec.isParentedOrFreeCollection()) { final Object recreatedPojo = spec.createObject(); - adapter = getPersistenceSession().mapRecreatedPojo(oid, recreatedPojo); + adapter = getPersistenceSession().getAdapterManager() .mapRecreatedPojo(oid, recreatedPojo); populateCollection(adapter, (CollectionData) data); } else { http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java ---------------------------------------------------------------------- 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 08b6af4..8df358b 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 @@ -234,13 +234,6 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter { return aggregateResolveState().canTransitionToResolving(); } - - @Override - public boolean isTitleAvailable() { - final ResolveState resolveState = aggregateResolveState(); - return resolveState.isValue() || resolveState.isResolved(); - } - /** * If {@link #isGhost()}, then will become resolved. */ http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/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 6f180d7..c9f685c 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 @@ -57,7 +57,6 @@ 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.OidGenerator; import org.apache.isis.core.runtime.system.persistence.PersistenceSession; -import org.apache.isis.core.runtime.system.persistence.RecreatedPojoRemapper; import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg; import static org.hamcrest.CoreMatchers.*; @@ -77,7 +76,6 @@ import static org.hamcrest.CoreMatchers.*; * maps to an {@link ObjectAdapter adapter} and these are reused. */ public class AdapterManagerDefault implements AdapterManager, Iterable<ObjectAdapter>, - RecreatedPojoRemapper, SessionScopedComponent, DebuggableWithTitle, Resettable { @@ -366,7 +364,6 @@ public class AdapterManagerDefault implements AdapterManager, Iterable<ObjectAda return adapter; } - @Override public void remapRecreatedPojo(ObjectAdapter adapter, final Object pojo) { removeAdapter(adapter); adapter.replacePojo(pojo); @@ -374,7 +371,26 @@ public class AdapterManagerDefault implements AdapterManager, Iterable<ObjectAda } - @Override + /** + * Either returns an existing {@link ObjectAdapter adapter} (as per + * {@link #getAdapterFor(Object)} or {@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> + * If the {@link ObjectAdapter adapter} is recreated, its + * {@link ResolveState} will be set to either + * {@link ResolveState#TRANSIENT} or {@link ResolveState#GHOST} based on + * whether the {@link Oid} is {@link Oid#isTransient() transient} or not. + * + * @param oid + * @param recreatedPojo - already known to the object store impl, or a service + */ public ObjectAdapter mapRecreatedPojo(final Oid oid, final Object recreatedPojo) { // attempt to locate adapter for the pojo http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithm.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithm.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithm.java index 53f2d58..c0a9de1 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithm.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithm.java @@ -20,10 +20,11 @@ package org.apache.isis.core.runtime.persistence.objectstore.algorithm; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; public interface PersistAlgorithm { - public void makePersistent(final ObjectAdapter object, final ToPersistObjectSet adders); + public void makePersistent(final ObjectAdapter object, final PersistenceSession adders); public String name(); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmDefault.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmDefault.java index 57afe05..fb2a81d 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmDefault.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmDefault.java @@ -30,6 +30,7 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacetU import org.apache.isis.core.metamodel.spec.feature.Contributed; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.runtime.persistence.ObjectPersistenceException; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; class PersistAlgorithmDefault extends PersistAlgorithmAbstract { private static final Logger LOG = LoggerFactory.getLogger(PersistAlgorithmDefault.class); @@ -40,7 +41,7 @@ class PersistAlgorithmDefault extends PersistAlgorithmAbstract { } @Override - public void makePersistent(final ObjectAdapter adapter, final ToPersistObjectSet toPersistObjectSet) { + public void makePersistent(final ObjectAdapter adapter, final PersistenceSession toPersistObjectSet) { if (adapter.getSpecification().isParentedOrFreeCollection()) { if(LOG.isDebugEnabled()) { LOG.debug("persist " + adapter); @@ -61,7 +62,7 @@ class PersistAlgorithmDefault extends PersistAlgorithmAbstract { } } - protected void persist(final ObjectAdapter adapter, final ToPersistObjectSet toPersistObjectSet) { + protected void persist(final ObjectAdapter adapter, final PersistenceSession toPersistObjectSet) { if (alreadyPersistedOrNotPersistableOrServiceOrStandalone(adapter)) { return; } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmForDataNucleus.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmForDataNucleus.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmForDataNucleus.java index 134654b..297f470 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmForDataNucleus.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmForDataNucleus.java @@ -22,6 +22,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.isis.core.commons.util.ToString; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; /** @@ -51,7 +52,7 @@ class PersistAlgorithmForDataNucleus extends PersistAlgorithmAbstract { // //////////////////////////////////////////////////////////////// public void makePersistent(final ObjectAdapter adapter, - final ToPersistObjectSet toPersistObjectSet) { + final PersistenceSession persistenceSession) { if (alreadyPersistedOrNotPersistable(adapter)) { return; } @@ -68,7 +69,7 @@ class PersistAlgorithmForDataNucleus extends PersistAlgorithmAbstract { if (alreadyPersistedOrNotPersistable(adapter)) { return; } - toPersistObjectSet.addCreateObjectCommand(adapter); + persistenceSession.addCreateObjectCommand(adapter); } http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmUnified.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmUnified.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmUnified.java index dca5413..5ebc0b0 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmUnified.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmUnified.java @@ -23,6 +23,7 @@ import org.slf4j.LoggerFactory; import org.apache.isis.core.commons.config.IsisConfiguration; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.runtime.PersistorImplementation; +import org.apache.isis.core.runtime.system.persistence.PersistenceSession; /** @@ -48,8 +49,8 @@ public class PersistAlgorithmUnified extends PersistAlgorithmAbstract { public void makePersistent( final ObjectAdapter adapter, - final ToPersistObjectSet toPersistObjectSet) { - persistAlgorithm.makePersistent(adapter, toPersistObjectSet); + final PersistenceSession persistenceSession) { + persistAlgorithm.makePersistent(adapter, persistenceSession); } @Override http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/ToPersistObjectSet.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/ToPersistObjectSet.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/ToPersistObjectSet.java deleted file mode 100644 index 7170743..0000000 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/ToPersistObjectSet.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.core.runtime.persistence.objectstore.algorithm; - -import org.apache.isis.core.metamodel.adapter.ObjectAdapter; -import org.apache.isis.core.metamodel.adapter.oid.Oid; -import org.apache.isis.core.runtime.system.persistence.PersistenceSession; - -/** - * Set of {@link ObjectAdapter}s that require persisting. - * - * <p> - * Is consumed by {@link PersistAlgorithm}, and is ultimately implemented by - * {@link PersistenceSession}. - */ -public interface ToPersistObjectSet { - - void remapAsPersistent(final ObjectAdapter object); - - void addCreateObjectCommand(ObjectAdapter object); - - /** - * To support ISIS-234; keep track, for the duration of the transaction only, - * of the old transient {@link Oid}s and their corresponding persistent {@link Oid}s. - */ - Oid remappedFrom(Oid oid); - -} http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java index f7c7466..caa5e28 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java @@ -58,7 +58,7 @@ public class PublishingServiceWithDefaultPayloadFactories { // objectstores such as JDO prevent the underlying pojo from being touched once it has been deleted. // we therefore replace that pojo with an 'empty' one. Object replacementObject = adapter.getSpecification().createObject(); - getPersistenceSession().remapRecreatedPojo(adapter, replacementObject); + getPersistenceSession().getAdapterManager().remapRecreatedPojo(adapter, replacementObject); return adapter; } protected PersistenceSession getPersistenceSession() { http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/ObjectStore.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/ObjectStore.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/ObjectStore.java index a5b8005..ff28104 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/ObjectStore.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/ObjectStore.java @@ -28,7 +28,6 @@ import org.apache.isis.core.metamodel.adapter.oid.CollectionOid; import org.apache.isis.core.metamodel.adapter.oid.RootOid; import org.apache.isis.core.metamodel.adapter.oid.TypedOid; import org.apache.isis.core.metamodel.spec.ObjectSpecification; -import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.runtime.persistence.objectstore.transaction.*; public interface ObjectStore extends TransactionalResource, DebuggableWithTitle, SessionScopedComponent { @@ -121,8 +120,7 @@ public interface ObjectStore extends TransactionalResource, DebuggableWithTitle, /** * Retrieves the object identified by the specified {@link TypedOid} from the object - * store, {@link RecreatedPojoRemapper#mapRecreatedPojo(org.apache.isis.core.metamodel.adapter.oid.Oid, Object) mapped} into - * the {@link AdapterManager}. + * store, {@link AdapterManager#mapRecreatedPojo(org.apache.isis.core.metamodel.adapter.oid.Oid, Object) mapped by the adapter manager}. * * <p>The cache should be checked first and, if the object is cached, * the cached version should be returned. It is important that if this @@ -163,7 +161,7 @@ public interface ObjectStore extends TransactionalResource, DebuggableWithTitle, // /////////////////////////////////////////////////////// - // resolveField, resolveImmediately + // resolveImmediately // /////////////////////////////////////////////////////// /** @@ -173,12 +171,6 @@ public interface ObjectStore extends TransactionalResource, DebuggableWithTitle, */ void resolveImmediately(ObjectAdapter object); - /** - * Called by the resolveEagerly method in ObjectAdapterManager. - * - * @see PersistenceSession#resolveField(ObjectAdapter, ObjectAssociation) - */ - void resolveField(ObjectAdapter object, ObjectAssociation field); // /////////////////////////////////////////////////////// // Services http://git-wip-us.apache.org/repos/asf/isis/blob/5f8fca9b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceQueryFactory.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceQueryFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceQueryFactory.java new file mode 100644 index 0000000..e93769b --- /dev/null +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceQueryFactory.java @@ -0,0 +1,103 @@ +/* + * 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.core.runtime.system.persistence; + +import java.util.Map; +import com.google.common.collect.Maps; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.apache.isis.applib.query.Query; +import org.apache.isis.applib.query.QueryDefault; +import org.apache.isis.applib.query.QueryFindAllInstances; +import org.apache.isis.core.metamodel.adapter.ObjectAdapter; +import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager; +import org.apache.isis.core.metamodel.services.container.query.QueryCardinality; +import org.apache.isis.core.metamodel.services.container.query.QueryFindByPattern; +import org.apache.isis.core.metamodel.services.container.query.QueryFindByTitle; +import org.apache.isis.core.metamodel.spec.ObjectSpecification; +import org.apache.isis.core.metamodel.spec.SpecificationLoader; +import org.apache.isis.core.runtime.persistence.query.*; + +public class PersistenceQueryFactory { + + private static final Logger LOG = LoggerFactory.getLogger(PersistenceQueryFactory.class); + + private final SpecificationLoader specificationLoader; + private final AdapterManager adapterManager; + + PersistenceQueryFactory(final SpecificationLoader specificationLoader, final AdapterManager adapterManager) { + this.specificationLoader = specificationLoader; + this.adapterManager = adapterManager; + } + + /** + * Converts the {@link org.apache.isis.applib.query.Query applib representation of a query} into the + * {@link PersistenceQuery NOF-internal representation}. + */ + final PersistenceQuery createPersistenceQueryFor(final Query<?> query, final QueryCardinality cardinality) { + if (LOG.isDebugEnabled()) { + LOG.debug("createPersistenceQueryFor: " + query.getDescription()); + } + final ObjectSpecification noSpec = specFor(query); + if (query instanceof QueryFindAllInstances) { + final QueryFindAllInstances<?> queryFindAllInstances = (QueryFindAllInstances<?>) query; + return new PersistenceQueryFindAllInstances(noSpec, queryFindAllInstances.getStart(), queryFindAllInstances.getCount()); + } + if (query instanceof QueryFindByTitle) { + final QueryFindByTitle<?> queryByTitle = (QueryFindByTitle<?>) query; + final String title = queryByTitle.getTitle(); + return new PersistenceQueryFindByTitle(noSpec, title, queryByTitle.getStart(), queryByTitle.getCount()); + } + if (query instanceof QueryFindByPattern) { + final QueryFindByPattern<?> queryByPattern = (QueryFindByPattern<?>) query; + final Object pattern = queryByPattern.getPattern(); + final ObjectAdapter patternAdapter = adapterManager.adapterFor(pattern); + return new PersistenceQueryFindByPattern(noSpec, patternAdapter, queryByPattern.getStart(), queryByPattern.getCount()); + } + if (query instanceof QueryDefault) { + final QueryDefault<?> queryDefault = (QueryDefault<?>) query; + final String queryName = queryDefault.getQueryName(); + final Map<String, ObjectAdapter> argumentsAdaptersByParameterName = wrap(queryDefault.getArgumentsByParameterName()); + return new PersistenceQueryFindUsingApplibQueryDefault(noSpec, queryName, argumentsAdaptersByParameterName, cardinality, queryDefault.getStart(), queryDefault.getCount()); + } + // fallback; generic serializable applib query. + return new PersistenceQueryFindUsingApplibQuerySerializable(noSpec, query, cardinality); + } + + /** + * Converts a map of pojos keyed by string to a map of adapters keyed by the + * same strings. + */ + private Map<String, ObjectAdapter> wrap(final Map<String, Object> argumentsByParameterName) { + final Map<String, ObjectAdapter> argumentsAdaptersByParameterName = Maps.newHashMap(); + for (final Map.Entry<String, Object> entry : argumentsByParameterName.entrySet()) { + final String parameterName = entry.getKey(); + final Object argument = argumentsByParameterName.get(parameterName); + final ObjectAdapter argumentAdapter = argument != null ? adapterManager.adapterFor(argument) : null; + argumentsAdaptersByParameterName.put(parameterName, argumentAdapter); + } + return argumentsAdaptersByParameterName; + } + + private ObjectSpecification specFor(final Query<?> query) { + return specificationLoader.loadSpecification(query.getResultType()); + } + + +}
