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 2014/12/30 14:57:28 UTC
[4/5] isis git commit: ISIS-970: completed the
ActionAnnotationFacetFactory,
with additional refactoring for DomainObjectFacetFactory
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
new file mode 100644
index 0000000..fe05ab2
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
@@ -0,0 +1,85 @@
+/*
+ * 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.applib.annotation;
+
+import org.apache.isis.applib.util.Enums;
+
+public enum SemanticsOf {
+
+ /**
+ * Safe, with no side-effects.
+ *
+ * <p>
+ * In other words, a query-only action. By definition, is also idempotent.
+ */
+ SAFE,
+ /**
+ * Post-conditions are always the same, irrespective as to how many times called.
+ *
+ * <p>
+ * An example might be <tt>placeOrder()</tt>, that is a no-op if the order has already been placed.
+ */
+ IDEMPOTENT,
+ /**
+ * Neither safe nor idempotent; every invocation is likely to change the state of the object.
+ *
+ * <p>
+ * An example is increasing the quantity of a line item in an Order by 1.
+ */
+ NON_IDEMPOTENT;
+
+ public String getFriendlyName() {
+ return Enums.getFriendlyNameOf(this);
+ }
+
+ public String getCamelCaseName() {
+ return Enums.enumToCamelCase(this);
+ }
+
+ /**
+ * {@link #SAFE} is idempotent in nature, as well as, obviously, {@link #IDEMPOTENT}.
+ */
+ public boolean isIdempotentInNature() {
+ return this == SAFE || this == IDEMPOTENT;
+ }
+
+ public boolean isSafe() {
+ return this == SAFE;
+ }
+
+ @Deprecated
+ public static ActionSemantics.Of from(final SemanticsOf semantics) {
+ if(semantics == null) return null;
+ if(semantics == SAFE) return ActionSemantics.Of.SAFE;
+ if(semantics == IDEMPOTENT) return ActionSemantics.Of.IDEMPOTENT;
+ if(semantics == NON_IDEMPOTENT) return ActionSemantics.Of.NON_IDEMPOTENT;
+ // shouldn't happen
+ throw new IllegalArgumentException("Unrecognized of: " + semantics);
+ }
+
+ @Deprecated
+ public static SemanticsOf from(final ActionSemantics.Of semantics) {
+ if(semantics == null) return null;
+ if(semantics == ActionSemantics.Of.SAFE) return SAFE;
+ if(semantics == ActionSemantics.Of.IDEMPOTENT) return IDEMPOTENT;
+ if(semantics == ActionSemantics.Of.NON_IDEMPOTENT) return NON_IDEMPOTENT;
+ // shouldn't happen
+ throw new IllegalArgumentException("Unrecognized semantics: " + semantics);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/applib/src/main/java/org/apache/isis/applib/annotation/TypeOf.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/TypeOf.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/TypeOf.java
index 03bb357..ba30a60 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/TypeOf.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/TypeOf.java
@@ -26,7 +26,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * @deprecated - use {@link Collection#typeOf()} instead.
+ * @deprecated - use {@link Collection#typeOf()} or {@link Action#typeOf()} instead.
*/
@Deprecated
@Inherited
@@ -35,7 +35,7 @@ import java.lang.annotation.Target;
public @interface TypeOf {
/**
- * @deprecated - use {@link Collection#typeOf()} instead.
+ * @deprecated - use {@link Collection#typeOf()} or {@link Action#typeOf()} instead.
*/
@Deprecated
Class<?> value();
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index 210c137..baca5e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -21,19 +21,33 @@ package org.apache.isis.core.metamodel.facets.actions.action;
import java.lang.reflect.Method;
import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.Bulk;
+import org.apache.isis.applib.annotation.Command;
+import org.apache.isis.applib.annotation.PublishedAction;
+import org.apache.isis.applib.services.HasTransactionId;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationAware;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.Annotations;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.collections.collection.HiddenFacetForCollectionAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
+import org.apache.isis.core.metamodel.facets.actions.bulk.annotation.BulkFacetAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
+import org.apache.isis.core.metamodel.facets.actions.command.annotation.CommandFacetAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
+import org.apache.isis.core.metamodel.facets.actions.publish.annotation.PublishedActionFacetAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+import org.apache.isis.core.metamodel.facets.actions.semantics.annotations.actionsemantics.ActionSemanticsFacetAnnotation;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
-public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware {
+public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, IsisConfigurationAware {
private ServicesInjector servicesInjector;
+ private IsisConfiguration configuration;
public ActionAnnotationFacetFactory() {
super(FeatureType.ACTIONS_ONLY);
@@ -42,14 +56,15 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
@Override
public void process(final ProcessMethodContext processMethodContext) {
- final Method method = processMethodContext.getMethod();
- final Action action = Annotations.getAnnotation(method, Action.class);
- if (action == null) {
- return;
- }
-
processInteraction(processMethodContext);
processHidden(processMethodContext);
+
+ processSemantics(processMethodContext);
+ processInvokeOn(processMethodContext);
+ processCommand(processMethodContext);
+ processPublishing(processMethodContext);
+
+ processTypeOf(processMethodContext);
}
private void processInteraction(final ProcessMethodContext processMethodContext) {
@@ -68,9 +83,124 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
HiddenFacetForActionAnnotation.create(action, holder));
}
+ private void processSemantics(final ProcessMethodContext processMethodContext) {
+ final Method method = processMethodContext.getMethod();
+ final Action action = Annotations.getAnnotation(method, Action.class);
+ final FacetHolder holder = processMethodContext.getFacetHolder();
+
+ ActionSemanticsFacet facet;
+
+ //
+ // check for the deprecated @ActionSemantics first, because the
+ // @Action(semantics=...) has a default of NON_IDEMPOTENT that would otherwise be used
+ //
+ final ActionSemantics actionSemantics = Annotations.getAnnotation(method, ActionSemantics.class);
+ facet = ActionSemanticsFacetAnnotation.create(actionSemantics, holder);
+
+ // else check for @Action(semantics=...)
+ if(facet == null) {
+ facet = ActionSemanticsFacetForActionAnnotation.create(action, holder);
+ }
+ FacetUtil.addFacet(facet);
+ }
+
+ private void processInvokeOn(final ProcessMethodContext processMethodContext) {
+ final Method method = processMethodContext.getMethod();
+ final Action action = Annotations.getAnnotation(method, Action.class);
+ final FacetHolder holder = processMethodContext.getFacetHolder();
+
+ BulkFacet bulkFacet;
+
+ // check for the deprecated @Bulk annotation first
+ final Bulk annotation = Annotations.getAnnotation(method, Bulk.class);
+ bulkFacet = BulkFacetAnnotation.create(annotation, holder);
+
+ // else check for @Action(invokeOn=...)
+ if(bulkFacet == null) {
+ bulkFacet = BulkFacetForActionAnnotation.create(action, holder);
+ }
+
+ FacetUtil.addFacet(bulkFacet);
+ }
+
+ private void processCommand(
+ final ProcessMethodContext processMethodContext) {
+
+ final Method method = processMethodContext.getMethod();
+ final Action action = Annotations.getAnnotation(method, Action.class);
+ final FacetHolder holder = processMethodContext.getFacetHolder();
+
+ //
+ // this rule inspired by a similar rule for auditing and publishing, see DomainObjectAnnotationFacetFactory
+ //
+ if(HasTransactionId.class.isAssignableFrom(processMethodContext.getCls())) {
+ // do not install on any implementation of HasTransactionId
+ // (ie commands, audit entries, published events).
+ return;
+ }
+
+ CommandFacet commandFacet;
+
+ // check for deprecated @Command annotation first
+ final Command annotation = Annotations.getAnnotation(processMethodContext.getMethod(), Command.class);
+ commandFacet = CommandFacetAnnotation.create(annotation, processMethodContext.getFacetHolder());
+
+ // else check for @Action(command=...)
+ if(commandFacet == null) {
+ commandFacet = CommandFacetForActionAnnotation.create(action, configuration, holder);
+ }
+
+ FacetUtil.addFacet(commandFacet);
+ }
+
+ private void processPublishing(
+ final ProcessMethodContext processMethodContext) {
+
+ final Method method = processMethodContext.getMethod();
+ final Action action = Annotations.getAnnotation(method, Action.class);
+ final FacetHolder holder = processMethodContext.getFacetHolder();
+
+ //
+ // this rule inspired by a similar rule for auditing and publishing, see DomainObjectAnnotationFacetFactory
+ // and for commands, see above
+ //
+ if(HasTransactionId.class.isAssignableFrom(processMethodContext.getCls())) {
+ // do not install on any implementation of HasTransactionId
+ // (ie commands, audit entries, published events).
+ return;
+ }
+
+
+ PublishedActionFacet publishedActionFacet;
+
+ // check for deprecated @PublishedAction annotation first
+ final PublishedAction annotation = Annotations.getAnnotation(processMethodContext.getMethod(), PublishedAction.class);
+ publishedActionFacet = PublishedActionFacetAnnotation.create(annotation, holder);
+
+ // else check for @Action(publishing=...)
+ if(publishedActionFacet == null) {
+ publishedActionFacet = PublishedActionFacetForActionAnnotation.create(action, configuration, holder);
+ }
+
+ FacetUtil.addFacet(publishedActionFacet);
+ }
+
+
+ private void processTypeOf(final ProcessMethodContext processMethodContext) {
+
+ // typeOf is handled by TypeOfFacetOnActionAnnotationFactory, because the
+ // deprecated annotations etc that must also be supported.
+
+ }
+
@Override
public void setServicesInjector(final ServicesInjector servicesInjector) {
this.servicesInjector = servicesInjector;
}
+
+ @Override
+ public void setConfiguration(final IsisConfiguration configuration) {
+ this.configuration = configuration;
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionSemanticsFacetForActionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionSemanticsFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionSemanticsFacetForActionAnnotation.java
new file mode 100644
index 0000000..cf59ea2
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionSemanticsFacetForActionAnnotation.java
@@ -0,0 +1,54 @@
+/*
+ * 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.facets.actions.action;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionSemantics.Of;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
+
+public class ActionSemanticsFacetForActionAnnotation extends ActionSemanticsFacetAbstract {
+
+ public static ActionSemanticsFacet create(
+ final Action action,
+ final FacetHolder holder) {
+
+ if(action == null) {
+ return null;
+ }
+
+ final SemanticsOf semantics = action.semantics();
+ if(action.semantics() == null) {
+ // don't think this can happen, therefore will return a facet with the default, ie NON_IDEMPOTENT
+ return null;
+ }
+
+ return new ActionSemanticsFacetForActionAnnotation(
+ SemanticsOf.from(semantics), holder);
+ }
+
+ private ActionSemanticsFacetForActionAnnotation(Of of, final FacetHolder holder) {
+ super(of, holder);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/BulkFacetForActionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/BulkFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/BulkFacetForActionAnnotation.java
new file mode 100644
index 0000000..efd5fd0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/BulkFacetForActionAnnotation.java
@@ -0,0 +1,59 @@
+/*
+ * 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.facets.actions.action;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Bulk;
+import org.apache.isis.applib.annotation.InvokeOn;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
+import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacetAbstract;
+
+public class BulkFacetForActionAnnotation extends BulkFacetAbstract {
+
+ static BulkFacet create(final Action action, final FacetHolder holder) {
+
+ if(action == null) {
+ return null;
+ }
+
+ final InvokeOn invokeOn = action.invokeOn();
+ if(invokeOn == null) {
+ return null;
+ }
+
+ switch (invokeOn) {
+ case OBJECT_ONLY:
+ return null;
+ case OBJECT_AND_COLLECTION:
+ return new BulkFacetForActionAnnotation(InvokeOn.from(invokeOn), holder);
+ case COLLECTION_ONLY:
+ return new BulkFacetForActionAnnotation(InvokeOn.from(invokeOn), holder);
+ }
+ return null;
+ }
+
+ private BulkFacetForActionAnnotation(
+ final Bulk.AppliesTo appliesTo,
+ final FacetHolder holder) {
+ super(appliesTo, holder);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/CommandFacetForActionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/CommandFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/CommandFacetForActionAnnotation.java
new file mode 100644
index 0000000..9d481d0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/CommandFacetForActionAnnotation.java
@@ -0,0 +1,98 @@
+/*
+ * 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.facets.actions.action;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.Command.ExecuteIn;
+import org.apache.isis.applib.annotation.Command.Persistence;
+import org.apache.isis.applib.annotation.CommandExecuteIn;
+import org.apache.isis.applib.annotation.CommandPersistence;
+import org.apache.isis.applib.annotation.CommandReification;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
+import org.apache.isis.core.metamodel.facets.actions.command.CommandFacetAbstract;
+import org.apache.isis.core.metamodel.facets.actions.command.configuration.ActionConfiguration;
+import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+
+public class CommandFacetForActionAnnotation extends CommandFacetAbstract {
+
+ static CommandFacet create(
+ final Action action,
+ final IsisConfiguration configuration,
+ final FacetHolder holder) {
+
+ if (action == null) {
+ return null;
+ }
+
+ final CommandReification command = action.command();
+ if(command == null) {
+ return null;
+ }
+
+ final CommandPersistence commandPersistence = action.commandPersistence();
+ final Persistence persistence = CommandPersistence.from(commandPersistence);
+
+ final CommandExecuteIn commandExecuteIn = action.commandExecuteIn();
+ final ExecuteIn executeIn = CommandExecuteIn.from(commandExecuteIn);
+
+ switch (command) {
+ case AS_CONFIGURED:
+ final ActionSemanticsFacet actionSemanticsFacet = holder.getFacet(ActionSemanticsFacet.class);
+ if(actionSemanticsFacet == null) {
+ throw new IllegalStateException("Require ActionSemanticsFacet in order to process");
+ }
+ if(holder.containsDoOpFacet(CommandFacet.class)) {
+ // do not replace
+ return null;
+ }
+ final ActionConfiguration setting = ActionConfiguration.parse(configuration);
+ switch (setting) {
+ case NONE:
+ return null;
+ case IGNORE_SAFE:
+ if(actionSemanticsFacet.value() == ActionSemantics.Of.SAFE) {
+ return null;
+ }
+ // else fall through
+ default:
+ return new CommandFacetForActionAnnotation(persistence, executeIn, Enablement.ENABLED, holder);
+ }
+ case DISABLED:
+ return null;
+ case ENABLED:
+ return new CommandFacetForActionAnnotation(persistence, executeIn, Enablement.ENABLED, holder);
+ }
+
+ return null;
+ }
+
+
+ private CommandFacetForActionAnnotation(
+ final Persistence persistence,
+ final ExecuteIn executeIn,
+ final Enablement enablement,
+ final FacetHolder holder) {
+ super(persistence, executeIn, enablement, holder);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/HiddenFacetForActionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/HiddenFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/HiddenFacetForActionAnnotation.java
index a0575ef..a616578 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/HiddenFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/HiddenFacetForActionAnnotation.java
@@ -29,9 +29,19 @@ import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
public class HiddenFacetForActionAnnotation extends HiddenFacetAbstract {
- public static HiddenFacet create(final Action action, final FacetHolder holder) {
+ public static HiddenFacet create(
+ final Action action,
+ final FacetHolder holder) {
+
+ if (action == null) {
+ return null;
+ }
+
final Where where = action.hidden();
- return where != null && where != Where.NOT_SPECIFIED ? new HiddenFacetForActionAnnotation(where, holder) : null;
+ if (where != null && where != Where.NOT_SPECIFIED) {
+ return new HiddenFacetForActionAnnotation(where, holder);
+ }
+ return null;
}
private HiddenFacetForActionAnnotation(final Where where, final FacetHolder holder) {
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/PublishActionsConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/PublishActionsConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/PublishActionsConfiguration.java
new file mode 100644
index 0000000..c789d3f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/PublishActionsConfiguration.java
@@ -0,0 +1,42 @@
+/*
+ * 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.facets.actions.action;
+
+import org.apache.isis.core.commons.config.IsisConfiguration;
+
+public enum PublishActionsConfiguration {
+ ALL,
+ NONE;
+
+ private static final String PUBLISH_ACTIONS_KEY = "isis.services.publish.actions";
+
+ public static PublishActionsConfiguration parse(IsisConfiguration configuration) {
+ final String configuredValue = configuration.getString(PUBLISH_ACTIONS_KEY);
+ return PublishActionsConfiguration.parse(configuredValue);
+ }
+
+ private static PublishActionsConfiguration parse(final String value) {
+ if ("all".equalsIgnoreCase(value)) {
+ return ALL;
+ } else {
+ return NONE;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/PublishedActionFacetForActionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/PublishedActionFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/PublishedActionFacetForActionAnnotation.java
new file mode 100644
index 0000000..a276637
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/PublishedActionFacetForActionAnnotation.java
@@ -0,0 +1,110 @@
+/*
+ * 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.facets.actions.action;
+
+import java.util.List;
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.PublishedAction;
+import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.annotation.PublishingPayloadFactoryForAction;
+import org.apache.isis.applib.services.publish.EventPayload;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
+import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacetAbstract;
+
+public class PublishedActionFacetForActionAnnotation extends PublishedActionFacetAbstract {
+
+ public static PublishedActionFacet create(
+ final Action action,
+ final IsisConfiguration configuration,
+ final FacetHolder holder) {
+
+ if (action == null) {
+ return null;
+ }
+ final Publishing publishing = action.publishing();
+
+ switch (publishing) {
+ case AS_CONFIGURED:
+
+ final PublishActionsConfiguration setting = PublishActionsConfiguration.parse(configuration);
+ switch (setting) {
+ case NONE:
+ return null;
+ default:
+ return new PublishedActionFacetForActionAnnotation(
+ newPayloadFactory(action), holder);
+ }
+ case DISABLED:
+ return null;
+ case ENABLED:
+ return new PublishedActionFacetForActionAnnotation(
+ newPayloadFactory(action), holder);
+ }
+ return null;
+ }
+
+ private static PublishingPayloadFactoryForAction newPayloadFactory(final Action action) {
+ final Class<? extends PublishingPayloadFactoryForAction> payloadFactoryClass = action.publishingPayloadFactory();
+ if(payloadFactoryClass == null) {
+ return null;
+ }
+
+ try {
+ return payloadFactoryClass.newInstance();
+ } catch (final InstantiationException e) {
+ return null;
+ } catch (final IllegalAccessException e) {
+ return null;
+ }
+ }
+
+ public PublishedActionFacetForActionAnnotation(
+ final PublishingPayloadFactoryForAction publishingPayloadFactory,
+ final FacetHolder holder) {
+ super(legacyPayloadFactoryFor(publishingPayloadFactory), holder);
+ }
+
+ private static PublishedAction.PayloadFactory legacyPayloadFactoryFor(PublishingPayloadFactoryForAction publishingPayloadFactory) {
+ if(publishingPayloadFactory instanceof PublishingPayloadFactoryForAction.Adapter) {
+ final PublishingPayloadFactoryForAction.Adapter adapter = (PublishingPayloadFactoryForAction.Adapter) publishingPayloadFactory;
+ return adapter.getPayloadFactory();
+ }
+ return new LegacyAdapter(publishingPayloadFactory);
+ }
+
+ private static class LegacyAdapter implements PublishedAction.PayloadFactory {
+
+ private final PublishingPayloadFactoryForAction payloadFactory;
+
+ LegacyAdapter(final PublishingPayloadFactoryForAction payloadFactory) {
+ this.payloadFactory = payloadFactory;
+ }
+
+ @Override
+ public EventPayload payloadFor(final Identifier actionIdentifier, final Object target, final List<Object> arguments, final Object result) {
+ return payloadFactory.payloadFor(actionIdentifier, target, arguments, result);
+ }
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/annotation/BulkFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/annotation/BulkFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/annotation/BulkFacetAnnotation.java
index 313025a..62b3821 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/annotation/BulkFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/annotation/BulkFacetAnnotation.java
@@ -21,12 +21,25 @@ package org.apache.isis.core.metamodel.facets.actions.bulk.annotation;
import org.apache.isis.applib.annotation.Bulk;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacetAbstract;
public class BulkFacetAnnotation extends BulkFacetAbstract {
- public BulkFacetAnnotation(Bulk.AppliesTo value, final FacetHolder holder) {
+ public static BulkFacet create(
+ final Bulk annotation,
+ final FacetHolder holder) {
+
+ if (annotation == null) {
+ return null;
+ }
+
+ return new BulkFacetAnnotation(annotation.value(), holder);
+ }
+
+ private BulkFacetAnnotation(Bulk.AppliesTo value, final FacetHolder holder) {
super(value, holder);
}
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/annotation/BulkFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/annotation/BulkFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/annotation/BulkFacetAnnotationFactory.java
index 856590e..7080475 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/annotation/BulkFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/annotation/BulkFacetAnnotationFactory.java
@@ -19,15 +19,8 @@
package org.apache.isis.core.metamodel.facets.actions.bulk.annotation;
-import java.lang.reflect.Method;
-
-import org.apache.isis.applib.annotation.Bulk;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.Annotations;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
public class BulkFacetAnnotationFactory extends FacetFactoryAbstract {
@@ -37,13 +30,10 @@ public class BulkFacetAnnotationFactory extends FacetFactoryAbstract {
@Override
public void process(final ProcessMethodContext processMethodContext) {
- Method method = processMethodContext.getMethod();
- final Bulk annotation = Annotations.getAnnotation(method, Bulk.class);
- FacetUtil.addFacet(create(annotation, processMethodContext.getFacetHolder()));
- }
- private BulkFacet create(final Bulk annotation, final FacetHolder holder) {
- return annotation == null ? null : new BulkFacetAnnotation(annotation.value(), holder);
+ //
+ // moved to ActionAnnotationFacetFactory
+ //
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/annotation/CommandFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/annotation/CommandFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/annotation/CommandFacetAnnotation.java
index 4d59ccf..186236d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/annotation/CommandFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/annotation/CommandFacetAnnotation.java
@@ -19,17 +19,25 @@
package org.apache.isis.core.metamodel.facets.actions.command.annotation;
+import org.apache.isis.applib.annotation.Command;
import org.apache.isis.applib.annotation.Command.ExecuteIn;
import org.apache.isis.applib.annotation.Command.Persistence;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
import org.apache.isis.core.metamodel.facets.actions.command.CommandFacetAbstract;
public class CommandFacetAnnotation extends CommandFacetAbstract {
- public CommandFacetAnnotation(
- final Persistence persistence,
+ public static CommandFacet create(final Command annotation, final FacetHolder holder) {
+ return annotation == null
+ ? null
+ : new CommandFacetAnnotation(annotation.persistence(), annotation.executeIn(), Enablement.isDisabled(annotation.disabled()), holder);
+ }
+
+ private CommandFacetAnnotation(
+ final Persistence persistence,
final ExecuteIn executeIn,
- final Enablement enablement,
+ final Enablement enablement,
final FacetHolder holder) {
super(persistence, executeIn, enablement, holder);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/annotation/CommandFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/annotation/CommandFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/annotation/CommandFacetAnnotationFactory.java
index 8f5283e..0cdb31b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/annotation/CommandFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/annotation/CommandFacetAnnotationFactory.java
@@ -19,14 +19,8 @@
package org.apache.isis.core.metamodel.facets.actions.command.annotation;
-import org.apache.isis.applib.annotation.Command;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.Annotations;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
-import org.apache.isis.core.metamodel.facets.actions.command.CommandFacetAbstract.Enablement;
public class CommandFacetAnnotationFactory extends FacetFactoryAbstract {
@@ -36,14 +30,10 @@ public class CommandFacetAnnotationFactory extends FacetFactoryAbstract {
@Override
public void process(final ProcessMethodContext processMethodContext) {
- final Command annotation = Annotations.getAnnotation(processMethodContext.getMethod(), Command.class);
- FacetUtil.addFacet(create(annotation, processMethodContext.getFacetHolder()));
- }
- private CommandFacet create(final Command annotation, final FacetHolder holder) {
- return annotation == null
- ? null
- : new CommandFacetAnnotation(annotation.persistence(), annotation.executeIn(), Enablement.isDisabled(annotation.disabled()), holder);
+ //
+ // moved to ActionAnnotationFacetFactory
+ //
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/ActionConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/ActionConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/ActionConfiguration.java
new file mode 100644
index 0000000..82a26bf
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/ActionConfiguration.java
@@ -0,0 +1,43 @@
+/*
+ * 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.facets.actions.command.configuration;
+
+import org.apache.isis.core.commons.config.IsisConfiguration;
+
+public enum ActionConfiguration {
+ ALL,
+ IGNORE_SAFE,
+ NONE;
+
+ private static final String COMMAND_ACTIONS_KEY = "isis.services.command.actions";
+
+ public static ActionConfiguration parse(final IsisConfiguration configuration) {
+ return parse(configuration.getString(COMMAND_ACTIONS_KEY));
+ }
+
+ private static ActionConfiguration parse(final String value) {
+ if ("ignoreQueryOnly".equalsIgnoreCase(value) || "ignoreSafe".equalsIgnoreCase(value)) {
+ return IGNORE_SAFE;
+ } else if ("all".equals(value)) {
+ return ALL;
+ } else {
+ return NONE;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/CommandFacetFromConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/CommandFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/CommandFacetFromConfiguration.java
index 2f40dc9..b3a91d3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/CommandFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/CommandFacetFromConfiguration.java
@@ -22,11 +22,16 @@ package org.apache.isis.core.metamodel.facets.actions.command.configuration;
import org.apache.isis.applib.annotation.Command.ExecuteIn;
import org.apache.isis.applib.annotation.Command.Persistence;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
import org.apache.isis.core.metamodel.facets.actions.command.CommandFacetAbstract;
public class CommandFacetFromConfiguration extends CommandFacetAbstract {
- public CommandFacetFromConfiguration(
+ public static CommandFacet create(final FacetHolder holder) {
+ return new CommandFacetFromConfiguration(Persistence.PERSISTED, ExecuteIn.FOREGROUND, holder);
+ }
+
+ private CommandFacetFromConfiguration(
final Persistence persistence,
final ExecuteIn executeIn,
final FacetHolder holder) {
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/CommandFacetFromConfigurationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/CommandFacetFromConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/CommandFacetFromConfigurationFactory.java
index 1c979cf..966510e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/CommandFacetFromConfigurationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/configuration/CommandFacetFromConfigurationFactory.java
@@ -25,7 +25,6 @@ import org.apache.isis.applib.annotation.Command;
import org.apache.isis.applib.services.HasTransactionId;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationAware;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.Annotations;
@@ -40,23 +39,6 @@ import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFa
*/
public class CommandFacetFromConfigurationFactory extends FacetFactoryAbstract implements IsisConfigurationAware {
- private static final String COMMAND_ACTIONS_KEY = "isis.services.command.actions";
-
- private static enum ActionCategorization {
- ALL,
- IGNORE_SAFE,
- NONE;
- public static ActionCategorization parse(final String value) {
- if ("ignoreQueryOnly".equalsIgnoreCase(value) || "ignoreSafe".equalsIgnoreCase(value)) {
- return IGNORE_SAFE;
- } else if ("all".equals(value)) {
- return ALL;
- } else {
- return NONE;
- }
- }
- }
-
private IsisConfiguration configuration;
public CommandFacetFromConfigurationFactory() {
@@ -83,19 +65,15 @@ public class CommandFacetFromConfigurationFactory extends FacetFactoryAbstract i
// (ie commands, audit entries, published events).
return;
}
- final ActionCategorization categorization = ActionCategorization.parse(configuration.getString(COMMAND_ACTIONS_KEY));
- if(categorization == ActionCategorization.NONE) {
+ final ActionConfiguration setting = ActionConfiguration.parse(configuration);
+ if(setting == ActionConfiguration.NONE) {
return;
}
- if(actionSemanticsFacet.value() == Of.SAFE && categorization == ActionCategorization.IGNORE_SAFE) {
+ if(actionSemanticsFacet.value() == Of.SAFE && setting == ActionConfiguration.IGNORE_SAFE) {
return;
}
final Command annotation = Annotations.getAnnotation(method, Command.class);
- FacetUtil.addFacet(create(annotation, facetHolder));
- }
-
- private CommandFacet create(final Command annotation, final FacetHolder holder) {
- return new CommandFacetFromConfiguration(Command.Persistence.PERSISTED, Command.ExecuteIn.FOREGROUND, holder);
+ FacetUtil.addFacet(CommandFacetFromConfiguration.create(facetHolder));
}
// //////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInvocationFacetForInteractionAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInvocationFacetForInteractionAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInvocationFacetForInteractionAbstract.java
index 7c362c6..ad36b39 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInvocationFacetForInteractionAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInvocationFacetForInteractionAbstract.java
@@ -29,6 +29,7 @@ import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.RecoverableException;
import org.apache.isis.applib.ViewModel;
import org.apache.isis.applib.annotation.BulkInteractionContext;
+import org.apache.isis.applib.annotation.InvokedOn;
import org.apache.isis.applib.clock.Clock;
import org.apache.isis.applib.services.background.ActionInvocationMemento;
import org.apache.isis.applib.services.background.BackgroundService;
@@ -238,7 +239,7 @@ public abstract class ActionInvocationFacetForInteractionAbstract
bulkInteractionContext != null &&
bulkInteractionContext.getInvokedAs() == null) {
- bulkInteractionContext.setActionInvokedAs(BulkInteractionContext.InvokedAs.REGULAR);
+ bulkInteractionContext.setActionInvokedOn(InvokedOn.OBJECT);
bulkInteractionContext.setDomainObjects(Collections.singletonList(targetPojo));
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
new file mode 100644
index 0000000..d9132c9
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
@@ -0,0 +1,168 @@
+/*
+ * 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.facets.actions.layout;
+
+
+import java.util.Properties;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.Annotations;
+import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
+import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback;
+import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
+import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
+import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+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;
+
+
+public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
+
+ public ActionLayoutFacetFactory() {
+ super(FeatureType.ACTIONS_ONLY);
+ }
+
+ @Override
+ public void process(final ProcessMethodContext processMethodContext) {
+
+ final FacetHolder holder = processMethodContext.getFacetHolder();
+
+ Properties properties = processMethodContext.metadataProperties("actionLayout");
+ if(properties == null) {
+ // alternate key
+ properties = processMethodContext.metadataProperties("layout");
+ }
+ final ActionLayout actionLayout = Annotations.getAnnotation(processMethodContext.getMethod(), ActionLayout.class);
+
+
+ // cssClass
+ CssClassFacet cssClassFacet = CssClassFacetOnActionFromLayoutProperties.create(properties, holder);
+ if(cssClassFacet == null) {
+ cssClassFacet = CssClassFacetForActionLayoutAnnotation.create(actionLayout, holder);
+ }
+ FacetUtil.addFacet(cssClassFacet);
+
+
+ // cssClassFa
+ CssClassFaFacet cssClassFaFacet = CssClassFaFacetOnActionFromLayoutProperties.create(properties, holder);
+ if(cssClassFaFacet == null) {
+ cssClassFaFacet = CssClassFaFacetForActionLayoutAnnotation.create(actionLayout, holder);
+ }
+ FacetUtil.addFacet(cssClassFaFacet);
+
+
+ // describedAs
+ DescribedAsFacet describedAsFacet = DescribedAsFacetOnActionFromLayoutProperties.create(properties, holder);
+ if(describedAsFacet == null) {
+ describedAsFacet = DescribedAsFacetForActionLayoutAnnotation.create(actionLayout, holder);
+ }
+ FacetUtil.addFacet(describedAsFacet);
+
+
+ // hidden
+ HiddenFacet hiddenFacet = HiddenFacetOnActionFromLayoutProperties.create(properties, holder);
+ if(hiddenFacet == null) {
+ hiddenFacet = HiddenFacetForActionLayoutAnnotation.create(actionLayout, holder);
+ }
+ FacetUtil.addFacet(hiddenFacet);
+
+
+ // named
+ NamedFacet namedFacet = NamedFacetOnActionFromLayoutProperties.create(properties, holder);
+ if(namedFacet == null) {
+ namedFacet = NamedFacetForActionLayoutAnnotation.create(actionLayout, holder);
+ }
+ FacetUtil.addFacet(namedFacet);
+
+
+ // position
+ ActionPositionFacet actionPositionFacet = ActionPositionFacetOnActionFromLayoutProperties.create(properties, holder);
+ if(actionPositionFacet == null) {
+ actionPositionFacet = ActionPositionFacetForActionLayoutAnnotation.create(actionLayout, holder);
+ }
+ if(actionPositionFacet == null) {
+ actionPositionFacet = new ActionPositionFacetFallback(holder);
+ }
+ FacetUtil.addFacet(actionPositionFacet);
+
+
+ // prototype
+ PrototypeFacet prototypeFacet = PrototypeFacetOnActionFromLayoutProperties.create(properties, holder);
+ if(prototypeFacet == null) {
+ prototypeFacet = PrototypeFacetForActionLayoutAnnotation.create(actionLayout, holder);
+ }
+ FacetUtil.addFacet(prototypeFacet);
+ }
+
+ @Override
+ public void process(ProcessContributeeMemberContext processMemberContext) {
+ final FacetHolder holder = processMemberContext.getFacetHolder();
+
+ Properties properties = processMemberContext.metadataProperties("actionLayout");
+ if (properties == null) {
+ // alternate key
+ properties = processMemberContext.metadataProperties("layout");
+ }
+
+
+ // cssClass
+ CssClassFacet cssClassFacet = CssClassFacetOnActionFromLayoutProperties.create(properties, holder);
+ FacetUtil.addFacet(cssClassFacet);
+
+
+ // cssClassFa
+ CssClassFaFacet cssClassFaFacet = CssClassFaFacetOnActionFromLayoutProperties.create(properties, holder);
+ FacetUtil.addFacet(cssClassFaFacet);
+
+
+ // describedAs
+ DescribedAsFacet describedAsFacet = DescribedAsFacetOnActionFromLayoutProperties.create(properties, holder);
+ FacetUtil.addFacet(describedAsFacet);
+
+
+ // hidden
+ HiddenFacet hiddenFacet = HiddenFacetOnActionFromLayoutProperties.create(properties, holder);
+ FacetUtil.addFacet(hiddenFacet);
+
+
+ // named
+ NamedFacet namedFacet = NamedFacetOnActionFromLayoutProperties.create(properties, holder);
+ FacetUtil.addFacet(namedFacet);
+
+
+ // position
+ ActionPositionFacet actionPositionFacet = ActionPositionFacetOnActionFromLayoutProperties.create(properties, holder);
+ if(actionPositionFacet == null) {
+ actionPositionFacet = new ActionPositionFacetFallback(holder);
+ }
+ FacetUtil.addFacet(actionPositionFacet);
+
+
+ // prototype
+ PrototypeFacet prototypeFacet = PrototypeFacetOnActionFromLayoutProperties.create(properties, holder);
+ FacetUtil.addFacet(prototypeFacet);
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFactory.java
deleted file mode 100644
index 725d3c4..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFactory.java
+++ /dev/null
@@ -1,168 +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.facets.actions.layout;
-
-
-import java.util.Properties;
-import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
-import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback;
-import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
-import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
-import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
-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;
-
-
-public class ActionLayoutFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
-
- public ActionLayoutFactory() {
- super(FeatureType.ACTIONS_ONLY);
- }
-
- @Override
- public void process(final ProcessMethodContext processMethodContext) {
-
- final FacetHolder holder = processMethodContext.getFacetHolder();
-
- Properties properties = processMethodContext.metadataProperties("actionLayout");
- if(properties == null) {
- // alternate key
- properties = processMethodContext.metadataProperties("layout");
- }
- final ActionLayout actionLayout = Annotations.getAnnotation(processMethodContext.getMethod(), ActionLayout.class);
-
-
- // cssClass
- CssClassFacet cssClassFacet = CssClassFacetOnActionFromLayoutProperties.create(properties, holder);
- if(cssClassFacet == null) {
- cssClassFacet = CssClassFacetForActionLayoutAnnotation.create(actionLayout, holder);
- }
- FacetUtil.addFacet(cssClassFacet);
-
-
- // cssClassFa
- CssClassFaFacet cssClassFaFacet = CssClassFaFacetOnActionFromLayoutProperties.create(properties, holder);
- if(cssClassFaFacet == null) {
- cssClassFaFacet = CssClassFaFacetForActionLayoutAnnotation.create(actionLayout, holder);
- }
- FacetUtil.addFacet(cssClassFaFacet);
-
-
- // describedAs
- DescribedAsFacet describedAsFacet = DescribedAsFacetOnActionFromLayoutProperties.create(properties, holder);
- if(describedAsFacet == null) {
- describedAsFacet = DescribedAsFacetForActionLayoutAnnotation.create(actionLayout, holder);
- }
- FacetUtil.addFacet(describedAsFacet);
-
-
- // hidden
- HiddenFacet hiddenFacet = HiddenFacetOnActionFromLayoutProperties.create(properties, holder);
- if(hiddenFacet == null) {
- hiddenFacet = HiddenFacetForActionLayoutAnnotation.create(actionLayout, holder);
- }
- FacetUtil.addFacet(hiddenFacet);
-
-
- // named
- NamedFacet namedFacet = NamedFacetOnActionFromLayoutProperties.create(properties, holder);
- if(namedFacet == null) {
- namedFacet = NamedFacetForActionLayoutAnnotation.create(actionLayout, holder);
- }
- FacetUtil.addFacet(namedFacet);
-
-
- // position
- ActionPositionFacet actionPositionFacet = ActionPositionFacetOnActionFromLayoutProperties.create(properties, holder);
- if(actionPositionFacet == null) {
- actionPositionFacet = ActionPositionFacetForActionLayoutAnnotation.create(actionLayout, holder);
- }
- if(actionPositionFacet == null) {
- actionPositionFacet = new ActionPositionFacetFallback(holder);
- }
- FacetUtil.addFacet(actionPositionFacet);
-
-
- // prototype
- PrototypeFacet prototypeFacet = PrototypeFacetOnActionFromLayoutProperties.create(properties, holder);
- if(prototypeFacet == null) {
- prototypeFacet = PrototypeFacetForActionLayoutAnnotation.create(actionLayout, holder);
- }
- FacetUtil.addFacet(prototypeFacet);
- }
-
- @Override
- public void process(ProcessContributeeMemberContext processMemberContext) {
- final FacetHolder holder = processMemberContext.getFacetHolder();
-
- Properties properties = processMemberContext.metadataProperties("actionLayout");
- if (properties == null) {
- // alternate key
- properties = processMemberContext.metadataProperties("layout");
- }
-
-
- // cssClass
- CssClassFacet cssClassFacet = CssClassFacetOnActionFromLayoutProperties.create(properties, holder);
- FacetUtil.addFacet(cssClassFacet);
-
-
- // cssClassFa
- CssClassFaFacet cssClassFaFacet = CssClassFaFacetOnActionFromLayoutProperties.create(properties, holder);
- FacetUtil.addFacet(cssClassFaFacet);
-
-
- // describedAs
- DescribedAsFacet describedAsFacet = DescribedAsFacetOnActionFromLayoutProperties.create(properties, holder);
- FacetUtil.addFacet(describedAsFacet);
-
-
- // hidden
- HiddenFacet hiddenFacet = HiddenFacetOnActionFromLayoutProperties.create(properties, holder);
- FacetUtil.addFacet(hiddenFacet);
-
-
- // named
- NamedFacet namedFacet = NamedFacetOnActionFromLayoutProperties.create(properties, holder);
- FacetUtil.addFacet(namedFacet);
-
-
- // position
- ActionPositionFacet actionPositionFacet = ActionPositionFacetOnActionFromLayoutProperties.create(properties, holder);
- if(actionPositionFacet == null) {
- actionPositionFacet = new ActionPositionFacetFallback(holder);
- }
- FacetUtil.addFacet(actionPositionFacet);
-
-
- // prototype
- PrototypeFacet prototypeFacet = PrototypeFacetOnActionFromLayoutProperties.create(properties, holder);
- FacetUtil.addFacet(prototypeFacet);
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/publish/annotation/PublishedActionFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/publish/annotation/PublishedActionFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/publish/annotation/PublishedActionFacetAnnotation.java
index 1c3098a..4da2697 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/publish/annotation/PublishedActionFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/publish/annotation/PublishedActionFacetAnnotation.java
@@ -21,12 +21,43 @@ package org.apache.isis.core.metamodel.facets.actions.publish.annotation;
import org.apache.isis.applib.annotation.PublishedAction;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacetAbstract;
public class PublishedActionFacetAnnotation extends PublishedActionFacetAbstract {
- public PublishedActionFacetAnnotation(PublishedAction.PayloadFactory eventCanonicalizer, final FacetHolder holder) {
- super(eventCanonicalizer, holder);
+ public static PublishedActionFacet create(
+ final PublishedAction publishedAction,
+ final FacetHolder holder) {
+
+ if (publishedAction == null) {
+ return null;
+ }
+
+ return new PublishedActionFacetAnnotation(newPayloadFactory(publishedAction), holder);
+ }
+
+
+ public PublishedActionFacetAnnotation(
+ final PublishedAction.PayloadFactory payloadFactory,
+ final FacetHolder holder) {
+ super(payloadFactory, holder);
}
+ private static PublishedAction.PayloadFactory newPayloadFactory(final PublishedAction publishedAction) {
+ final Class<? extends PublishedAction.PayloadFactory> payloadFactoryClass = publishedAction.value();
+ if(payloadFactoryClass == null) {
+ return null;
+ }
+
+ try {
+ return payloadFactoryClass.newInstance();
+ } catch (final InstantiationException e) {
+ return null;
+ } catch (final IllegalAccessException e) {
+ return null;
+ }
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/publish/annotation/PublishedActionFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/publish/annotation/PublishedActionFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/publish/annotation/PublishedActionFacetAnnotationFactory.java
index b558cb3..a0df302 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/publish/annotation/PublishedActionFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/publish/annotation/PublishedActionFacetAnnotationFactory.java
@@ -19,13 +19,8 @@
package org.apache.isis.core.metamodel.facets.actions.publish.annotation;
-import org.apache.isis.applib.annotation.PublishedAction;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.Annotations;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
public class PublishedActionFacetAnnotationFactory extends FacetFactoryAbstract {
@@ -35,26 +30,13 @@ public class PublishedActionFacetAnnotationFactory extends FacetFactoryAbstract
@Override
public void process(final ProcessMethodContext processMethodContext) {
- final PublishedAction annotation = Annotations.getAnnotation(processMethodContext.getMethod(), PublishedAction.class);
- FacetUtil.addFacet(create(annotation, processMethodContext.getFacetHolder()));
- }
- private PublishedActionFacet create(final PublishedAction annotation, final FacetHolder holder) {
- return annotation == null ? null : new PublishedActionFacetAnnotation(newPayloadFactory(annotation.value()), holder);
- }
+ //
+ // moved to ActionAnnotationFacetFactory
+ //
- private static PublishedAction.PayloadFactory newPayloadFactory(final Class<? extends PublishedAction.PayloadFactory> value) {
- if(value == null) {
- return null;
- }
- try {
- return (PublishedAction.PayloadFactory) value.newInstance();
- } catch (final InstantiationException e) {
- return null;
- } catch (final IllegalAccessException e) {
- return null;
- }
}
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/annotations/actionsemantics/ActionSemanticsFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/annotations/actionsemantics/ActionSemanticsFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/annotations/actionsemantics/ActionSemanticsFacetAnnotation.java
index d6c2636..7815848 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/annotations/actionsemantics/ActionSemanticsFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/annotations/actionsemantics/ActionSemanticsFacetAnnotation.java
@@ -19,14 +19,28 @@
package org.apache.isis.core.metamodel.facets.actions.semantics.annotations.actionsemantics;
+import org.apache.isis.applib.annotation.ActionSemantics;
import org.apache.isis.applib.annotation.ActionSemantics.Of;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
public class ActionSemanticsFacetAnnotation extends ActionSemanticsFacetAbstract {
+ public static ActionSemanticsFacet create(
+ final ActionSemantics actionSemantics,
+ final FacetHolder holder) {
+
+ if (actionSemantics == null) {
+ return null;
+ }
+
+ return new ActionSemanticsFacetAnnotation(actionSemantics.value(), holder);
+ }
+
public ActionSemanticsFacetAnnotation(Of of, final FacetHolder holder) {
super(of, holder);
}
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/annotations/actionsemantics/ActionSemanticsFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/annotations/actionsemantics/ActionSemanticsFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/annotations/actionsemantics/ActionSemanticsFacetAnnotationFactory.java
index 3e0b3ea..7a95b9b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/annotations/actionsemantics/ActionSemanticsFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/annotations/actionsemantics/ActionSemanticsFacetAnnotationFactory.java
@@ -19,13 +19,8 @@
package org.apache.isis.core.metamodel.facets.actions.semantics.annotations.actionsemantics;
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.Annotations;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
public class ActionSemanticsFacetAnnotationFactory extends FacetFactoryAbstract {
@@ -35,12 +30,11 @@ public class ActionSemanticsFacetAnnotationFactory extends FacetFactoryAbstract
@Override
public void process(final ProcessMethodContext processMethodContext) {
- final ActionSemantics annotation = Annotations.getAnnotation(processMethodContext.getMethod(), ActionSemantics.class);
- FacetUtil.addFacet(create(annotation, processMethodContext.getFacetHolder()));
- }
- private ActionSemanticsFacet create(final ActionSemantics annotation, final FacetHolder holder) {
- return annotation == null ? null : new ActionSemanticsFacetAnnotation(annotation.value(), holder);
+ //
+ // now handled by ActionAnnotationFacetFactory
+ // because of the interdependency between action semantics and command reification.
+ //
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/fallback/ActionSemanticsFacetFallbackToNonIdempotentFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/fallback/ActionSemanticsFacetFallbackToNonIdempotentFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/fallback/ActionSemanticsFacetFallbackToNonIdempotentFactory.java
index 64674a5..dcd54fa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/fallback/ActionSemanticsFacetFallbackToNonIdempotentFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/fallback/ActionSemanticsFacetFallbackToNonIdempotentFactory.java
@@ -35,6 +35,11 @@ public class ActionSemanticsFacetFallbackToNonIdempotentFactory extends FacetFac
public void process(final ProcessMethodContext processMethodContext) {
final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
if(facetHolder.containsDoOpFacet(ActionSemanticsFacet.class)) {
+
+ // expect this always to be the case, because ActionSemanticsFacetAnnotationFactory will always install
+ // an action semantics facet, either for @ActionSemantics or for @Action(semantics=...)
+
+ // therefore, this facet factory is a no-op and can (probably, I reckon) be deleted
return;
}
FacetUtil.addFacet(new ActionSemanticsFacetFallbackToNonIdempotent(facetHolder));
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
index 24636c1..19907d0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
@@ -24,7 +24,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
-import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.TypeOf;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -58,10 +58,13 @@ public class TypeOfFacetOnActionAnnotationFactory extends FacetFactoryAbstract {
return;
}
- final Collection collection = Annotations.getAnnotation(method, Collection.class);
- if (collection != null && collection.typeOf() != null) {
- FacetUtil.addFacet(new TypeOfFacetForActionAnnotation(collection.typeOf(), getSpecificationLoader(), processMethodContext.getFacetHolder()));
- return;
+ final Action action = Annotations.getAnnotation(method, Action.class);
+ if (action != null) {
+ final Class<?> typeOf = action.typeOf();
+ if(typeOf != null && typeOf != Object.class) {
+ FacetUtil.addFacet(new TypeOfFacetForActionAnnotation(typeOf, getSpecificationLoader(), processMethodContext.getFacetHolder()));
+ return;
+ }
}
final TypeOf annotation = Annotations.getAnnotation(method, TypeOf.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
index b97374a..6fc2577 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
@@ -40,12 +40,6 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
@Override
public void process(final ProcessMethodContext processMethodContext) {
- final Method method = processMethodContext.getMethod();
- final Collection collection = Annotations.getAnnotation(method, Collection.class);
- if (collection == null) {
- return;
- }
-
processInteraction(processMethodContext);
processHidden(processMethodContext);
processEditing(processMethodContext);
@@ -79,7 +73,7 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
private void processTypeOf(final ProcessMethodContext processMethodContext) {
- // typeOf is handled by TypeOfFacetOnActionAnnotationFactory, because the
+ // typeOf is handled by TypeOfFacetOnCollectionAnnotationFactory, because the
// deprecated annotations etc that must also be supported.
}
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/DisabledFacetForCollectionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/DisabledFacetForCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/DisabledFacetForCollectionAnnotation.java
index ed881f4..1424607 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/DisabledFacetForCollectionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/DisabledFacetForCollectionAnnotation.java
@@ -20,7 +20,7 @@
package org.apache.isis.core.metamodel.facets.collections.collection;
import org.apache.isis.applib.annotation.Collection;
-import org.apache.isis.applib.annotation.EditPolicy;
+import org.apache.isis.applib.annotation.Editing;
import org.apache.isis.applib.annotation.When;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -29,11 +29,18 @@ import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstr
public class DisabledFacetForCollectionAnnotation extends DisabledFacetAbstractImpl {
- public static DisabledFacet create(final Collection collection, final FacetHolder holder) {
- final EditPolicy editPolicy = collection.editing();
+ public static DisabledFacet create(
+ final Collection collection,
+ final FacetHolder holder) {
+
+ if (collection == null) {
+ return null;
+ }
+
+ final Editing editing = collection.editing();
final String disabledReason = collection.editingDisabledReason();
- switch (editPolicy) {
+ switch (editing) {
case AS_CONFIGURED:
// nothing needs to be done here; the DomainObjectFactory (processing @DomainObject annotation)
http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/HiddenFacetForCollectionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/HiddenFacetForCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/HiddenFacetForCollectionAnnotation.java
index 9de9f87..aee5058 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/HiddenFacetForCollectionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/HiddenFacetForCollectionAnnotation.java
@@ -29,9 +29,20 @@ import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
public class HiddenFacetForCollectionAnnotation extends HiddenFacetAbstract {
- public static HiddenFacet create(final Collection collection, final FacetHolder holder) {
+ public static HiddenFacet create(
+ final Collection collection,
+ final FacetHolder holder) {
+
+ if (collection == null) {
+ return null;
+ }
+
final Where where = collection.hidden();
- return where != null && where != Where.NOT_SPECIFIED ? new HiddenFacetForCollectionAnnotation(where, holder) : null;
+ if (where != null && where != Where.NOT_SPECIFIED) {
+ return new HiddenFacetForCollectionAnnotation(where, holder);
+ }
+
+ return null;
}
private HiddenFacetForCollectionAnnotation(final Where where, final FacetHolder holder) {