You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2019/09/30 08:37:33 UTC

[isis] branch v2 updated: ISIS-2158: moves programming model extension @Model -> 'incubator'

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

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


The following commit(s) were added to refs/heads/v2 by this push:
     new cfedfa9  ISIS-2158: moves programming model extension @Model -> 'incubator'
cfedfa9 is described below

commit cfedfa988ca6b811173d9857312c1f42248179cb
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Sep 30 10:37:25 2019 +0200

    ISIS-2158: moves programming model extension @Model -> 'incubator'
---
 .../progmodel/ProgrammingModelPlugin.java          | 14 ++++--
 .../dflt/ProgrammingModelFacetsJava8.java          | 14 +++---
 examples/smoketests/pom.xml                        | 54 +++-------------------
 .../org/apache/isis/applib/annotation/Model.java   |  0
 .../incubator/SupportingMethodPlugin.java          | 27 ++++-------
 .../SupportingMethodValidatorRefinerFactory.java   |  0
 ...isis.metamodel.progmodel.ProgrammingModelPlugin |  1 +
 extensions/pom.xml                                 |  1 +
 8 files changed, 34 insertions(+), 77 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModelPlugin.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModelPlugin.java
index 544a7d8..e95f08f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModelPlugin.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModelPlugin.java
@@ -33,10 +33,18 @@ public interface ProgrammingModelPlugin {
     /**
      * Guides the priority at which facet factories are registered.
      * There is no other use.
+     * @apiNote extend as needed
      */
     public static enum FacetFactoryCategory {
-        // extend as needed ...
-        VALUE
+        /**
+         * registers the provided factory after built-in value factory providers
+         */
+        VALUE,
+        
+        /**
+         * registers the provided factory after all built-in factories
+         */
+        VALIDATION,
         ;
     }
 
@@ -58,7 +66,7 @@ public interface ProgrammingModelPlugin {
 
     }
 
-    public static FactoryCollector collector() {
+    public static FactoryCollector newCollector() {
         return new FactoryCollector() {
 
             final SetMultimap<FacetFactoryCategory, FacetFactory> factoriesByCategory =
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
index 4940402..432bd4f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
@@ -18,7 +18,6 @@
 package org.apache.isis.metamodel.progmodels.dflt;
 
 import java.util.List;
-import java.util.Set;
 
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.context._Plugin;
@@ -30,7 +29,6 @@ import org.apache.isis.metamodel.facets.actions.layout.ActionLayoutFacetFactory;
 import org.apache.isis.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromDomainServiceFacetFactory;
 import org.apache.isis.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacetFactory;
 import org.apache.isis.metamodel.facets.actions.notinservicemenu.derived.NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory;
-import org.apache.isis.metamodel.facets.actions.support.SupportingMethodValidatorRefinerFactory;
 import org.apache.isis.metamodel.facets.actions.validate.method.ActionValidationFacetViaMethodFactory;
 import org.apache.isis.metamodel.facets.all.i18n.TranslationFacetFactory;
 import org.apache.isis.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessorFactory;
@@ -162,6 +160,8 @@ import org.apache.isis.metamodel.progmodel.ProgrammingModelPlugin;
 import org.apache.isis.metamodel.progmodel.ProgrammingModelPlugin.FacetFactoryCategory;
 import org.apache.isis.metamodel.progmodel.ProgrammingModelPlugin.FactoryCollector;
 
+import lombok.val;
+
 public final class ProgrammingModelFacetsJava8 extends ProgrammingModelAbstract {
 
     public ProgrammingModelFacetsJava8(final DeprecatedPolicy deprecatedPolicy) {
@@ -384,7 +384,7 @@ public final class ProgrammingModelFacetsJava8 extends ProgrammingModelAbstract
         addFactory(new Jdk8OffsetDateTimeValueFacetUsingSemanticsProviderFactory());
         addFactory(new Jdk8LocalDateTimeValueFacetUsingSemanticsProviderFactory());
 
-        // plugin value factories
+        // plugin factories that contribute values
         factoriesFromPlugins.getFactories(FacetFactoryCategory.VALUE).forEach(this::addFactory);
 
         // written to not trample over TypeOf if already installed
@@ -411,8 +411,8 @@ public final class ProgrammingModelFacetsJava8 extends ProgrammingModelAbstract
 
         addFactory(new ViewModelSemanticCheckingFacetFactory());
         
-        // possibly required at the very end
-        addFactory(new SupportingMethodValidatorRefinerFactory());
+        // plugin value factories
+        factoriesFromPlugins.getFactories(FacetFactoryCategory.VALIDATION).forEach(this::addFactory);
 
     }
 
@@ -426,8 +426,8 @@ public final class ProgrammingModelFacetsJava8 extends ProgrammingModelAbstract
     // -- HELPER
 
     private static FactoryCollector discoverFactories() {
-        final Set<ProgrammingModelPlugin> plugins = _Plugin.loadAll(ProgrammingModelPlugin.class);
-        final FactoryCollector collector = ProgrammingModelPlugin.collector();
+        val plugins = _Plugin.loadAll(ProgrammingModelPlugin.class);
+        val collector = ProgrammingModelPlugin.newCollector();
         plugins.forEach(plugin->{
             plugin.plugin(collector);
         });
diff --git a/examples/smoketests/pom.xml b/examples/smoketests/pom.xml
index 0e939cd..56ced4d 100644
--- a/examples/smoketests/pom.xml
+++ b/examples/smoketests/pom.xml
@@ -66,58 +66,16 @@
 			<artifactId>isis-plugins-jaxrs-resteasy-4</artifactId>
 		</dependency>
 
-		<!-- SPRING -->
-
-<!-- 		<dependency> -->
-<!-- 			<groupId>org.springframework.boot</groupId> -->
-<!-- 			<artifactId>spring-boot-starter-tomcat</artifactId> -->
-<!-- 			<version>${spring-boot.version}</version> -->
-<!-- 			<scope>provided</scope> -->
-<!-- 		</dependency> -->
-
-		<!-- ISIS API -->
-<!-- 		<dependency> -->
-<!-- 			<groupId>org.apache.isis.core</groupId> -->
-<!-- 			<artifactId>isis-applib</artifactId> -->
-<!-- 		</dependency> -->
-
-		<!-- ISIS CORE PLUGINS -->
-<!-- 		<dependency> -->
-<!-- 			<groupId>org.apache.isis.core</groupId> -->
-<!-- 			<artifactId>isis-plugins-codegen-bytebuddy</artifactId> -->
-<!-- 		</dependency> -->
-
-<!-- 		<dependency> -->
-<!-- 			<groupId>org.apache.isis.core</groupId> -->
-<!-- 			<artifactId>isis-plugins-jdo-datanucleus-5</artifactId> -->
-<!-- 			<exclusions> -->
-<!-- 				<exclusion> -->
-<!-- 					<groupId>org.slf4j</groupId> -->
-<!-- 					<artifactId>slf4j-api</artifactId> -->
-<!-- 				</exclusion> -->
-<!-- 			</exclusions> -->
-<!-- 		</dependency> -->
-
-<!-- 		<dependency> -->
-<!-- 			<groupId>org.apache.isis.core</groupId> -->
-<!-- 			<artifactId>isis-plugins-jaxrs-resteasy-4</artifactId> -->
-<!-- 		</dependency> -->
-
-<!-- 		<dependency> -->
-<!-- 			<groupId>org.apache.isis.core</groupId> -->
-<!-- 			<artifactId>isis-plugins-security-shiro</artifactId> -->
-<!-- 			<exclusions> -->
-<!-- 				<exclusion> -->
-<!-- 					<groupId>org.slf4j</groupId> -->
-<!-- 					<artifactId>slf4j-api</artifactId> -->
-<!-- 				</exclusion> -->
-<!-- 			</exclusions> -->
-<!-- 		</dependency> -->
-		
 		<!-- ISIS EXTENSIONS -->
 		
 		<dependency>
 			<groupId>org.apache.isis.extensions</groupId>
+			<artifactId>isis-extensions-incubator</artifactId>
+			<version>${isis.version}</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.apache.isis.extensions</groupId>
 			<artifactId>isis-extensions-fixtures</artifactId>
 			<version>${isis.version}</version>
 		</dependency>
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Model.java b/extensions/incubator/src/main/java/org/apache/isis/applib/annotation/Model.java
similarity index 100%
copy from core/applib/src/main/java/org/apache/isis/applib/annotation/Model.java
copy to extensions/incubator/src/main/java/org/apache/isis/applib/annotation/Model.java
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Model.java b/extensions/incubator/src/main/java/org/apache/isis/extensions/incubator/SupportingMethodPlugin.java
similarity index 55%
rename from core/applib/src/main/java/org/apache/isis/applib/annotation/Model.java
rename to extensions/incubator/src/main/java/org/apache/isis/extensions/incubator/SupportingMethodPlugin.java
index 1cdcd75..20cde3b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Model.java
+++ b/extensions/incubator/src/main/java/org/apache/isis/extensions/incubator/SupportingMethodPlugin.java
@@ -16,27 +16,16 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+package org.apache.isis.extensions.incubator;
 
-package org.apache.isis.applib.annotation;
+import org.apache.isis.metamodel.facets.actions.support.SupportingMethodValidatorRefinerFactory;
+import org.apache.isis.metamodel.progmodel.ProgrammingModelPlugin;
 
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+public class SupportingMethodPlugin implements ProgrammingModelPlugin {
 
-/**
- * Indicates that a method is a supporting-method, one that contributes (hide, validate, ...) 
- * to an <em>Action/</em>.
- * <p>
- * By placing the {@link Model} annotation on a method, a contract with the metamodel is enforced, 
- * such that this method must be recognized and can not be be ignored.
- *
- * @since 2.0
- */
-@Inherited
-@Target({ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Model {
+    @Override
+    public void plugin(FactoryCollector collector) {
+        collector.addFactory(new SupportingMethodValidatorRefinerFactory(), FacetFactoryCategory.VALIDATION);
+    }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/support/SupportingMethodValidatorRefinerFactory.java b/extensions/incubator/src/main/java/org/apache/isis/metamodel/facets/actions/support/SupportingMethodValidatorRefinerFactory.java
similarity index 100%
rename from core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/support/SupportingMethodValidatorRefinerFactory.java
rename to extensions/incubator/src/main/java/org/apache/isis/metamodel/facets/actions/support/SupportingMethodValidatorRefinerFactory.java
diff --git a/extensions/incubator/src/main/resources/META-INF/services/org.apache.isis.metamodel.progmodel.ProgrammingModelPlugin b/extensions/incubator/src/main/resources/META-INF/services/org.apache.isis.metamodel.progmodel.ProgrammingModelPlugin
new file mode 100644
index 0000000..a38e67a
--- /dev/null
+++ b/extensions/incubator/src/main/resources/META-INF/services/org.apache.isis.metamodel.progmodel.ProgrammingModelPlugin
@@ -0,0 +1 @@
+org.apache.isis.extensions.incubator.SupportingMethodPlugin
\ No newline at end of file
diff --git a/extensions/pom.xml b/extensions/pom.xml
index 155a066..5b921c5 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -219,6 +219,7 @@
 		<module>markdown</module>
 		<module>fixtures</module>
 		<module>specsupport</module>
+		<module>incubator</module>
 		<module>legacy</module>
 		<module>viewer-wicket-excel</module>
 		<module>secman</module>