You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/08/28 19:16:04 UTC
[04/12] isis git commit: ISIS-1044: introducing interaction contexts
- analogous to those visibility/usability/validity checking, for accessing
properties, collections, invoking actions;
also action prompt (for choices and autoComplete).
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index c003978..6a86ffc 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Render.Type;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -34,6 +35,7 @@ import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
import org.apache.isis.core.metamodel.facets.value.biginteger.BigIntegerValueFacet;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.runtime.system.DeploymentType;
@@ -47,6 +49,8 @@ import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.PropertyDescr
public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAssociation> {
+ private final PropertyAccessingContext propertyAccessingContext;
+
public ObjectPropertyReprRenderer(
final RendererContext resourceContext) {
this(resourceContext, null, null, JsonRepresentation.newMap());
@@ -58,6 +62,9 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
final String propertyId,
final JsonRepresentation representation) {
super(resourceContext, linkFollower, propertyId, RepresentationType.OBJECT_PROPERTY, representation, Where.OBJECT_FORMS);
+
+ propertyAccessingContext = objectMember.createAccessingInteractionContext(getRendererContext().getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, objectAdapter);
}
@Override
@@ -81,7 +88,7 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
// ///////////////////////////////////////////////////
private Object addValue() {
- final ObjectAdapter valueAdapter = objectMember.get(objectAdapter);
+ final ObjectAdapter valueAdapter = objectMember.get(objectAdapter, propertyAccessingContext);
// use the runtime type if we have a value, else the compile time type of the member otherwise
final ObjectSpecification spec = valueAdapter != null? valueAdapter.getSpecification(): objectMember.getSpecification();
@@ -205,7 +212,8 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
final DeploymentType deploymentType = determineDeploymentTypeFrom(rendererContext);
final DeploymentCategory deploymentCategory = deploymentType.getDeploymentCategory();
final ObjectAdapter[] choiceAdapters =
- objectMember.getChoices(objectAdapter, authenticationSession, deploymentCategory);
+ objectMember.getChoices(propertyAccessingContext, objectAdapter, authenticationSession, deploymentCategory
+ );
if (choiceAdapters == null || choiceAdapters.length == 0) {
return null;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
index 3c7b039..1e11643 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
@@ -34,6 +34,9 @@ import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.commons.url.UrlEncodingUtils;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.interactions.CollectionAccessingContext;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
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;
@@ -222,7 +225,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
}
- property.set(objectAdapter, argAdapter);
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER,
+ objectAdapter);
+ property.set(propertyAccessingContext, objectAdapter, argAdapter);
return helper.propertyDetails(
propertyId,
@@ -253,7 +259,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
}
- property.set(objectAdapter, null);
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER,
+ objectAdapter);
+ property.set(propertyAccessingContext, objectAdapter, null);
return helper.propertyDetails(
propertyId,
@@ -318,7 +327,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
}
- collection.addElement(objectAdapter, argAdapter);
+ final CollectionAccessingContext collectionAccessingContext = collection
+ .createAccessingInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER,
+ objectAdapter);
+ collection.addElement(collectionAccessingContext, objectAdapter, argAdapter);
return helper.collectionDetails(collectionId, MemberReprMode.WRITE);
}
@@ -354,7 +366,11 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
}
- collection.addElement(objectAdapter, argAdapter);
+ final CollectionAccessingContext collectionAccessingContext = collection
+ .createAccessingInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER,
+ objectAdapter);
+
+ collection.addElement(collectionAccessingContext, objectAdapter, argAdapter);
return helper.collectionDetails(collectionId, MemberReprMode.WRITE);
}
@@ -385,7 +401,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
}
- collection.removeElement(objectAdapter, argAdapter);
+ final CollectionAccessingContext collectionAccessingContext = collection
+ .createAccessingInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER,
+ objectAdapter);
+ collection.removeElement(collectionAccessingContext, objectAdapter, argAdapter);
return helper.collectionDetails(collectionId, MemberReprMode.WRITE);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
index 8d4fe5b..091509c 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
@@ -28,6 +28,8 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
@@ -324,7 +326,10 @@ public class DomainResourceHelper {
// invoke
final ObjectAdapter[] argArray2 = argAdapters.toArray(new ObjectAdapter[0]);
- final ObjectAdapter returnedAdapter = action.execute(objectAdapter, argArray2);
+ final ActionExecutingContext actionExecutingContext =
+ action.createExecutingInteractionContext(rendererContext.getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, objectAdapter, argArray2);
+ final ObjectAdapter returnedAdapter = action.execute(actionExecutingContext, objectAdapter, argArray2);
final ObjectAndActionInvocation objectAndActionInvocation =
new ObjectAndActionInvocation(this.objectAdapter, action, arguments, returnedAdapter);
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
index 4b41b3c..7f6ddb4 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
@@ -19,6 +19,8 @@ package org.apache.isis.viewer.restfulobjects.server.resources;
import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
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;
@@ -130,7 +132,10 @@ public class ObjectAdapterUpdateHelper {
final Consent validity = property.isAssociationValid(objectAdapter, valueAdapter);
if (validity.isAllowed()) {
try {
- property.set(objectAdapter, valueAdapter);
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(resourceContext.getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, objectAdapter);
+ property.set(propertyAccessingContext, objectAdapter, valueAdapter);
} catch (final IllegalArgumentException ex) {
propertyRepr.mapPut("invalidReason", ex.getMessage());
allOk = false;
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 8dfff3d..d216225 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -59,8 +59,10 @@ import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.adapter.oid.RootOidDefault;
import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -466,12 +468,16 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
final ObjectAction action = getActionMemento().getAction();
final AuthenticationSession session = getAuthenticationSession();
+
+ final ActionExecutingContext actionExecutingContext = action
+ .createExecutingInteractionContext(session, InteractionInvocationMethod.BY_USER, targetAdapter,
+ arguments);
final ObjectAdapter resultAdapter =
InteractionUtils.withFiltering(new Callable<ObjectAdapter>() {
@Override public ObjectAdapter call() throws Exception {
return action
.executeWithRuleChecking(
- targetAdapter, arguments, session,
+ actionExecutingContext, targetAdapter, arguments, session,
WHERE_FOR_ACTION_INVOCATION);
}
});
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
index d695a4c..19d9d26 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
@@ -26,12 +26,17 @@ import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
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.OneToOneAssociation;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
@@ -156,7 +161,7 @@ public class BookmarkTreeNode implements Serializable {
}
if(!inGraph) {
- inGraph = addToGraphIfParented(candidateEntityModel);
+ inGraph = addToGraphIfParented(candidateEntityModel, candidateEntityModel.getAuthenticationSession());
}
}
return inGraph;
@@ -192,7 +197,9 @@ public class BookmarkTreeNode implements Serializable {
return true;
}
- private boolean addToGraphIfParented(BookmarkableModel<?> candidateBookmarkableModel) {
+ private boolean addToGraphIfParented(
+ final BookmarkableModel<?> candidateBookmarkableModel,
+ final AuthenticationSession authenticationSession) {
boolean whetherAdded = false;
// TODO: this ought to be move into a responsibility of BookmarkableModel, perhaps, rather than downcasting
@@ -201,7 +208,14 @@ public class BookmarkTreeNode implements Serializable {
final ObjectAdapter candidateAdapter = entityModel.getObject();
final List<ObjectAssociation> properties = candidateAdapter.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.REFERENCE_PROPERTIES);
for (ObjectAssociation objectAssoc : properties) {
- final ObjectAdapter possibleParentAdapter = objectAssoc.get(candidateAdapter);
+
+ OneToOneAssociation property = (OneToOneAssociation) objectAssoc;
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(authenticationSession, InteractionInvocationMethod.BY_USER,
+ candidateAdapter);
+
+ final ObjectAdapter possibleParentAdapter = objectAssoc.get(candidateAdapter,
+ propertyAccessingContext);
if(possibleParentAdapter == null) {
continue;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index 27d783d..bbc8923 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -35,9 +35,11 @@ import org.apache.isis.core.commons.lang.IterableExtensions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet;
import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
+import org.apache.isis.core.metamodel.interactions.CollectionAccessingContext;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -105,13 +107,16 @@ public class EntityCollectionModel extends ModelAbstract<List<ObjectAdapter>> im
List<ObjectAdapter> load(final EntityCollectionModel entityCollectionModel) {
final ObjectAdapter adapter = entityCollectionModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
final OneToManyAssociation collection = entityCollectionModel.collectionMemento.getCollection();
+ final CollectionAccessingContext collectionAccessingContext = collection
+ .createAccessingInteractionContext(entityCollectionModel.getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, adapter);
final ObjectAdapter collectionAsAdapter =
InteractionUtils.withFiltering(
new Callable<ObjectAdapter>() {
@Override
public ObjectAdapter call() throws Exception {
- return collection.get(adapter);
- }
+ return collection.get(adapter, collectionAccessingContext);
+ }
});
final List<Object> objectList = asIterable(collectionAsAdapter);
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index a2c0f47..69e7436 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -35,10 +35,12 @@ import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.ObjectSpecifications.MemberGroupLayoutHint;
@@ -383,7 +385,11 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
final ObjectAdapter associatedAdapter =
InteractionUtils.withFiltering(new Callable<ObjectAdapter>() {
@Override public ObjectAdapter call() throws Exception {
- return pm.getProperty().get(adapter);
+ final OneToOneAssociation property = pm.getProperty();
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, adapter);
+ return property.get(adapter, propertyAccessingContext);
}
});
scalarModel.setObject(associatedAdapter);
@@ -529,7 +535,10 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
}
final ObjectAdapter associate = scalarModel.getObject();
- property.set(adapter, associate);
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER,
+ adapter);
+ property.set(propertyAccessingContext, adapter, associate);
}
final ViewModelFacet recreatableObjectFacet = adapter.getSpecification().getFacet(ViewModelFacet.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index f785260..a4a4466 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -37,6 +37,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -45,7 +46,10 @@ import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFace
import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
import org.apache.isis.core.metamodel.facets.value.string.StringValueSemanticsProvider;
+import org.apache.isis.core.metamodel.interactions.AccessContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
@@ -109,7 +113,10 @@ public class ScalarModel extends EntityModel implements LinksProvider {
}
@Override
- public String parseAndValidate(final ScalarModel scalarModel, final String proposedPojoAsStr) {
+ public String parseAndValidate(
+ final AccessContext<?> accessContext,
+ final ScalarModel scalarModel,
+ final String proposedPojoAsStr) {
final OneToOneAssociation property = scalarModel.getPropertyMemento().getProperty();
ParseableFacet parseableFacet = property.getFacet(ParseableFacet.class);
if (parseableFacet == null) {
@@ -117,7 +124,9 @@ public class ScalarModel extends EntityModel implements LinksProvider {
}
try {
final ObjectAdapter parentAdapter = scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.CHECK);
- final ObjectAdapter currentValue = property.get(parentAdapter);
+ final PropertyAccessingContext propertyAccessingContext = (PropertyAccessingContext) accessContext;
+ final ObjectAdapter currentValue = property.get(parentAdapter,
+ propertyAccessingContext);
final Localization localization = IsisContext.getLocalization();
final ObjectAdapter proposedAdapter = parseableFacet.parseTextEntry(currentValue, proposedPojoAsStr, localization);
final Consent valid = property.isAssociationValid(parentAdapter, proposedAdapter);
@@ -170,14 +179,19 @@ public class ScalarModel extends EntityModel implements LinksProvider {
final DeploymentCategory deploymentCategory) {
final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
final OneToOneAssociation property = propertyMemento.getProperty();
+ final ObjectAdapter parentAdapter = scalarModel.parentObjectAdapterMemento
+ .getObjectAdapter(ConcurrencyChecking.NO_CHECK);
+
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(authenticationSession, InteractionInvocationMethod.BY_USER,
+ parentAdapter);
+
final ObjectAdapter[] choices =
InteractionUtils.withFiltering(new Callable<ObjectAdapter[]>() {
@Override
public ObjectAdapter[] call() throws Exception {
- ObjectAdapter parentAdapter = scalarModel.parentObjectAdapterMemento
- .getObjectAdapter(ConcurrencyChecking.NO_CHECK);
return property.getChoices(
- parentAdapter,
+ propertyAccessingContext, parentAdapter,
authenticationSession, deploymentCategory);
}
});
@@ -202,12 +216,17 @@ public class ScalarModel extends EntityModel implements LinksProvider {
final OneToOneAssociation property = propertyMemento.getProperty();
final ObjectAdapter parentAdapter =
scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
+
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(authenticationSession, InteractionInvocationMethod.BY_USER,
+ parentAdapter);
+
final ObjectAdapter[] choices =
InteractionUtils.withFiltering(new Callable<ObjectAdapter[]>() {
@Override
public ObjectAdapter[] call() throws Exception {
return property.getAutoComplete(
- parentAdapter, searchArg,
+ propertyAccessingContext, parentAdapter, searchArg,
authenticationSession, deploymentCategory);
}
});
@@ -273,11 +292,15 @@ public class ScalarModel extends EntityModel implements LinksProvider {
final OneToOneAssociation property = scalarModel.propertyMemento.getProperty();
final ObjectAdapter parentAdapter =
scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.CHECK);
+
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(scalarModel.getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, parentAdapter);
final ObjectAdapter associatedAdapter =
InteractionUtils.withFiltering(new Callable<ObjectAdapter>() {
@Override
public ObjectAdapter call() throws Exception {
- return property.get(parentAdapter);
+ return property.get(parentAdapter, propertyAccessingContext);
}
});
scalarModel.setObject(associatedAdapter);
@@ -319,7 +342,10 @@ public class ScalarModel extends EntityModel implements LinksProvider {
}
@Override
- public String parseAndValidate(final ScalarModel scalarModel, final String proposedPojoAsStr) {
+ public String parseAndValidate(
+ final AccessContext<?> accessContext,
+ final ScalarModel scalarModel,
+ final String proposedPojoAsStr) {
final ObjectActionParameter parameter = scalarModel.getParameterMemento().getActionParameter();
try {
final ObjectAdapter parentAdapter = scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.CHECK);
@@ -372,12 +398,17 @@ public class ScalarModel extends EntityModel implements LinksProvider {
final ObjectActionParameter actionParameter = parameterMemento.getActionParameter();
final ObjectAdapter parentAdapter =
scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.CHECK);
+
+ final ActionPromptContext actionPromptContext = actionParameter.getAction()
+ .createPromptInteractionContext(authenticationSession, InteractionInvocationMethod.BY_USER,
+ parentAdapter);
+
final ObjectAdapter[] choices =
InteractionUtils.withFiltering(new Callable<ObjectAdapter[]>() {
@Override
public ObjectAdapter[] call() throws Exception {
return actionParameter.getChoices(
- parentAdapter, argumentsIfAvailable,
+ actionPromptContext, parentAdapter, argumentsIfAvailable,
authenticationSession, deploymentCategory);
}
});
@@ -401,11 +432,16 @@ public class ScalarModel extends EntityModel implements LinksProvider {
final ObjectAdapter parentAdapter =
scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
+
+ final ActionPromptContext actionPromptContext = actionParameter.getAction()
+ .createPromptInteractionContext(authenticationSession, InteractionInvocationMethod.BY_USER,
+ parentAdapter);
+
final ObjectAdapter[] choices =
InteractionUtils.withFiltering(new Callable<ObjectAdapter[]>() {
@Override public ObjectAdapter[] call() throws Exception {
return actionParameter.getAutoComplete(
- parentAdapter, searchArg,
+ actionPromptContext, parentAdapter, searchArg,
authenticationSession, deploymentCategory);
}
});
@@ -488,7 +524,10 @@ public class ScalarModel extends EntityModel implements LinksProvider {
public abstract String disable(ScalarModel scalarModel, Where where);
- public abstract String parseAndValidate(ScalarModel scalarModel, String proposedPojoAsStr);
+ public abstract String parseAndValidate(
+ final AccessContext<?> accessContext,
+ ScalarModel scalarModel,
+ String proposedPojoAsStr);
public abstract String validate(ScalarModel scalarModel, ObjectAdapter proposedAdapter);
@@ -513,9 +552,10 @@ public class ScalarModel extends EntityModel implements LinksProvider {
public abstract boolean hasAutoComplete(ScalarModel scalarModel);
public abstract List<ObjectAdapter> getAutoComplete(
- ScalarModel scalarModel,
- String searchArg,
- final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory);
+ final ScalarModel scalarModel,
+ final String searchArg,
+ final AuthenticationSession authenticationSession,
+ final DeploymentCategory deploymentCategory);
public abstract int getAutoCompleteOrChoicesMinLength(ScalarModel scalarModel);
@@ -591,12 +631,16 @@ public class ScalarModel extends EntityModel implements LinksProvider {
private void getAndStore(final ObjectAdapterMemento parentAdapterMemento) {
final OneToOneAssociation property = propertyMemento.getProperty();
+
final ObjectAdapter parentAdapter = parentAdapterMemento.getObjectAdapter(ConcurrencyChecking.CHECK);
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER,
+ parentAdapter);
final ObjectAdapter associatedAdapter =
InteractionUtils.withFiltering(new Callable<ObjectAdapter>() {
@Override
public ObjectAdapter call() throws Exception {
- return property.get(parentAdapter);
+ return property.get(parentAdapter, propertyAccessingContext);
}
});
setObject(associatedAdapter);
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
index 2a5f504..9210a30 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
@@ -29,6 +29,7 @@ import org.apache.isis.applib.RecoverableException;
import org.apache.isis.applib.services.actinvoc.ActionInvocationContext;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.Bulk;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
import org.apache.isis.applib.annotation.InvokedOn;
import org.apache.isis.applib.services.command.Command;
@@ -40,6 +41,7 @@ import org.apache.isis.core.commons.authentication.MessageBroker;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -127,7 +129,10 @@ public final class BulkActionsLinkFactory implements ActionLinkFactory {
bulkInteractionContext.setIndex(i++);
}
- lastReturnedAdapter = objectAction.executeWithRuleChecking(adapter, new ObjectAdapter[]{}, getAuthenticationSession(), ActionModel.WHERE_FOR_ACTION_INVOCATION);
+ final ActionExecutingContext actionExecutingContext = objectAction
+ .createExecutingInteractionContext(getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, adapter, new ObjectAdapter[] {});
+ lastReturnedAdapter = objectAction.executeWithRuleChecking(actionExecutingContext, adapter, new ObjectAdapter[]{}, getAuthenticationSession(), ActionModel.WHERE_FOR_ACTION_INVOCATION);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
index 8b9641c..b44ae21 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
@@ -21,20 +21,25 @@ package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable
import java.util.Iterator;
import java.util.List;
+
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
+
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.model.IModel;
+
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.consent.InteractionResult;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.interactions.AssociationAccessingContext;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.interactions.ObjectVisibilityContext;
import org.apache.isis.core.metamodel.interactions.VisibilityContext;
@@ -145,7 +150,7 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
private VisibilityContext<?> createVisibleInteractionContext(final ObjectAdapter objectAdapter) {
return new ObjectVisibilityContext(
- getDeploymentCategory(),
+ getConfiguration(), getDeploymentCategory(),
getAuthenticationSession(),
InteractionInvocationMethod.BY_USER,
objectAdapter,
@@ -153,13 +158,20 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
Where.ALL_TABLES);
}
- private static Ordering<ObjectAdapter> orderingBy(final ObjectAssociation sortProperty, final boolean ascending) {
+ private Ordering<ObjectAdapter> orderingBy(final ObjectAssociation sortProperty, final boolean ascending) {
final Ordering<ObjectAdapter> ordering = new Ordering<ObjectAdapter>(){
@Override
- public int compare(final ObjectAdapter p, final ObjectAdapter q) {
- final ObjectAdapter pSort = sortProperty.get(p);
- final ObjectAdapter qSort = sortProperty.get(q);
+ public int compare(final ObjectAdapter pAdapter, final ObjectAdapter qAdapter) {
+ final AssociationAccessingContext pAccessingContext = (AssociationAccessingContext) sortProperty
+ .createAccessingInteractionContext(getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, pAdapter);
+ final ObjectAdapter pSort = sortProperty.get(pAdapter, pAccessingContext);
+
+ final AssociationAccessingContext qAccessingContext = (AssociationAccessingContext) sortProperty
+ .createAccessingInteractionContext(getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, qAdapter);
+ final ObjectAdapter qSort = sortProperty.get(qAdapter, qAccessingContext);
Ordering<ObjectAdapter> naturalOrdering =
ascending
? ORDERING_BY_NATURAL.nullsFirst()
@@ -198,5 +210,9 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
return IsisContext.getDeploymentType().getDeploymentCategory();
}
+ protected IsisConfiguration getConfiguration() {
+ return IsisContext.getConfiguration();
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java
index 49be8db..cbf5509 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java
@@ -19,28 +19,34 @@
package org.apache.isis.viewer.wicket.ui.components.collectioncontents.summary;
-import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
-
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Collections;
import java.util.List;
+
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.AbstractItem;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.Model;
+
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.interactions.AssociationAccessingContext;
import org.apache.isis.core.metamodel.spec.ObjectAdapterUtils;
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.wicket.model.models.EntityCollectionModel;
import org.apache.isis.viewer.wicket.ui.components.collection.count.CollectionCountProvider;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
+
/**
* {@link PanelAbstract Panel} that represents a {@link EntityCollectionModel
* collection of entity}s rendered using as a table of summary values with a
@@ -122,7 +128,10 @@ public class CollectionContentsAsSummary extends PanelAbstract<EntityCollectionM
int nonNullCount = 0;
for (ObjectAdapter objectAdapter : adapters) {
titles.add(objectAdapter.titleString(null));
- final ObjectAdapter valueAdapter = numberAssociation.get(objectAdapter);
+ final AssociationAccessingContext associationAccessingContext = (AssociationAccessingContext) numberAssociation
+ .createAccessingInteractionContext(IsisContext.getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, objectAdapter);
+ final ObjectAdapter valueAdapter = numberAssociation.get(objectAdapter, associationAccessingContext);
if (valueAdapter == null) {
values.add(null);
continue;
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 8a394a9..24c12e7 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -357,7 +357,8 @@ public class ReferencePanel extends ScalarPanelAbstract {
private List<ObjectAdapterMemento> obtainChoiceMementos(final ObjectAdapter[] argsIfAvailable) {
final List<ObjectAdapter> choices = Lists.newArrayList();
if(getModel().hasChoices()) {
- choices.addAll(getModel().getChoices(argsIfAvailable, getAuthenticationSession(), getDeploymentCategory()));
+ choices.addAll(
+ getModel().getChoices(argsIfAvailable, getAuthenticationSession(), getDeploymentCategory()));
}
// take a copy otherwise is only lazily evaluated
return Lists.newArrayList(Lists.transform(choices, ObjectAdapterMemento.Functions.fromAdapter()));
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index 69dc4b6..3e31652 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -200,7 +200,7 @@ public class EntityPage extends PageAbstract {
private VisibilityContext<?> createVisibleInteractionContext(final ObjectAdapter objectAdapter) {
return new ObjectVisibilityContext(
- getDeploymentCategory(),
+ getConfiguration(), getDeploymentCategory(),
getAuthenticationSession(),
InteractionInvocationMethod.BY_USER,
objectAdapter,
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
index 08e119f..7685190 100644
--- a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -37,9 +37,11 @@ import org.datanucleus.enhancement.Persistable;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.events.CollectionAccessEvent;
+import org.apache.isis.applib.events.CollectionAccessingEvent;
import org.apache.isis.applib.events.InteractionEvent;
import org.apache.isis.applib.events.ObjectTitleEvent;
import org.apache.isis.applib.events.PropertyAccessEvent;
+import org.apache.isis.applib.events.PropertyAccessingEvent;
import org.apache.isis.applib.events.UsabilityEvent;
import org.apache.isis.applib.events.ValidityEvent;
import org.apache.isis.applib.events.VisibilityEvent;
@@ -61,8 +63,11 @@ import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.consent.InteractionResult;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
+import org.apache.isis.core.metamodel.interactions.CollectionAccessingContext;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.interactions.ObjectTitleContext;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -226,14 +231,18 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
throw new UnsupportedOperationException(String.format("Cannot invoke supporting method for '%s'; use only property accessor/mutator", memberName));
}
- final OneToOneAssociation otoa = (OneToOneAssociation) objectMember;
-
+ final OneToOneAssociation property = (OneToOneAssociation) objectMember;
+ final PropertyAccessingContext propertyAccessingContext = property
+ .createAccessingInteractionContext(getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER,
+ targetAdapter);
+
if (intent == Intent.ACCESSOR) {
- return handleGetterMethodOnProperty(targetAdapter, args, otoa);
+ return handleGetterMethodOnProperty(targetAdapter, args, property, propertyAccessingContext);
}
if (intent == Intent.MODIFY_PROPERTY || intent == Intent.INITIALIZATION) {
- return handleSetterMethodOnProperty(targetAdapter, args, otoa);
+ return handleSetterMethodOnProperty(targetAdapter, args, property, propertyAccessingContext);
}
}
if (objectMember.isOneToManyAssociation()) {
@@ -242,15 +251,19 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
throw new UnsupportedOperationException(String.format("Cannot invoke supporting method '%s'; use only collection accessor/mutator", memberName));
}
- final OneToManyAssociation otma = (OneToManyAssociation) objectMember;
+ final OneToManyAssociation collection = (OneToManyAssociation) objectMember;
+ final CollectionAccessingContext collectionAccessingContext = collection
+ .createAccessingInteractionContext(getAuthenticationSession(),
+ InteractionInvocationMethod.BY_USER, targetAdapter);
if (intent == Intent.ACCESSOR) {
- return handleGetterMethodOnCollection(targetAdapter, args, otma, method, memberName);
+ return handleGetterMethodOnCollection(targetAdapter, args, collection, method, memberName,
+ collectionAccessingContext);
}
if (intent == Intent.MODIFY_COLLECTION_ADD) {
- return handleCollectionAddToMethod(targetAdapter, args, otma);
+ return handleCollectionAddToMethod(targetAdapter, args, collection, collectionAccessingContext);
}
if (intent == Intent.MODIFY_COLLECTION_REMOVE) {
- return handleCollectionRemoveFromMethod(targetAdapter, args, otma);
+ return handleCollectionRemoveFromMethod(targetAdapter, args, collection, collectionAccessingContext);
}
}
@@ -370,32 +383,37 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
private Object handleGetterMethodOnProperty(
final ObjectAdapter targetAdapter,
final Object[] args,
- final OneToOneAssociation otoa) {
+ final OneToOneAssociation property,
+ final PropertyAccessingContext propertyAccessingContext) {
if (args.length != 0) {
throw new IllegalArgumentException("Invoking a 'get' should have no arguments");
}
if(getExecutionMode().shouldEnforceRules()) {
- checkVisibility(targetAdapter, otoa);
+ checkVisibility(targetAdapter, property);
}
resolveIfRequired(targetAdapter);
+ final PropertyAccessingEvent accessingEvent = new PropertyAccessingEvent(getDelegate(), property.getIdentifier());
+ notifyListeners(accessingEvent);
+
final ObjectAdapter currentReferencedAdapter =
executionMode.shouldEnforceRules()
? InteractionUtils.withFiltering(new Callable<ObjectAdapter>() {
- @Override
- public ObjectAdapter call() throws Exception {
- return otoa.get(targetAdapter);
- }
- })
- : otoa.get(targetAdapter);
+ @Override
+ public ObjectAdapter call() throws Exception {
+ return property.get(targetAdapter, propertyAccessingContext);
+ }
+ })
+ : property.get(targetAdapter, propertyAccessingContext);
final Object currentReferencedObj = ObjectAdapter.Util.unwrap(currentReferencedAdapter);
- final PropertyAccessEvent ev = new PropertyAccessEvent(getDelegate(), otoa.getIdentifier(), currentReferencedObj);
- notifyListeners(ev);
+ final PropertyAccessEvent accessedEvent = new PropertyAccessEvent(getDelegate(), property.getIdentifier(), currentReferencedObj);
+ notifyListeners(accessedEvent);
+
return currentReferencedObj;
}
@@ -406,7 +424,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
private Object handleSetterMethodOnProperty(
final ObjectAdapter targetAdapter, final Object[] args,
- final OneToOneAssociation otoa) {
+ final OneToOneAssociation property, final PropertyAccessingContext propertyAccessingContext) {
if (args.length != 1) {
throw new IllegalArgumentException("Invoking a setter should only have a single argument");
}
@@ -414,8 +432,8 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
final Object argumentObj = underlying(args[0]);
if(getExecutionMode().shouldEnforceRules()) {
- checkVisibility(targetAdapter, otoa);
- checkUsability(targetAdapter, otoa);
+ checkVisibility(targetAdapter, property);
+ checkUsability(targetAdapter, property);
}
final ObjectAdapter argumentAdapter = argumentObj != null ? adapterFor(argumentObj) : null;
@@ -424,12 +442,12 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
if(getExecutionMode().shouldEnforceRules()) {
- final InteractionResult interactionResult = otoa.isAssociationValid(targetAdapter, argumentAdapter).getInteractionResult();
+ final InteractionResult interactionResult = property.isAssociationValid(targetAdapter, argumentAdapter).getInteractionResult();
notifyListenersAndVetoIfRequired(interactionResult);
}
if (getExecutionMode().shouldExecute()) {
- otoa.set(targetAdapter, argumentAdapter);
+ property.set(propertyAccessingContext, targetAdapter, argumentAdapter);
}
objectChangedIfRequired(targetAdapter);
@@ -447,7 +465,8 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
final Object[] args,
final OneToManyAssociation otma,
final Method method,
- final String memberName) {
+ final String memberName,
+ final CollectionAccessingContext collectionAccessingContext) {
if (args.length != 0) {
throw new IllegalArgumentException("Invoking a 'get' should have no arguments");
@@ -458,30 +477,33 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
}
resolveIfRequired(targetAdapter);
+ final CollectionAccessingEvent accessingEvent = collectionAccessingContext.createInteractionEvent();
+ notifyListeners(accessingEvent);
+
final ObjectAdapter currentReferencedAdapter =
executionMode.shouldEnforceRules()
? InteractionUtils.withFiltering(new Callable<ObjectAdapter>() {
- @Override
- public ObjectAdapter call() throws Exception {
- return otma.get(targetAdapter);
- }
- })
- : otma.get(targetAdapter);
+ @Override
+ public ObjectAdapter call() throws Exception {
+ return otma.get(targetAdapter, collectionAccessingContext);
+ }
+ })
+ : otma.get(targetAdapter, collectionAccessingContext);
final Object currentReferencedObj = ObjectAdapter.Util.unwrap(currentReferencedAdapter);
- final CollectionAccessEvent ev = new CollectionAccessEvent(getDelegate(), otma.getIdentifier());
+ final CollectionAccessEvent accessedEvent = new CollectionAccessEvent(getDelegate(), otma.getIdentifier());
if (currentReferencedObj instanceof Collection) {
final Collection<?> collectionViewObject = lookupWrappingObject(method, memberName,
(Collection<?>) currentReferencedObj, otma);
- notifyListeners(ev);
+ notifyListeners(accessedEvent);
return collectionViewObject;
} else if (currentReferencedObj instanceof Map) {
final Map<?, ?> mapViewObject = lookupWrappingObject(memberName, (Map<?, ?>) currentReferencedObj,
otma);
- notifyListeners(ev);
+ notifyListeners(accessedEvent);
return mapViewObject;
}
throw new IllegalArgumentException(String.format("Collection type '%s' not supported by framework", currentReferencedObj.getClass().getName()));
@@ -513,7 +535,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
private Object handleCollectionAddToMethod(
final ObjectAdapter targetAdapter,
final Object[] args,
- final OneToManyAssociation otma) {
+ final OneToManyAssociation otma, final CollectionAccessingContext collectionAccessingContext) {
if (args.length != 1) {
throw new IllegalArgumentException("Invoking a addTo should only have a single argument");
@@ -538,7 +560,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
}
if (getExecutionMode().shouldExecute()) {
- otma.addElement(targetAdapter, argumentNO);
+ otma.addElement(collectionAccessingContext, targetAdapter, argumentNO);
}
objectChangedIfRequired(targetAdapter);
@@ -554,7 +576,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
private Object handleCollectionRemoveFromMethod(
final ObjectAdapter targetAdapter,
final Object[] args,
- final OneToManyAssociation otma) {
+ final OneToManyAssociation otma, final CollectionAccessingContext collectionAccessingContext) {
if (args.length != 1) {
throw new IllegalArgumentException("Invoking a removeFrom should only have a single argument");
}
@@ -579,7 +601,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
}
if (getExecutionMode().shouldExecute()) {
- otma.removeElement(targetAdapter, argumentAdapter);
+ otma.removeElement(collectionAccessingContext, targetAdapter, argumentAdapter);
}
objectChangedIfRequired(targetAdapter);
@@ -638,17 +660,20 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
}
if (getExecutionMode().shouldExecute()) {
- final ObjectAdapter actionReturnNO =
+
+ final ActionExecutingContext actionExecutingContext = objectAction.createExecutingInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER, targetAdapter, argAdapters);
+
+ final ObjectAdapter actionResultAdapter =
executionMode.shouldEnforceRules()
? InteractionUtils.withFiltering(new Callable<ObjectAdapter>() {
- @Override
- public ObjectAdapter call() throws Exception {
- return objectAction.execute(targetAdapter, argAdapters);
- }
- })
- : objectAction.execute(targetAdapter, argAdapters);;
-
- return ObjectAdapter.Util.unwrap(actionReturnNO);
+ @Override
+ public ObjectAdapter call() throws Exception {
+ return objectAction.execute(actionExecutingContext, targetAdapter, argAdapters);
+ }
+ })
+ : objectAction.execute(actionExecutingContext, targetAdapter, argAdapters);;
+
+ return ObjectAdapter.Util.unwrap(actionResultAdapter);
}
objectChangedIfRequired(targetAdapter);
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
index 6a4c2ec..efc0921 100644
--- a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
@@ -115,8 +115,9 @@ public abstract class WrapperFactoryAbstractTest_wrappedObject {
@Before
public void setUp() {
- objectMemberContext = new ObjectMemberContext(DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider,
- mockSpecificationLoader, mockAdapterManager, mockQuerySubmitter, mockServicesProvider);
+ objectMemberContext = new ObjectMemberContext(mockConfiguration, DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider,
+ mockSpecificationLoader, mockAdapterManager, mockQuerySubmitter, mockServicesProvider
+ );
employeeRepository = new EmployeeRepositoryImpl();
http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java
index 3953877..ce05a28 100644
--- a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java
@@ -23,12 +23,14 @@ import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+
import org.jmock.Expectations;
import org.jmock.auto.Mock;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
+
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.events.PropertyModifyEvent;
@@ -50,6 +52,7 @@ import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstractAlwaysEverywhere;
import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor;
import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaSetterMethod;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
@@ -226,13 +229,15 @@ public abstract class WrapperFactoryAbstractTest_wrappedObject_transient {
}
});
+ final PropertyAccessingContext propertyAccessingContext = null; // TODO
+
facets = Arrays.asList((Facet)new PropertySetterFacetViaSetterMethod(setPasswordMethod, mockPasswordMember));
context.checking(new Expectations() {
{
allowing(mockPasswordMember).getFacets(with(any(Filter.class)));
will(returnValue(facets));
- oneOf(mockPasswordMember).set(mockEmployeeAdapter, mockPasswordAdapter);
+ oneOf(mockPasswordMember).set(propertyAccessingContext, mockEmployeeAdapter, mockPasswordAdapter);
}
});
@@ -241,6 +246,7 @@ public abstract class WrapperFactoryAbstractTest_wrappedObject_transient {
// and given
+
facets = Arrays.asList((Facet)new PropertyAccessorFacetViaAccessor(getPasswordMethod, mockPasswordMember,
mockAdapterManager, mockSpecificationLoader, mockConfiguration));
context.checking(new Expectations() {
@@ -248,7 +254,7 @@ public abstract class WrapperFactoryAbstractTest_wrappedObject_transient {
allowing(mockPasswordMember).getFacets(with(any(Filter.class)));
will(returnValue(facets));
- oneOf(mockPasswordMember).get(mockEmployeeAdapter);
+ oneOf(mockPasswordMember).get(mockEmployeeAdapter, propertyAccessingContext);
will(returnValue(mockPasswordAdapter));
}
});