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();