This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 85bac73e043fd93d0162690a51abf521ff746786
Author: danhaywood <d...@haywood-associates.co.uk>
AuthorDate: Wed Feb 12 07:34:12 2020 +0000

    ISIS-2158: adds new ActionExplicitFacet if @Action is present
    
    ... this is intended to simplify the method orphan processing, but not 
there yet.
---
 .../action/ActionAnnotationFacetFactory.java       | 11 ++++
 .../action/explicit/ActionExplicitFacet.java       | 35 +++++++++++++
 .../explicit/ActionExplicitFacetAbstract.java      | 61 ++++++++++++++++++++++
 .../ActionExplicitFacetForActionAnnotation.java    | 40 ++++++++++++++
 4 files changed, 147 insertions(+)

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 44a8c5c..aee693f 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
@@ -31,6 +31,7 @@ import 
org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import 
org.apache.isis.core.metamodel.facets.actions.action.associateWith.AssociatedWithFacetForActionAnnotation;
 import 
org.apache.isis.core.metamodel.facets.actions.action.command.CommandFacetForActionAnnotation;
+import 
org.apache.isis.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation;
 import 
org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation;
 import 
org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetAbstract;
 import 
org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetDefault;
@@ -61,6 +62,7 @@ public class ActionAnnotationFacetFactory extends 
FacetFactoryAbstract {
         
         val actionIfAny = 
processMethodContext.synthesizeOnMethodOrMixinType(Action.class);
         
+        processExplicit(processMethodContext, actionIfAny);
         processInvocation(processMethodContext, actionIfAny);
         processHidden(processMethodContext, actionIfAny);
         processRestrictTo(processMethodContext, actionIfAny);
@@ -79,6 +81,15 @@ public class ActionAnnotationFacetFactory extends 
FacetFactoryAbstract {
     }
 
 
+    void processExplicit(final ProcessMethodContext processMethodContext, 
Optional<Action> actionIfAny) {
+        val holder = processMethodContext.getFacetHolder();
+
+        // check for @Action at all.
+        val facet = ActionExplicitFacetForActionAnnotation.create(actionIfAny, 
holder);
+        super.addFacet(facet);
+    }
+
+
     void processInvocation(final ProcessMethodContext processMethodContext, 
Optional<Action> actionIfAny) {
 
         val actionMethod = processMethodContext.getMethod();
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/explicit/ActionExplicitFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/explicit/ActionExplicitFacet.java
new file mode 100644
index 0000000..b5d3380
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/explicit/ActionExplicitFacet.java
@@ -0,0 +1,35 @@
+/*
+ *  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.explicit;
+
+import java.util.List;
+
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+
+/**
+ * Indicates that this method has been explicitly indicated as an action.
+ */
+public interface ActionExplicitFacet extends Facet {
+
+}
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/explicit/ActionExplicitFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/explicit/ActionExplicitFacetAbstract.java
new file mode 100644
index 0000000..ab2fff6
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/explicit/ActionExplicitFacetAbstract.java
@@ -0,0 +1,61 @@
+/*
+ *  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.explicit;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.isis.applib.events.domain.AbstractDomainEvent;
+import org.apache.isis.applib.events.domain.ActionDomainEvent;
+import org.apache.isis.applib.services.i18n.TranslatableString;
+import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.applib.services.wrapper.events.InteractionEvent;
+import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
+import org.apache.isis.applib.services.wrapper.events.ValidityEvent;
+import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
+import org.apache.isis.core.metamodel.facets.DomainEventHelper;
+import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
+import 
org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet;
+import org.apache.isis.core.metamodel.interactions.ActionInteractionContext;
+import org.apache.isis.core.metamodel.interactions.ActionValidityContext;
+import org.apache.isis.core.metamodel.interactions.InteractionContext;
+import org.apache.isis.core.metamodel.interactions.UsabilityContext;
+import org.apache.isis.core.metamodel.interactions.ValidityContext;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.val;
+
+public abstract class ActionExplicitFacetAbstract
+extends FacetAbstract
+implements ActionExplicitFacet {
+
+    public ActionExplicitFacetAbstract(
+            final FacetHolder holder) {
+        
+        super(ActionExplicitFacet.class, holder, Derivation.NOT_DERIVED);
+    }
+}
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/explicit/ActionExplicitFacetForActionAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/explicit/ActionExplicitFacetForActionAnnotation.java
new file mode 100644
index 0000000..c435332
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/explicit/ActionExplicitFacetForActionAnnotation.java
@@ -0,0 +1,40 @@
+/*
+ *  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.explicit;
+
+import java.util.Optional;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+
+public class ActionExplicitFacetForActionAnnotation extends 
ActionExplicitFacetAbstract {
+
+    private ActionExplicitFacetForActionAnnotation(final FacetHolder holder) {
+        super(holder);
+    }
+
+    public static ActionExplicitFacet create(Optional<Action> actionIfAny, 
FacetedMethod holder) {
+        return actionIfAny
+                .map(x -> new ActionExplicitFacetForActionAnnotation(holder))
+                .orElse(null);
+    }
+
+}

Reply via email to