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/10/07 14:28:58 UTC

[isis] branch v2 updated: ISIS-2158: reverting the idea of storing validators unique by type

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 95b99e7  ISIS-2158: reverting the idea of storing validators unique by type
95b99e7 is described below

commit 95b99e780770d1dc2491e87a2dcbc84ef14ff0bf
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Oct 7 16:28:50 2019 +0200

    ISIS-2158: reverting the idea of storing validators unique by type
    
    - would have allowed lazy instantiation
    - this concept fails on required multiple instances of
    MetaModelValidatorVisiting
    - keep it simple for now
---
 .../isis/metamodel/progmodel/ProgrammingModel.java | 19 +++------
 .../progmodel/ProgrammingModelAbstract.java        | 49 ++++++++++------------
 .../specloader/ProgrammingModelServiceDefault.java | 12 +++---
 .../jdo/metamodel/JdoProgrammingModelPlugin.java   |  4 +-
 .../validate/ValidateDomainModel.java              |  3 +-
 5 files changed, 38 insertions(+), 49 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModel.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModel.java
index 8873c8c..9e237b3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModel.java
@@ -22,14 +22,11 @@ package org.apache.isis.metamodel.progmodel;
 import java.util.function.Supplier;
 import java.util.stream.Stream;
 
-import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.functions._Functions;
 import org.apache.isis.metamodel.facets.FacetFactory;
 import org.apache.isis.metamodel.specloader.validator.MetaModelValidator;
 import org.apache.isis.metamodel.specloader.validator.MetaModelValidatorVisiting;
 
-import lombok.val;
-
 public interface ProgrammingModel {
 
     // -- ENUM TYPES
@@ -113,20 +110,17 @@ public interface ProgrammingModel {
     
     <T extends FacetFactory> void addFactory(
             FacetProcessingOrder order, 
-            Class<T> type, 
-            Supplier<? extends T> supplier, 
+            T instance, 
             Marker ... markers);
     
     <T extends MetaModelValidator> void addValidator(
             ValidationOrder order, 
-            Class<T> type, 
-            Supplier<? extends T> supplier, 
+            T instance, 
             Marker ... markers);
     
     <T extends ObjectSpecificationPostProcessor> void addPostProcessor(
             PostProcessingOrder order, 
-            Class<T> type, 
-            Supplier<? extends T> supplier, 
+            T instance, 
             Marker ... markers);
     
     
@@ -143,7 +137,7 @@ public interface ProgrammingModel {
             Marker ... markers) {
         
         final Supplier<FacetFactory> supplier = _Functions.uncheckedSupplier(type::newInstance);
-        addFactory(order, type, _Casts.uncheckedCast(supplier), markers);
+        addFactory(order, supplier.get(), markers);
     }
     
     /** shortcut for see {@link #addValidator(ValidationOrder, Class, Supplier, Marker...)} */
@@ -151,9 +145,8 @@ public interface ProgrammingModel {
             MetaModelValidator validator, 
             Marker ... markers) {
         
-        val type = validator.getClass();
         final Supplier<MetaModelValidator> supplier = ()->validator;
-        addValidator(ValidationOrder.A2_AFTER_BUILTIN, type, _Casts.uncheckedCast(supplier), markers);
+        addValidator(ValidationOrder.A2_AFTER_BUILTIN, supplier.get(), markers);
     }
 
     
@@ -169,7 +162,7 @@ public interface ProgrammingModel {
             Marker ... markers) {
         
         final Supplier<ObjectSpecificationPostProcessor> supplier = _Functions.uncheckedSupplier(type::newInstance);
-        addPostProcessor(order, type, _Casts.uncheckedCast(supplier), markers);
+        addPostProcessor(order, supplier.get(), markers);
     }
 
     
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModelAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModelAbstract.java
index 9277b7c..d30f336 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModelAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/progmodel/ProgrammingModelAbstract.java
@@ -22,19 +22,17 @@ package org.apache.isis.metamodel.progmodel;
 import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.function.Supplier;
 import java.util.stream.Stream;
 
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Multimaps;
 import org.apache.isis.commons.internal.collections._Multimaps.SetMultimap;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.metamodel.facets.FacetFactory;
 import org.apache.isis.metamodel.specloader.validator.MetaModelValidator;
 
 import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.NonNull;
 import lombok.Value;
 import lombok.val;
 
@@ -52,13 +50,14 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
         
         assertNotInitialized();
         
-//        for (val facetFactory : snapshot(filter)) {
-//            if(facetFactory instanceof MetaModelValidatorRefiner) {
-//                val metaModelValidatorRefiner = (MetaModelValidatorRefiner) facetFactory;
-//                metaModelValidatorRefiner.refineMetaModelValidator(metaModelValidator);
-//            }
-//        }
-        
+        // for all registered facet-factories that also implement MetaModelRefiner
+        for (val facetFactory : snapshotFactories(filter)) {
+            if(facetFactory instanceof MetaModelRefiner) {
+                val metaModelValidatorRefiner = (MetaModelRefiner) facetFactory;
+                metaModelValidatorRefiner.refineProgrammingModel(this);
+            }
+        }
+
         this.unmodifiableFactories = 
                 Collections.unmodifiableList(snapshotFactories(filter));
         this.unmodifiableValidators = 
@@ -73,25 +72,24 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
     @Override
     public <T extends FacetFactory> void addFactory(
             FacetProcessingOrder order, 
-            Class<T> type, 
-            Supplier<? extends T> supplier, 
+            T instance, 
             Marker ... markers) {
         
         assertNotInitialized();
-        
-        val factoryEntry = ProgrammingModelEntry.of(type, supplier, markers);
+        val factoryEntry = ProgrammingModelEntry.of(instance, markers);
         factoryEntriesByOrder.putElement(order, factoryEntry);
     }
 
     @Override
     public <T extends MetaModelValidator> void addValidator(
             ValidationOrder order, 
-            Class<T> type,
-            Supplier<? extends T> supplier, 
+            T instance,
             Marker... markers) {
         
+        System.out.println("### " + instance);
+        
         assertNotInitialized();
-        val validatorEntry = ProgrammingModelEntry.of(type, supplier, markers);
+        val validatorEntry = ProgrammingModelEntry.of(instance, markers);
         validatorEntriesByOrder.putElement(order, validatorEntry);
     }
     
@@ -99,12 +97,11 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
     @Override
     public <T extends ObjectSpecificationPostProcessor> void addPostProcessor(
             PostProcessingOrder order, 
-            Class<T> type,
-            Supplier<? extends T> supplier, 
+            T instance,
             Marker... markers) {
         
         assertNotInitialized();
-        val postProcessorEntry = ProgrammingModelEntry.of(type, supplier, markers);
+        val postProcessorEntry = ProgrammingModelEntry.of(instance, markers);
         postProcessorEntriesByOrder.putElement(order, postProcessorEntry);
     }
     
@@ -130,12 +127,10 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
 
     // -- VALUE TYPE
     
-    @Value(staticConstructor = "of") @EqualsAndHashCode(of = "type")
+    @Value(staticConstructor = "of") @EqualsAndHashCode(of = "instance")
     static final class ProgrammingModelEntry<T> {
-        @NonNull Class<T> type;
-        @NonNull Supplier<? extends T> supplier; 
+        T instance;
         Marker[] markers;
-        @Getter(lazy = true) final T instance = supplier.get();
     }
     
     // -- SNAPSHOT HELPER
@@ -151,7 +146,7 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
                 continue;
             }
             for(val factoryEntry : factoryEntrySet) {
-                if(filter.acceptFactoryType(factoryEntry.getType(), factoryEntry.getMarkers())) {
+                if(filter.acceptFactoryType(factoryEntry.getInstance().getClass(), factoryEntry.getMarkers())) {
                     factories.add(factoryEntry.getInstance());
                 }
             }
@@ -170,7 +165,7 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
                 continue;
             }
             for(val validatorEntry : validatorEntrySet) {
-                if(filter.acceptValidator(validatorEntry.getType(), validatorEntry.getMarkers())) {
+                if(filter.acceptValidator(validatorEntry.getInstance().getClass(), validatorEntry.getMarkers())) {
                     validators.add(validatorEntry.getInstance());
                 }
             }
@@ -189,7 +184,7 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
                 continue;
             }
             for(val postProcessorEntry : postProcessorEntrySet) {
-                if(filter.acceptPostProcessor(postProcessorEntry.getType(), postProcessorEntry.getMarkers())) {
+                if(filter.acceptPostProcessor(postProcessorEntry.getInstance().getClass(), postProcessorEntry.getMarkers())) {
                     postProcessors.add(postProcessorEntry.getInstance());
                 }
             }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/ProgrammingModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/ProgrammingModelServiceDefault.java
index ab8ac88..7bc3741 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/ProgrammingModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/ProgrammingModelServiceDefault.java
@@ -60,7 +60,7 @@ public class ProgrammingModelServiceDefault implements ProgrammingModelService {
     
     private ProgrammingModel createProgrammingModel() {
         
-        log.debug("About to create the ProgrammingModel.");
+        log.info("About to create the ProgrammingModel.");
 
         val programmingModel = new ProgrammingModelFacetsJava8();
 
@@ -74,7 +74,7 @@ public class ProgrammingModelServiceDefault implements ProgrammingModelService {
         // finalize the programming model (make it immutable)
         programmingModel.init(programmingModelInitFilter);
         
-        if(log.isDebugEnabled()) {
+        if(log.isInfoEnabled()) {
             
             val refinerCount = metaModelRefiners.size();
             
@@ -83,13 +83,13 @@ public class ProgrammingModelServiceDefault implements ProgrammingModelService {
             val postProcessorCount = programmingModel.streamPostProcessors().count();
             
             
-            log.debug("Remaining after asking {} refiners, and passing filter {}:",
+            log.info("Collected after asking {} refiners, and passing filter '{}':",
                     refinerCount,
                     programmingModelInitFilter.getClass());
             
-            log.debug(" - {} facet-factories", facetFactoryCount);
-            log.debug(" - {} validators", validatorCount);
-            log.debug(" - {} post-processors", postProcessorCount);
+            log.info(" - {} facet-factories", facetFactoryCount);
+            log.info(" - {} validators", validatorCount);
+            log.info(" - {} post-processors", postProcessorCount);
             
         }
         
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/JdoProgrammingModelPlugin.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/JdoProgrammingModelPlugin.java
index 4e63d44..a3b8504 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/JdoProgrammingModelPlugin.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/JdoProgrammingModelPlugin.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.jdo.metamodel;
 
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
 
 import org.apache.isis.jdo.metamodel.specloader.validator.JdoMetaModelValidator;
 import org.apache.isis.metamodel.facetapi.MetaModelRefiner;
@@ -33,7 +33,7 @@ import org.apache.isis.runtime.system.context.IsisContext;
 
 import lombok.val;
 
-@Component
+@Service
 public class JdoProgrammingModelPlugin implements MetaModelRefiner {
 
     @Override
diff --git a/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/validate/ValidateDomainModel.java b/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/validate/ValidateDomainModel.java
index 7bffb35..c825ade 100644
--- a/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/validate/ValidateDomainModel.java
+++ b/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/validate/ValidateDomainModel.java
@@ -52,11 +52,12 @@ public class ValidateDomainModel implements Runnable {
     @Override
     public void run() {
 
+        val specificationLoader = IsisContext.getSpecificationLoader();
+        
         val programmingModelService = IsisContext.getServiceRegistry()
                 .lookupServiceElseFail(ProgrammingModelService.class);
         this.validationFailures = programmingModelService.getValidationResult();
         
-        val specificationLoader = IsisContext.getSpecificationLoader();
 
         val objectSpecifications = specificationLoader.snapshotSpecifications();