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); + } + +}