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 18:30:20 UTC
[5/9] 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/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyModifyContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyModifyContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyModifyContext.java
deleted file mode 100644
index a8d6b1d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyModifyContext.java
+++ /dev/null
@@ -1,60 +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.metamodel.interactions;
-
-import static org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util.unwrap;
-
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.events.PropertyModifyEvent;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.InteractionContextType;
-import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-
-/**
- * See {@link InteractionContext} for overview; analogous to
- * {@link PropertyModifyEvent}.
- */
-public class PropertyModifyContext extends ValidityContext<PropertyModifyEvent> implements ProposedHolder {
-
- private final ObjectAdapter proposed;
-
- public PropertyModifyContext(DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter target, final Identifier id, final ObjectAdapter proposed) {
- super(InteractionContextType.PROPERTY_MODIFY, deploymentCategory, session, invocationMethod, id, target);
-
- this.proposed = proposed;
- }
-
- /**
- * The (proposed) new value for a property.
- */
- @Override
- public ObjectAdapter getProposed() {
- return proposed;
- }
-
- @Override
- public PropertyModifyEvent createInteractionEvent() {
- return new PropertyModifyEvent(unwrap(getTarget()), getIdentifier(), unwrap(getProposed()));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyUsabilityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyUsabilityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyUsabilityContext.java
index 5d93ade..db83021 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyUsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyUsabilityContext.java
@@ -19,26 +19,33 @@
package org.apache.isis.core.metamodel.interactions;
-import static org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util.unwrap;
-
-
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.events.PropertyUsabilityEvent;
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.InteractionContextType;
import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import static org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util.unwrap;
+
/**
* See {@link InteractionContext} for overview; analogous to
* {@link PropertyUsabilityEvent}.
*/
public class PropertyUsabilityContext extends UsabilityContext<PropertyUsabilityEvent> {
- public PropertyUsabilityContext(DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter target, final Identifier identifier, Where where) {
- super(InteractionContextType.PROPERTY_USABLE, deploymentCategory, session, invocationMethod, identifier, target, where);
+ public PropertyUsabilityContext(
+ final IsisConfiguration isisConfiguration,
+ final DeploymentCategory deploymentCategory,
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final ObjectAdapter target,
+ final Identifier identifier,
+ Where where) {
+ super(InteractionContextType.PROPERTY_USABLE, isisConfiguration, deploymentCategory, session, invocationMethod, identifier, target, where);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyValidityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyValidityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyValidityContext.java
new file mode 100644
index 0000000..20d600e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyValidityContext.java
@@ -0,0 +1,75 @@
+/*
+ * 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.metamodel.interactions;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.events.PropertyModifyEvent;
+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.InteractionContextType;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+
+import static org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util.unwrap;
+
+/**
+ * See {@link InteractionContext} for overview; analogous to
+ * {@link PropertyModifyEvent}.
+ */
+public class PropertyValidityContext extends ValidityContext<PropertyModifyEvent> implements ProposedHolder {
+
+ private final OneToOneAssociation property;
+ private final ObjectAdapter proposed;
+
+ public PropertyValidityContext(
+ final OneToOneAssociation property,
+ final IsisConfiguration isisConfiguration,
+ final DeploymentCategory deploymentCategory,
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final ObjectAdapter target,
+ final Identifier id,
+ final ObjectAdapter proposed) {
+ super(InteractionContextType.PROPERTY_MODIFY, isisConfiguration, deploymentCategory, session, invocationMethod, id, target);
+ this.property = property;
+
+ this.proposed = proposed;
+ }
+
+ public OneToOneAssociation getProperty() {
+ return property;
+ }
+
+ /**
+ * The (proposed) new value for a property.
+ */
+ @Override
+ public ObjectAdapter getProposed() {
+ return proposed;
+ }
+
+ @Override
+ public PropertyModifyEvent createInteractionEvent() {
+ return new PropertyModifyEvent(unwrap(getTarget()), getIdentifier(), unwrap(getProposed()));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyVisibilityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyVisibilityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyVisibilityContext.java
index 78f2412..9095162 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyVisibilityContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.events.PropertyVisibilityEvent;
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.InteractionContextType;
import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
@@ -36,8 +37,15 @@ import static org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util.unwrap;
*/
public class PropertyVisibilityContext extends VisibilityContext<PropertyVisibilityEvent> {
- public PropertyVisibilityContext(DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter target, final Identifier identifier, Where where) {
- super(InteractionContextType.PROPERTY_VISIBLE, deploymentCategory, session, invocationMethod, identifier, target, where);
+ public PropertyVisibilityContext(
+ final IsisConfiguration isisConfiguration,
+ final DeploymentCategory deploymentCategory,
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final ObjectAdapter target,
+ final Identifier identifier,
+ Where where) {
+ super(InteractionContextType.PROPERTY_VISIBLE, isisConfiguration, deploymentCategory, session, invocationMethod, identifier, target, where);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ProposedHolder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ProposedHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ProposedHolder.java
index 9f85aa7..9f87598 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ProposedHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ProposedHolder.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
* easier for facets to process multiple at the same time.
*
* <p>
- * Where this is used most often is for {@link PropertyModifyContext} and
+ * Where this is used most often is for {@link PropertyValidityContext} and
* {@link ActionArgumentContext}, where a {@link Facet} (such as
* <tt>MandatoryFacet</tt> or <tt>MaxLengthFacet</tt>) would want to perform the
* same checks on the {@link #getProposed() proposed} value/argument.
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/UsabilityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/UsabilityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/UsabilityContext.java
index ab0bf2d..b6de2ad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/UsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/UsabilityContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.events.UsabilityEvent;
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.InteractionContextType;
import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
@@ -36,8 +37,16 @@ public abstract class UsabilityContext<T extends UsabilityEvent> extends Interac
private final Where where;
- public UsabilityContext(final InteractionContextType interactionType, DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final Identifier identifier, final ObjectAdapter target, final Where where) {
- super(interactionType, deploymentCategory, session, invocationMethod, identifier, target);
+ public UsabilityContext(
+ final InteractionContextType interactionType,
+ final IsisConfiguration isisConfiguration,
+ final DeploymentCategory deploymentCategory,
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final Identifier identifier,
+ final ObjectAdapter target,
+ final Where where) {
+ super(interactionType, isisConfiguration, deploymentCategory, session, invocationMethod, identifier, target);
this.where = where;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ValidityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ValidityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ValidityContext.java
index 4a682fe..be527cc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ValidityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ValidityContext.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.metamodel.interactions;
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.events.ValidityEvent;
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.InteractionContextType;
import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
@@ -33,8 +34,15 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
*/
public abstract class ValidityContext<T extends ValidityEvent> extends InteractionContext<T> {
- public ValidityContext(final InteractionContextType interactionType, DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final Identifier identifier, final ObjectAdapter target) {
- super(interactionType, deploymentCategory, session, invocationMethod, identifier, target);
+ public ValidityContext(
+ final InteractionContextType interactionType,
+ final IsisConfiguration isisConfiguration,
+ final DeploymentCategory deploymentCategory,
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final Identifier identifier,
+ final ObjectAdapter target) {
+ super(interactionType, isisConfiguration, deploymentCategory, session, invocationMethod, identifier, target);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/VisibilityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/VisibilityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/VisibilityContext.java
index 81935ab..f07dc2f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/VisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/VisibilityContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.events.VisibilityEvent;
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.InteractionContextType;
import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
@@ -38,13 +39,14 @@ public abstract class VisibilityContext<T extends VisibilityEvent> extends Inter
public VisibilityContext(
final InteractionContextType interactionType,
+ final IsisConfiguration isisConfiguration,
final DeploymentCategory deploymentCategory,
final AuthenticationSession session,
final InteractionInvocationMethod invocationMethod,
final Identifier identifier,
final ObjectAdapter target,
final Where where) {
- super(interactionType, deploymentCategory, session, invocationMethod, identifier, target);
+ super(interactionType, isisConfiguration, deploymentCategory, session, invocationMethod, identifier, target);
this.where = where;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
index 57dea94..bdcbb5b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
import org.apache.isis.core.commons.components.Injectable;
+import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
import org.apache.isis.core.metamodel.adapter.LocalizationProvider;
import org.apache.isis.core.metamodel.adapter.ObjectDirtier;
@@ -40,6 +41,8 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoader;
*/
public interface RuntimeContext extends Injectable, ApplicationScopedComponent {
+ public IsisConfiguration getConfiguration();
+
public DeploymentCategory getDeploymentCategory();
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index 314f91e..e5582b5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -27,6 +27,8 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAbstract;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.adapter.*;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
@@ -43,6 +45,7 @@ import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
+ private final IsisConfiguration configuration;
private final DeploymentCategory deploymentCategory;
private final ServicesInjector servicesInjector;
private final AuthenticationSessionProviderAbstract authenticationSessionProvider;
@@ -57,8 +60,15 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
public RuntimeContextNoRuntime() {
this(DeploymentCategory.PRODUCTION);
}
-
- public RuntimeContextNoRuntime(DeploymentCategory deploymentCategory) {
+
+ public RuntimeContextNoRuntime(final DeploymentCategory deploymentCategory) {
+ this(new IsisConfigurationDefault(), deploymentCategory);
+ }
+
+ public RuntimeContextNoRuntime(
+ final IsisConfiguration isisConfiguration,
+ final DeploymentCategory deploymentCategory) {
+ this.configuration = isisConfiguration;
this.deploymentCategory = deploymentCategory;
// Unlike most of the methods in this implementation, does nothing
// (because this will always be called, even in a no-runtime context).
@@ -305,6 +315,11 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
// ///////////////////////////////////////////
@Override
+ public IsisConfiguration getConfiguration() {
+ return configuration;
+ }
+
+ @Override
public DeploymentCategory getDeploymentCategory() {
return deploymentCategory;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
index 30fd6f3..4fc4a52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
@@ -17,12 +17,14 @@
package org.apache.isis.core.metamodel.spec;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.adapter.ServicesProvider;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
public class SpecificationContext {
+ private final IsisConfiguration isisConfiguration;
private final DeploymentCategory deploymentCategory;
private final AuthenticationSessionProvider authenticationSessionProvider;
private final ServicesProvider servicesProvider;
@@ -31,12 +33,14 @@ public class SpecificationContext {
private final FacetProcessor facetProcessor;
public SpecificationContext(
- final DeploymentCategory deploymentCategory,
- final AuthenticationSessionProvider authenticationSessionProvider,
- final ServicesProvider servicesProvider,
- final ObjectInstantiator objectInstantiator,
+ final IsisConfiguration isisConfiguration,
+ final DeploymentCategory deploymentCategory,
+ final AuthenticationSessionProvider authenticationSessionProvider,
+ final ServicesProvider servicesProvider,
+ final ObjectInstantiator objectInstantiator,
final SpecificationLoader specificationLoader,
final FacetProcessor facetProcessor) {
+ this.isisConfiguration = isisConfiguration;
this.deploymentCategory = deploymentCategory;
this.authenticationSessionProvider = authenticationSessionProvider;
this.servicesProvider = servicesProvider;
@@ -45,6 +49,10 @@ public class SpecificationContext {
this.facetProcessor = facetProcessor;
}
+ public IsisConfiguration getConfiguration() {
+ return isisConfiguration;
+ }
+
public DeploymentCategory getDeploymentCategory() {
return deploymentCategory;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/CurrentHolder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/CurrentHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/CurrentHolder.java
index 3389610..2381a67 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/CurrentHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/CurrentHolder.java
@@ -21,6 +21,9 @@ package org.apache.isis.core.metamodel.spec.feature;
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.interactions.AccessContext;
+import org.apache.isis.core.metamodel.interactions.InteractionContext;
/**
* Mix-in interface for {@link ObjectFeature}s that reference or otherwise
@@ -31,7 +34,15 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
* {@link OneToManyAssociation collection}s and {@link OneToOneActionParameter
* action parameter}s (but not {@link ObjectAction action}s themselves).
*/
-public interface CurrentHolder {
+public interface CurrentHolder<T extends AccessContext<?>> {
+
+ /**
+ * Creates an {@link InteractionContext} that represents access to this association.
+ */
+ public T createAccessingInteractionContext(
+ AuthenticationSession session,
+ InteractionInvocationMethod interactionMethod,
+ ObjectAdapter targetObjectAdapter);
/**
* Returns the referenced {@link ObjectAdapter} for the owning
@@ -41,6 +52,6 @@ public interface CurrentHolder {
* For example, if this is an {@link OneToOneAssociation}, then returns the
* referenced object.
*/
- ObjectAdapter get(final ObjectAdapter owner);
+ ObjectAdapter get(final ObjectAdapter owner, final T accessingContext);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/MutableCurrentHolder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/MutableCurrentHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/MutableCurrentHolder.java
index 0487c32..8a275ef 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/MutableCurrentHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/MutableCurrentHolder.java
@@ -20,6 +20,7 @@
package org.apache.isis.core.metamodel.spec.feature;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.interactions.AccessContext;
/**
* Mix-in interface for {@link ObjectAction}s that reference or otherwise
@@ -31,7 +32,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
* {@link ObjectAction action}s themselves) nor {@link OneToManyAssociation
* collection}s.
*/
-public interface MutableCurrentHolder extends CurrentHolder {
+public interface MutableCurrentHolder<T extends AccessContext<?>> extends CurrentHolder<T> {
/**
* Updates the referenced {@link ObjectAdapter} for the owning
@@ -41,11 +42,11 @@ public interface MutableCurrentHolder extends CurrentHolder {
* <p>
* For example, if this is a {@link OneToOneAssociation}, then updates the
* object referenced .
- *
+ *
+ * @param accessingContext
* @param owner
* @param newValue
- * - the new value, or <tt>null</tt>
*/
- void set(final ObjectAdapter owner, final ObjectAdapter newValue);
+ void set(final T accessingContext, final ObjectAdapter owner, final ObjectAdapter newValue);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index ea308cf..21fd6e9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -19,12 +19,15 @@ package org.apache.isis.core.metamodel.spec.feature;
import java.util.List;
+import com.google.common.base.Functions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.ActionSemantics;
import org.apache.isis.applib.annotation.Bulk;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.applib.value.Blob;
@@ -34,6 +37,7 @@ import org.apache.isis.core.commons.lang.StringFunctions;
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.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetFilters;
import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
@@ -41,19 +45,17 @@ import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFace
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
import org.apache.isis.core.metamodel.facets.object.wizard.WizardFacet;
import org.apache.isis.core.metamodel.interactions.AccessContext;
-import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
+import org.apache.isis.core.metamodel.interactions.ActionValidityContext;
import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-
public interface ObjectAction extends ObjectMember {
// //////////////////////////////////////////////////////
@@ -99,11 +101,32 @@ public interface ObjectAction extends ObjectMember {
// //////////////////////////////////////////////////////////////////
/**
+ * Creates an {@link ActionPromptContext interaction context}
+ * representing the prompting of arguments for this action (defaults, choices, auto-complete).
+ */
+ public ActionPromptContext createPromptInteractionContext(
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final ObjectAdapter targetObject);
+
+
+ /**
+ * Creates an {@link ActionExecutingContext interaction context}
+ * representing the invoking (pre-execute) this action.
+ */
+ public ActionExecutingContext createExecutingInteractionContext(
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final ObjectAdapter targetObject,
+ final ObjectAdapter[] arguments);
+
+
+ /**
* Invokes the action's method on the target object given the specified set
* of parameters, checking the visibility, usability and validity first.
*/
ObjectAdapter executeWithRuleChecking(
- final ObjectAdapter target,
+ final ActionExecutingContext actionExecutingContext, final ObjectAdapter target,
final ObjectAdapter[] parameters,
final AuthenticationSession authenticationSession,
final Where where) throws AuthorizationException;
@@ -112,14 +135,17 @@ public interface ObjectAction extends ObjectMember {
* Invokes the action's method on the target object given the specified set
* of parameters.
*/
- ObjectAdapter execute(ObjectAdapter target, ObjectAdapter[] parameters);
+ ObjectAdapter execute(
+ final ActionExecutingContext actionExecutingContext,
+ ObjectAdapter target,
+ ObjectAdapter[] parameters);
// //////////////////////////////////////////////////////////////////
// valid
// //////////////////////////////////////////////////////////////////
-/**
- * Creates an {@link ActionInvocationContext interaction context}
+ /**
+ * Creates an {@link ActionValidityContext interaction context}
* representing an attempt to invoke this action.
*
* <p>
@@ -131,7 +157,8 @@ public interface ObjectAction extends ObjectMember {
* interactions (such as {@link AccessContext} accesses) have no
* corresponding vetoing methods.
*/
- public ActionInvocationContext createActionInvocationInteractionContext(AuthenticationSession session,
+ public ActionValidityContext createValidityInteractionContext(
+ AuthenticationSession session,
InteractionInvocationMethod invocationMethod, ObjectAdapter targetObject, ObjectAdapter[] proposedArguments);
/**
@@ -195,7 +222,8 @@ public interface ObjectAction extends ObjectMember {
* the user can choose from.
*/
ObjectAdapter[][] getChoices(
- ObjectAdapter target,
+ final ActionPromptContext actionPromptContext,
+ final ObjectAdapter target,
final AuthenticationSession authenticationSession,
final DeploymentCategory deploymentCategory);
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
index 54a3b8c..14766ff 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
@@ -29,11 +29,13 @@ import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
import org.apache.isis.core.metamodel.interactions.ActionArgumentContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
+import org.apache.isis.core.metamodel.interactions.ParameterAccessingContext;
/**
* Analogous to {@link ObjectAssociation}.
*/
-public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
+public interface ObjectActionParameter extends ObjectFeature, CurrentHolder<ParameterAccessingContext> {
/**
* If true then can cast to a {@link OneToOneActionParameter}.
@@ -102,6 +104,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
* user can choose from, based on the input search argument.
*/
ObjectAdapter[] getAutoComplete(
+ final ActionPromptContext actionPromptContext,
final ObjectAdapter adapter,
final String searchArg,
final AuthenticationSession authenticationSession,
@@ -121,6 +124,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
* user can choose from.
*/
ObjectAdapter[] getChoices(
+ final ActionPromptContext actionPromptContext,
final ObjectAdapter adapter,
final ObjectAdapter[] argumentsIfAvailable,
final AuthenticationSession authenticationSession,
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
index dd69917..16337b0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
@@ -38,12 +38,13 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
+import org.apache.isis.core.metamodel.interactions.AssociationAccessingContext;
import org.apache.isis.core.metamodel.specloader.specimpl.ContributeeMember;
/**
* Provides reflective access to a field on a domain object.
*/
-public interface ObjectAssociation extends ObjectMember, CurrentHolder {
+public interface ObjectAssociation<T extends AssociationAccessingContext<?>> extends ObjectMember, CurrentHolder<T> {
/**
* Returns the referenced {@link ObjectAdapter} for the owning
@@ -53,7 +54,7 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
* For example, if this is an {@link OneToOneAssociation}, then returns the
* referenced object.
*/
- ObjectAdapter get(final ObjectAdapter owner);
+ ObjectAdapter get(final ObjectAdapter owner, final T associationAccessingContext);
/**
* Get the name for the business key, if one has been specified.
@@ -80,7 +81,8 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
* user can choose from.
*/
public ObjectAdapter[] getChoices(
- ObjectAdapter object,
+ final T associationAccessingContext,
+ final ObjectAdapter objectAdapter,
final AuthenticationSession authenticationSession,
final DeploymentCategory deploymentCategory);
@@ -95,7 +97,8 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
* user can choose from, based on the provided search argument.
*/
public ObjectAdapter[] getAutoComplete(
- final ObjectAdapter object,
+ final T associationAccessingContext,
+ final ObjectAdapter objectAdapter,
final String searchArg,
final AuthenticationSession authenticationSession,
final DeploymentCategory deploymentCategory);
@@ -112,7 +115,7 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
* Returns <code>true</code> if this field on the specified object is deemed
* to be empty, or has no content.
*/
- boolean isEmpty(ObjectAdapter target);
+ boolean isEmpty(ObjectAdapter target, final T accessingContext);
/**
* Determines if this field must be complete before the object is in a valid
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
index 71f74f7..3b76f5a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
@@ -72,7 +72,11 @@ public interface ObjectMember extends ObjectFeature {
* provided as API for symmetry with interactions (such as
* {@link AccessContext} accesses) have no corresponding vetoing methods.
*/
- VisibilityContext<?> createVisibleInteractionContext(AuthenticationSession session, InteractionInvocationMethod invocationMethod, ObjectAdapter targetObjectAdapter, Where where);
+ VisibilityContext<?> createVisibleInteractionContext(
+ AuthenticationSession session,
+ InteractionInvocationMethod invocationMethod,
+ ObjectAdapter targetObjectAdapter,
+ Where where);
/**
* Determines if this member is visible, represented as a {@link Consent}.
@@ -97,7 +101,11 @@ public interface ObjectMember extends ObjectFeature {
* provided as API for symmetry with interactions (such as
* {@link AccessContext} accesses) have no corresponding vetoing methods.
*/
- UsabilityContext<?> createUsableInteractionContext(AuthenticationSession session, InteractionInvocationMethod invocationMethod, ObjectAdapter target, Where where);
+ UsabilityContext<?> createUsableInteractionContext(
+ AuthenticationSession session,
+ InteractionInvocationMethod invocationMethod,
+ ObjectAdapter target,
+ Where where);
/**
* Determines whether this member is usable, represented as a
@@ -158,7 +166,7 @@ public interface ObjectMember extends ObjectFeature {
*
* <p>
* For the former case, is thrown by
- * {@link ObjectAction#executeWithRuleChecking(org.apache.isis.core.metamodel.adapter.ObjectAdapter, org.apache.isis.core.metamodel.adapter.ObjectAdapter[], org.apache.isis.core.commons.authentication.AuthenticationSession, org.apache.isis.applib.annotation.Where)}
+ * {@link ObjectAction#executeWithRuleChecking(org.apache.isis.core.metamodel.interactions.ActionExecutingContext, ObjectAdapter, ObjectAdapter[], AuthenticationSession, Where)}
* when the action being executed is not visible or not usable for the specified session. One reason this
* might occur if there was an attempt to construct a URL (eg a bookmarked action) and invoke in an unauthenticated session.
* </p>
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
index 076c6b6..3f2f621 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
@@ -17,6 +17,7 @@
package org.apache.isis.core.metamodel.spec.feature;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
import org.apache.isis.core.metamodel.adapter.ServicesProvider;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -25,6 +26,7 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoader;
public class ObjectMemberContext {
+ private final IsisConfiguration isisConfiguration;
private final DeploymentCategory deploymentCategory;
private final AuthenticationSessionProvider authenticationSessionProvider;
private final SpecificationLoader specificationLoader;
@@ -33,6 +35,7 @@ public class ObjectMemberContext {
private final ServicesProvider servicesProvider;
public ObjectMemberContext(
+ final IsisConfiguration isisConfiguration,
final DeploymentCategory deploymentCategory,
final AuthenticationSessionProvider authenticationSessionProvider,
final SpecificationLoader specificationLoader,
@@ -40,6 +43,7 @@ public class ObjectMemberContext {
final QuerySubmitter querySubmitter,
final ServicesProvider servicesProvider) {
+ this.isisConfiguration = isisConfiguration;
this.deploymentCategory = deploymentCategory;
this.authenticationSessionProvider = authenticationSessionProvider;
this.specificationLoader = specificationLoader;
@@ -49,6 +53,10 @@ public class ObjectMemberContext {
this.servicesProvider = servicesProvider;
}
+ public IsisConfiguration getConfiguration() {
+ return isisConfiguration;
+ }
+
public DeploymentCategory getDeploymentCategory() {
return deploymentCategory;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
index 0abc308..469493a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
@@ -24,10 +24,23 @@ 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.AccessContext;
+import org.apache.isis.core.metamodel.interactions.CollectionAccessingContext;
import org.apache.isis.core.metamodel.interactions.InteractionContext;
import org.apache.isis.core.metamodel.interactions.ValidityContext;
-public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeature {
+public interface OneToManyAssociation extends ObjectAssociation<CollectionAccessingContext> , OneToManyFeature {
+
+
+
+ /**
+ * Creates an {@link InteractionContext} that represents access to this
+ * property.
+ */
+ public CollectionAccessingContext createAccessingInteractionContext(
+ AuthenticationSession session,
+ InteractionInvocationMethod interactionMethod,
+ ObjectAdapter targetObjectAdapter);
+
// /////////////////////////////////////////////////////////////
// add
@@ -43,17 +56,21 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
* provided as API for symmetry with interactions (such as
* {@link AccessContext} accesses) have no corresponding vetoing methods.
*/
- public ValidityContext<?> createValidateAddInteractionContext(AuthenticationSession session, InteractionInvocationMethod invocationMethod, ObjectAdapter owningObjectAdapter, ObjectAdapter proposedObjectToAdd);
+ public ValidityContext<?> createValidatingAddInteractionContext(
+ AuthenticationSession session,
+ InteractionInvocationMethod invocationMethod,
+ ObjectAdapter owningObjectAdapter,
+ ObjectAdapter proposedObjectToAdd);
/**
* Determines if the specified element can be added to the collection field,
* represented as a {@link Consent}.
*
* <p>
- * If allowed the {@link #addElement(ObjectAdapter, ObjectAdapter) add}
+ * If allowed the {@link #addElement(CollectionAccessingContext, ObjectAdapter, ObjectAdapter) add}
* method can be called with the same parameters.
*
- * @see #addElement(ObjectAdapter, ObjectAdapter)
+ * @see #addElement(CollectionAccessingContext, ObjectAdapter, ObjectAdapter)
*/
Consent isValidToAdd(ObjectAdapter owningObjectAdapter, ObjectAdapter proposedObjectToAdd);
@@ -67,7 +84,10 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
*
* @see #isValidToAdd(ObjectAdapter, ObjectAdapter)
*/
- void addElement(ObjectAdapter owningObjectAdapter, ObjectAdapter objectToAdd);
+ void addElement(
+ final CollectionAccessingContext collectionAccessingContext,
+ ObjectAdapter owningObjectAdapter,
+ ObjectAdapter objectToAdd);
// /////////////////////////////////////////////////////////////
// remove
@@ -83,17 +103,21 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
* provided as API for symmetry with interactions (such as
* {@link AccessContext} accesses) have no corresponding vetoing methods.
*/
- ValidityContext<?> createValidateRemoveInteractionContext(AuthenticationSession session, InteractionInvocationMethod invocationMethod, ObjectAdapter owningObjectAdapter, ObjectAdapter proposedObjectToRemove);
+ ValidityContext<?> createValidatingRemoveInteractionContext(
+ AuthenticationSession session,
+ InteractionInvocationMethod invocationMethod,
+ ObjectAdapter owningObjectAdapter,
+ ObjectAdapter proposedObjectToRemove);
/**
* Determines if the specified element can be removed from the collection
* field, represented as a {@link Consent}.
*
* <p>
- * If allowed the {@link #removeElement(ObjectAdapter, ObjectAdapter)
+ * If allowed the {@link #removeElement(CollectionAccessingContext, ObjectAdapter, ObjectAdapter)
* remove} method can be called with the same parameters.
*
- * @see #removeElement(ObjectAdapter, ObjectAdapter)
+ * @see #removeElement(CollectionAccessingContext, ObjectAdapter, ObjectAdapter)
*/
Consent isValidToRemove(ObjectAdapter owningObjectAdapter, ObjectAdapter proposedObjectToRemove);
@@ -107,7 +131,10 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
*
* @see #isValidToRemove(ObjectAdapter, ObjectAdapter)
*/
- void removeElement(ObjectAdapter owningObjectAdapter, ObjectAdapter oObjectToRemove);
+ void removeElement(
+ final CollectionAccessingContext collectionAccessingContext,
+ ObjectAdapter owningObjectAdapter,
+ ObjectAdapter objectToRemove);
// /////////////////////////////////////////////////////////////
// clear
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
index 0d8fcce..104d229 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.interactions.AccessContext;
import org.apache.isis.core.metamodel.interactions.InteractionContext;
-import org.apache.isis.core.metamodel.interactions.PropertyAccessContext;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
import org.apache.isis.core.metamodel.interactions.ValidityContext;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -35,7 +35,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
* Provides reflective access to a field on a domain object that is used to
* reference another domain object.
*/
-public interface OneToOneAssociation extends ObjectAssociation, OneToOneFeature, MutableCurrentHolder {
+public interface OneToOneAssociation extends ObjectAssociation<PropertyAccessingContext>, OneToOneFeature, MutableCurrentHolder<PropertyAccessingContext> {
/**
* Initialise this field in the specified object with the specified
@@ -47,19 +47,12 @@ public interface OneToOneAssociation extends ObjectAssociation, OneToOneFeature,
void initAssociation(ObjectAdapter inObject, ObjectAdapter associate);
/**
- * Creates an {@link InteractionContext} that represents access to this
- * property.
- */
- public PropertyAccessContext createAccessInteractionContext(AuthenticationSession session, InteractionInvocationMethod interactionMethod, ObjectAdapter targetObjectAdapter);
-
- /**
* Creates an {@link InteractionContext} that represents validation of a
* proposed new value for the property.
*
* <p>
* Typically it is easier to just call
- * {@link #isAssociationValid(ObjectAdapter, ObjectAdapter)} or
- * {@link #isAssociationValidResult(ObjectAdapter, ObjectAdapter)}; this is
+ * {@link #isAssociationValid(ObjectAdapter, ObjectAdapter)}; this is
* provided as API for symmetry with interactions (such as
* {@link AccessContext} accesses) have no corresponding vetoing methods.
*/
@@ -79,21 +72,26 @@ public interface OneToOneAssociation extends ObjectAssociation, OneToOneFeature,
* object to this logical state the <code>initAssociation</code> method
* should be used on each of the objects.
*
- * @deprecated - see {@link #set(ObjectAdapter, ObjectAdapter)}
+ * @deprecated - see {@link MutableCurrentHolder#set(AccessContext, ObjectAdapter, ObjectAdapter)}
* @see #initAssociation(ObjectAdapter, ObjectAdapter)
*/
@Deprecated
- void setAssociation(ObjectAdapter inObject, ObjectAdapter associate);
+ void setAssociation(
+ final PropertyAccessingContext propertyAccessingContext,
+ final ObjectAdapter inObject,
+ final ObjectAdapter associate);
/**
* Clear this reference field (make it <code>null</code>) in the specified
* object, and remove any association back-link.
*
- * @see #setAssociation(ObjectAdapter, ObjectAdapter)
- * @deprecated - see {@link #set(ObjectAdapter, ObjectAdapter)}
+ * @see #setAssociation(PropertyAccessingContext, ObjectAdapter, ObjectAdapter)
+ * @deprecated - see {@link MutableCurrentHolder#set(AccessContext, ObjectAdapter, ObjectAdapter)}
*/
@Deprecated
- void clearAssociation(ObjectAdapter inObject);
+ void clearAssociation(
+ final PropertyAccessingContext propertyAccessingContext,
+ final ObjectAdapter targetAdapter);
// //////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 1b9c3b3..68236c8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -439,10 +439,12 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
final ObjectInstantiator objectInstantiator = getRuntimeContext().getObjectInstantiator();
// create contexts as inputs ...
- final SpecificationContext specContext = new SpecificationContext(getDeploymentCategory(), authenticationSessionProvider, servicesProvider, objectInstantiator, specificationLookup, facetProcessor);
+ final SpecificationContext specContext = new SpecificationContext(getConfiguration(), getDeploymentCategory(), authenticationSessionProvider, servicesProvider, objectInstantiator, specificationLookup, facetProcessor);
final AdapterManager adapterMap = getRuntimeContext().getAdapterManager();
- final ObjectMemberContext objectMemberContext = new ObjectMemberContext(getDeploymentCategory(), authenticationSessionProvider, specificationLookup, adapterMap, getRuntimeContext().getQuerySubmitter(), servicesProvider);
+ final ObjectMemberContext objectMemberContext = new ObjectMemberContext(getConfiguration(),
+ getDeploymentCategory(), authenticationSessionProvider, specificationLookup, adapterMap, getRuntimeContext().getQuerySubmitter(), servicesProvider
+ );
// ... and create the specs
if (FreeStandingList.class.isAssignableFrom(cls)) {
@@ -463,6 +465,13 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
return runtimeContext.getDeploymentCategory();
}
+ private IsisConfiguration getConfiguration() {
+ if(runtimeContext == null) {
+ throw new IllegalStateException("Runtime context has not been injected.");
+ }
+ return runtimeContext.getConfiguration();
+ }
+
private Class<?> loadBuiltIn(final String className) throws ClassNotFoundException {
final Class<?> builtIn = ClassUtil.getBuiltIn(className);
if (builtIn != null) {
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index cdeb1a1..ffc494c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -43,6 +43,8 @@ import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.interactions.UsabilityContext;
import org.apache.isis.core.metamodel.interactions.VisibilityContext;
@@ -161,14 +163,16 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
@Override
public Consent isVisible(final AuthenticationSession session, final ObjectAdapter contributee, Where where) {
- final VisibilityContext<?> ic = serviceAction.createVisibleInteractionContext(session, InteractionInvocationMethod.BY_USER, serviceAdapter, where);
+ final VisibilityContext<?> ic = serviceAction.createVisibleInteractionContext(session, InteractionInvocationMethod.BY_USER, serviceAdapter, where
+ );
ic.putContributee(this.contributeeParam, contributee);
return InteractionUtils.isVisibleResult(this, ic).createConsent();
}
@Override
public Consent isUsable(final AuthenticationSession session, final ObjectAdapter contributee, Where where) {
- final UsabilityContext<?> ic = serviceAction.createUsableInteractionContext(session, InteractionInvocationMethod.BY_USER, serviceAdapter, where);
+ final UsabilityContext<?> ic = serviceAction.createUsableInteractionContext(session, InteractionInvocationMethod.BY_USER, serviceAdapter, where
+ );
ic.putContributee(this.contributeeParam, contributee);
return InteractionUtils.isUsableResult(this, ic).createConsent();
}
@@ -181,10 +185,10 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
@Override
public ObjectAdapter[][] getChoices(
- final ObjectAdapter target,
+ final ActionPromptContext actionPromptContext, final ObjectAdapter target,
final AuthenticationSession authenticationSession,
final DeploymentCategory deploymentCategory) {
- final ObjectAdapter[][] serviceChoices = serviceAction.getChoices(serviceAdapter, authenticationSession,
+ final ObjectAdapter[][] serviceChoices = serviceAction.getChoices(actionPromptContext, serviceAdapter, authenticationSession,
deploymentCategory);
return removeElementFromArray(serviceChoices, contributeeParam, new ObjectAdapter[][]{});
}
@@ -195,7 +199,10 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
}
@Override
- public ObjectAdapter execute(final ObjectAdapter contributee, final ObjectAdapter[] arguments) {
+ public ObjectAdapter execute(
+ final ActionExecutingContext actionExecutingContext,
+ final ObjectAdapter contributee,
+ final ObjectAdapter[] arguments) {
// this code also exists in ActionInvocationFacetViaMethod
// we need to repeat it here because the target adapter should be the contributee, not the contributing service.
@@ -240,7 +247,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
}
}
- return serviceAction.execute(serviceAdapter, argsPlusContributee(contributee, arguments));
+ return serviceAction.execute(actionExecutingContext, serviceAdapter, argsPlusContributee(contributee, arguments));
}
private ObjectAdapter[] argsPlusContributee(final ObjectAdapter contributee, final ObjectAdapter[] arguments) {
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
index 61a5f23..c3b89a7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
@@ -45,17 +45,19 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
import org.apache.isis.core.metamodel.facets.TypedHolder;
-import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet;
+import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
import org.apache.isis.core.metamodel.facets.actions.debug.DebugFacet;
import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
import org.apache.isis.core.metamodel.facets.actions.exploration.ExplorationFacet;
-import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet;
import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
-import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
import org.apache.isis.core.metamodel.interactions.ActionUsabilityContext;
+import org.apache.isis.core.metamodel.interactions.ActionValidityContext;
import org.apache.isis.core.metamodel.interactions.ActionVisibilityContext;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.interactions.UsabilityContext;
@@ -126,7 +128,6 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
return getReturnType() != getSpecificationLoader().loadSpecification(void.class);
}
-
@Override
public ObjectSpecification getOnType() {
final ActionInvocationFacet facet = getActionInvocationFacet();
@@ -281,8 +282,12 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
// /////////////////////////////////////////////////////////////
@Override
- public VisibilityContext<?> createVisibleInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObjectAdapter, Where where) {
- return new ActionVisibilityContext(getDeploymentCategory(), session, invocationMethod, targetObjectAdapter, getIdentifier(), where);
+ public VisibilityContext<?> createVisibleInteractionContext(
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final ObjectAdapter targetObjectAdapter,
+ Where where) {
+ return new ActionVisibilityContext(getConfiguration(), getDeploymentCategory(), session, invocationMethod, targetObjectAdapter, getIdentifier(), where);
}
// /////////////////////////////////////////////////////////////
@@ -290,8 +295,15 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
// /////////////////////////////////////////////////////////////
@Override
- public UsabilityContext<?> createUsableInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObjectAdapter, Where where) {
- return new ActionUsabilityContext(getDeploymentCategory(), session, invocationMethod, targetObjectAdapter, getIdentifier(), where);
+ public UsabilityContext<?> createUsableInteractionContext(
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final ObjectAdapter targetObjectAdapter,
+ Where where) {
+ return new ActionUsabilityContext(
+ getConfiguration(), getDeploymentCategory(),
+ session, invocationMethod, targetObjectAdapter,
+ getIdentifier(), where);
}
// //////////////////////////////////////////////////////////////////
@@ -320,15 +332,22 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
}
// only check the action's own validity if all the arguments are OK.
if (resultSet.isAllowed()) {
- final ValidityContext<?> ic = createActionInvocationInteractionContext(getAuthenticationSession(), invocationMethod, object, proposedArguments);
+ final ValidityContext<?> ic = createValidityInteractionContext(getAuthenticationSession(), invocationMethod,
+ object, proposedArguments);
InteractionUtils.isValidResultSet(this, ic, resultSet);
}
return resultSet;
}
@Override
- public ActionInvocationContext createActionInvocationInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObject, final ObjectAdapter[] proposedArguments) {
- return new ActionInvocationContext(getDeploymentCategory(), getAuthenticationSession(), invocationMethod, targetObject, getIdentifier(), proposedArguments);
+ public ActionValidityContext createValidityInteractionContext(
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final ObjectAdapter targetObject,
+ final ObjectAdapter[] proposedArguments) {
+ return new ActionValidityContext(
+ this, getConfiguration(), getDeploymentCategory(), getAuthenticationSession(),
+ invocationMethod, targetObject, getIdentifier(), proposedArguments);
}
// //////////////////////////////////////////////////////////////////
@@ -336,7 +355,39 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
// //////////////////////////////////////////////////////////////////
@Override
- public ObjectAdapter executeWithRuleChecking(final ObjectAdapter target, final ObjectAdapter[] arguments, final AuthenticationSession authenticationSession, final Where where) {
+ public ActionPromptContext createPromptInteractionContext(
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final ObjectAdapter targetObject) {
+ return new ActionPromptContext(
+ this,
+ getConfiguration(), getDeploymentCategory(), getAuthenticationSession(),
+ invocationMethod, targetObject,
+ getIdentifier());
+ }
+
+ @Override
+ public ActionExecutingContext createExecutingInteractionContext(
+ final AuthenticationSession session,
+ final InteractionInvocationMethod invocationMethod,
+ final ObjectAdapter targetObject,
+ final ObjectAdapter[] arguments) {
+ return new ActionExecutingContext(
+ this,
+ getConfiguration(), getDeploymentCategory(), getAuthenticationSession(),
+ invocationMethod, targetObject,
+ getIdentifier(),
+ arguments);
+ }
+
+
+ @Override
+ public ObjectAdapter executeWithRuleChecking(
+ final ActionExecutingContext actionExecutingContext,
+ final ObjectAdapter target,
+ final ObjectAdapter[] arguments,
+ final AuthenticationSession authenticationSession,
+ final Where where) {
// see it?
final Consent visibility = isVisible(authenticationSession, target, where);
@@ -356,16 +407,19 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
throw new RecoverableException(validity.getReason());
}
- return execute(target, arguments);
+ return execute(actionExecutingContext, target, arguments);
}
@Override
- public ObjectAdapter execute(final ObjectAdapter target, final ObjectAdapter[] arguments) {
+ public ObjectAdapter execute(
+ final ActionExecutingContext actionExecutingContext,
+ final ObjectAdapter target,
+ final ObjectAdapter[] arguments) {
if(LOG.isDebugEnabled()) {
LOG.debug("execute action " + target + "." + getId());
}
final ActionInvocationFacet facet = getFacet(ActionInvocationFacet.class);
- return facet.invoke(this, target, arguments, getAuthenticationSession(), getDeploymentCategory());
+ return facet.invoke(actionExecutingContext, this, target, arguments, getAuthenticationSession(), getDeploymentCategory());
}
protected ActionInvocationFacet getActionInvocationFacet() {
@@ -435,7 +489,7 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
@Override
public ObjectAdapter[][] getChoices(
- final ObjectAdapter target,
+ final ActionPromptContext actionPromptContext, final ObjectAdapter target,
final AuthenticationSession authenticationSession,
final DeploymentCategory deploymentCategory) {
@@ -447,7 +501,7 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
if (!facet.isNoop()) {
// using the old choicesXxx() approach
- parameterChoicesPojos = facet.getChoices(target, authenticationSession, deploymentCategory);
+ parameterChoicesPojos = facet.getChoices(actionPromptContext, target, authenticationSession, deploymentCategory);
// if no options, or not the right number of pojos, then default
if (parameterChoicesPojos == null) {
@@ -465,7 +519,7 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
for (int i = 0; i < parameterCount; i++) {
final ActionParameterChoicesFacet paramFacet = parameters.get(i).getFacet(ActionParameterChoicesFacet.class);
if (paramFacet != null && !paramFacet.isNoop()) {
- parameterChoicesPojos[i] = paramFacet.getChoices(target, null, authenticationSession,
+ parameterChoicesPojos[i] = paramFacet.getChoices(actionPromptContext, target, null, authenticationSession,
deploymentCategory);
} else {
parameterChoicesPojos[i] = new Object[0];
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 4adc3aa..407fa2e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -30,6 +30,7 @@ import org.apache.isis.applib.query.Query;
import org.apache.isis.applib.query.QueryFindAllInstances;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.lang.ClassExtensions;
import org.apache.isis.core.commons.lang.ListExtensions;
import org.apache.isis.core.commons.lang.StringExtensions;
@@ -51,7 +52,9 @@ import org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterA
import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
import org.apache.isis.core.metamodel.interactions.ActionArgumentContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.ParameterAccessingContext;
import org.apache.isis.core.metamodel.interactions.ValidityContext;
import org.apache.isis.core.metamodel.spec.DomainModelException;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -73,6 +76,18 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
this.peer = peer;
}
+ @Override
+ public ParameterAccessingContext createAccessingInteractionContext(
+ final AuthenticationSession session,
+ final InteractionInvocationMethod interactionMethod,
+ final ObjectAdapter targetObjectAdapter) {
+ final ObjectActionImpl action = (ObjectActionImpl) getAction();
+ return new ParameterAccessingContext(
+ this,
+ action.getConfiguration(), action.getDeploymentCategory(), action.getAuthenticationSession(),
+ interactionMethod, getIdentifier(), targetObjectAdapter);
+ }
+
/**
* Subclasses should override either {@link #isObject()} or
* {@link #isCollection()}.
@@ -259,16 +274,16 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
@Override
public ObjectAdapter[] getAutoComplete(
- ObjectAdapter adapter,
- String searchArg,
+ final ActionPromptContext actionPromptContext,
+ final ObjectAdapter adapter,
+ final String searchArg,
final AuthenticationSession authenticationSession,
final DeploymentCategory deploymentCategory) {
final List<ObjectAdapter> adapters = Lists.newArrayList();
final ActionParameterAutoCompleteFacet facet = getFacet(ActionParameterAutoCompleteFacet.class);
if (facet != null) {
-
- final Object[] choices = facet.autoComplete(adapter, searchArg, authenticationSession, deploymentCategory);
+ final Object[] choices = facet.autoComplete(actionPromptContext, adapter, searchArg, authenticationSession, deploymentCategory);
checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification());
for (final Object choice : choices) {
adapters.add(getAdapterMap().adapterFor(choice));
@@ -301,7 +316,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
@Override
public ObjectAdapter[] getChoices(
- final ObjectAdapter adapter,
+ final ActionPromptContext actionPromptContext, final ObjectAdapter adapter,
final ObjectAdapter[] argumentsIfAvailable,
final AuthenticationSession authenticationSession,
final DeploymentCategory deploymentCategory) {
@@ -310,18 +325,18 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
final ObjectAdapter target = targetForDefaultOrChoices(adapter, argListIfAvailable);
final List<ObjectAdapter> args = argsForDefaultOrChoices(adapter, argListIfAvailable);
- return findChoices(target, args, authenticationSession, deploymentCategory);
+ return findChoices(actionPromptContext, target, args, authenticationSession, deploymentCategory);
}
private ObjectAdapter[] findChoices(
- final ObjectAdapter target,
+ final ActionPromptContext actionPromptContext, final ObjectAdapter target,
final List<ObjectAdapter> args,
final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
final List<ObjectAdapter> adapters = Lists.newArrayList();
final ActionParameterChoicesFacet facet = getFacet(ActionParameterChoicesFacet.class);
if (facet != null) {
- final Object[] choices = facet.getChoices(target, args, authenticationSession, deploymentCategory);
+ final Object[] choices = facet.getChoices(actionPromptContext, target, args, authenticationSession, deploymentCategory);
checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification());
for (final Object choice : choices) {
ObjectAdapter adapter = choice != null? getAdapterMap().adapterFor(choice) : null;
@@ -426,7 +441,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
@Override
public ActionArgumentContext createProposedArgumentInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObject, final ObjectAdapter[] proposedArguments, final int position) {
- return new ActionArgumentContext(getDeploymentCategory(), getAuthenticationSession(), invocationMethod, targetObject, getIdentifier(), proposedArguments, position);
+ return new ActionArgumentContext(getConfiguration(), getDeploymentCategory(), getAuthenticationSession(), invocationMethod, targetObject, getIdentifier(), proposedArguments, position);
}
@Override
@@ -491,6 +506,10 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
return parentAction.getDeploymentCategory();
}
+ private IsisConfiguration getConfiguration() {
+ return parentAction.getConfiguration();
+ }
+
protected SpecificationLoader getSpecificationLoader() {
return parentAction.getSpecificationLoader();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
index 626b362..b7f94d6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
@@ -24,10 +24,11 @@ import org.apache.isis.core.metamodel.adapter.MutableProposedHolder;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.TypedHolder;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.interactions.ParameterAccessingContext;
import org.apache.isis.core.metamodel.spec.Instance;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
@@ -97,11 +98,11 @@ public class ObjectActionParameterParseable extends ObjectActionParameterAbstrac
/**
* Gets the proposed value of the {@link Instance} (downcast as a
- * {@link MutableProposed}, wrapping the proposed value into a
+ * {@link MutableProposedHolder}, wrapping the proposed value into a
* {@link ObjectAdapter}.
*/
@Override
- public ObjectAdapter get(final ObjectAdapter owner) {
+ public ObjectAdapter get(final ObjectAdapter owner, final ParameterAccessingContext parameterAccessingContext) {
final MutableProposedHolder proposedHolder = getProposedHolder(owner);
final Object proposed = proposedHolder.getProposed();
return getAdapterMap().adapterFor(proposed);
@@ -109,7 +110,7 @@ public class ObjectActionParameterParseable extends ObjectActionParameterAbstrac
/**
* Sets the proposed value of the {@link Instance} (downcast as a
- * {@link MutableProposed}, unwrapped the proposed value from a
+ * {@link MutableProposedHolder}, unwrapped the proposed value from a
* {@link ObjectAdapter}.
*/
public void set(final ObjectAdapter owner, final ObjectAdapter newValue) {
http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
index ccd2f51..0dcbc66 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
@@ -22,6 +22,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.lang.ListExtensions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
/**
@@ -60,11 +61,11 @@ public class ObjectActionParameterParseableContributee extends ObjectActionParam
@Override
public ObjectAdapter[] getAutoComplete(
- final ObjectAdapter adapter,
+ final ActionPromptContext actionPromptContext, final ObjectAdapter adapter,
final String searchArg,
final AuthenticationSession authenticationSession,
final DeploymentCategory deploymentCategory) {
- return serviceActionParameter.getAutoComplete(serviceAdapter, searchArg, authenticationSession,
+ return serviceActionParameter.getAutoComplete(actionPromptContext, serviceAdapter, searchArg, authenticationSession,
deploymentCategory);
}