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 2021/04/13 07:03:41 UTC

[isis] branch master updated: ISIS-2604: simplify mm validation (2)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new c1bec5e  ISIS-2604: simplify mm validation (2)
c1bec5e is described below

commit c1bec5eb2828d2b6388909f8f6e04fb5443395b5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Apr 13 09:03:29 2021 +0200

    ISIS-2604: simplify mm validation (2)
---
 .../ViewModelSemanticCheckingFacetFactory.java     | 71 ++++++++++++----------
 .../DomainObjectAnnotationFacetFactory.java        | 11 +++-
 .../mixin/MetaModelValidatorForMixinTypes.java     | 23 ++++---
 .../object/query/VisitorForClauseAbstract.java     | 11 +++-
 .../facets/object/query/VisitorForFromClause.java  | 24 ++++++--
 .../object/query/VisitorForVariablesClause.java    | 12 +++-
 ...ndatoryFromJdoColumnAnnotationFacetFactory.java | 11 ++--
 7 files changed, 101 insertions(+), 62 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java
index 8640de7..f8a7169 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.core.metamodel.facets.object;
 
-
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.RecreatableDomainObject;
 import org.apache.isis.applib.annotation.DomainObject;
@@ -30,13 +29,14 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.all.deficiencies.DeficiencyFacet;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForValidationFailures;
 
 import lombok.val;
 
-
-public class ViewModelSemanticCheckingFacetFactory extends FacetFactoryAbstract
+public class ViewModelSemanticCheckingFacetFactory 
+extends FacetFactoryAbstract
 implements MetaModelRefiner {
 
 
@@ -74,55 +74,62 @@ implements MetaModelRefiner {
         final boolean annotatedWithDomainObject = domainObject != null;
 
         if(implementsViewModel && implementsRecreatableDomainObject) {
-            validator.onFailure(
+            DeficiencyFacet.appendTo(
                     facetHolder,
                     Identifier.classIdentifier(LogicalType.fqcn(cls)),
-                    "Inconsistent view model / domain object semantics; %s should not implement "
-                    + "both %s and %s interfaces (implement one or the other)",
-                    cls.getName(),
-                    org.apache.isis.applib.ViewModel.class.getSimpleName(),
-                    org.apache.isis.applib.RecreatableDomainObject.class.getSimpleName());
+                    String.format(
+                        "Inconsistent view model / domain object semantics; %s should not implement "
+                        + "both %s and %s interfaces (implement one or the other)",
+                        cls.getName(),
+                        org.apache.isis.applib.ViewModel.class.getSimpleName(),
+                        org.apache.isis.applib.RecreatableDomainObject.class.getSimpleName())
+                    );
 
         }
         if(implementsViewModel && annotatedWithDomainObject) {
-            validator.onFailure(
+            DeficiencyFacet.appendTo(
                     facetHolder,
                     Identifier.classIdentifier(LogicalType.fqcn(cls)),
-                    "Inconsistent view model / domain object semantics; %1$s should not implement "
-                    + "%2$s and be annotated with @%3$s (annotate with %4$s instead of %2$s, or implement %5s instead of %2$s)",
-                    cls.getName(),
-                    org.apache.isis.applib.ViewModel.class.getSimpleName(),
-                    DomainObject.class.getSimpleName(),
-                    "TODO ViewModel removed",
-                    RecreatableDomainObject.class.getSimpleName()
+                    String.format(
+                        "Inconsistent view model / domain object semantics; %1$s should not implement "
+                        + "%2$s and be annotated with @%3$s (annotate with %4$s instead of %2$s, or implement %5s instead of %2$s)",
+                        cls.getName(),
+                        org.apache.isis.applib.ViewModel.class.getSimpleName(),
+                        DomainObject.class.getSimpleName(),
+                        "TODO ViewModel removed",
+                        RecreatableDomainObject.class.getSimpleName())
                     );
         }
         if(implementsViewModel && annotatedWithDomainObjectLayout) {
-            validator.onFailure(
+            DeficiencyFacet.appendTo(
                     facetHolder,
                     Identifier.classIdentifier(LogicalType.fqcn(cls)),
-                    "Inconsistent view model / domain object semantics; %1$s should not implement "
-                    + "%2$s and be annotated with @%3$s (annotate with @%4$s instead of %3$s, or implement %5$s instead of %2$s)",
-                    cls.getName(),
-                    org.apache.isis.applib.ViewModel.class.getSimpleName(),
-                    DomainObjectLayout.class.getSimpleName(),
-                    RecreatableDomainObject.class.getSimpleName());
+                    String.format(
+                        "Inconsistent view model / domain object semantics; %1$s should not implement "
+                        + "%2$s and be annotated with @%3$s (annotate with @%4$s instead of %3$s, or implement %5$s instead of %2$s)",
+                        cls.getName(),
+                        org.apache.isis.applib.ViewModel.class.getSimpleName(),
+                        DomainObjectLayout.class.getSimpleName(),
+                        RecreatableDomainObject.class.getSimpleName())
+                    );
         }
 
         if(annotatedWithDomainObject
                 && (domainObject.nature() == Nature.NOT_SPECIFIED 
                     || domainObject.nature().isEntity()) 
                 && implementsRecreatableDomainObject) {
-            validator.onFailure(
+            DeficiencyFacet.appendTo(
                     facetHolder,
                     Identifier.classIdentifier(LogicalType.fqcn(cls)),
-                    "Inconsistent view model / domain object semantics; %1$s should not be annotated with "
-                    + "@%2$s with nature of %3$s and also implement %4$s (specify a nature of %5$s)",
-                    cls.getName(),
-                    DomainObject.class.getSimpleName(),
-                    domainObject.nature(),
-                    org.apache.isis.applib.RecreatableDomainObject.class.getSimpleName(),
-                    Nature.VIEW_MODEL);
+                    String.format(
+                        "Inconsistent view model / domain object semantics; %1$s should not be annotated with "
+                        + "@%2$s with nature of %3$s and also implement %4$s (specify a nature of %5$s)",
+                        cls.getName(),
+                        DomainObject.class.getSimpleName(),
+                        domainObject.nature(),
+                        org.apache.isis.applib.RecreatableDomainObject.class.getSimpleName(),
+                        Nature.VIEW_MODEL)
+                    );
         }
 
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index 6d2902e..b48c6b7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -219,11 +219,16 @@ implements MetaModelRefiner, PostConstructMethodCache, ObjectSpecIdFacetFactory
                 }
             }
         }
-        autoCompleteMethodInvalid.onFailure(
+        DeficiencyFacet.appendTo(
                 facetHolder,
                 Identifier.classIdentifier(LogicalType.fqcn(cls)),
-                "%s annotation on %s specifies method '%s' that does not exist in repository '%s'",
-                annotationName, cls.getName(), methodName, repositoryClass.getName());
+                String.format(
+                        "%s annotation on %s specifies method '%s' that does not exist in repository '%s'",
+                        annotationName, 
+                        cls.getName(), 
+                        methodName, 
+                        repositoryClass.getName())
+                );
         return null;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MetaModelValidatorForMixinTypes.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MetaModelValidatorForMixinTypes.java
index b980eff..73533b5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MetaModelValidatorForMixinTypes.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MetaModelValidatorForMixinTypes.java
@@ -22,6 +22,7 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.internal.reflection._Reflect;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.all.deficiencies.DeficiencyFacet;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorAbstract;
 
 import static org.apache.isis.commons.internal.reflection._Reflect.Filter.paramCount;
@@ -51,20 +52,24 @@ extends MetaModelValidatorAbstract {
         }
         
         if(mixinContructors.getCardinality().isZero()) {
-            onFailure(
+            DeficiencyFacet.appendTo(
                     facetHolder,
                     Identifier.classIdentifier(LogicalType.fqcn(candidateMixinType)),
-                    "%s: annotated with %s annotation but does not have a public 1-arg constructor",
-                    candidateMixinType.getName(), 
-                    annotation);
+                    String.format(
+                        "%s: annotated with %s annotation but does not have a public 1-arg constructor",
+                        candidateMixinType.getName(), 
+                        annotation)
+                    );
         } else {
-            onFailure(
+            DeficiencyFacet.appendTo(
                     facetHolder,
                     Identifier.classIdentifier(LogicalType.fqcn(candidateMixinType)),
-                    "%s: annotated with %s annotation needs a single public 1-arg constructor but has %d",
-                    candidateMixinType.getName(), 
-                    annotation,
-                    mixinContructors.size());
+                    String.format(
+                            "%s: annotated with %s annotation needs a single public 1-arg constructor but has %d",
+                            candidateMixinType.getName(), 
+                            annotation,
+                            mixinContructors.size())
+                    );
         }
         return false;
     }
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForClauseAbstract.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForClauseAbstract.java
index 46c76ae..898659a 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForClauseAbstract.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForClauseAbstract.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.functional.Result;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.core.metamodel.facets.all.deficiencies.DeficiencyFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
@@ -88,11 +89,15 @@ abstract class VisitorForClauseAbstract implements MetaModelValidatorVisiting.Vi
             
         if(fromSpecResult.isFailure() 
                 || !fromSpecResult.getValue().isPresent()) {
-            validator.onFailure(
+            DeficiencyFacet.appendTo(
                     objectSpec,
                     Identifier.classIdentifier(LogicalType.fqcn(cls)),
-                    "%s: error in JDOQL query, class name for '%s' clause not recognized (JDOQL : %s)",
-                    cls.getName(), clause, query);
+                    String.format(
+                            "%s: error in JDOQL query, class name for '%s' clause not recognized (JDOQL : %s)",
+                            cls.getName(), 
+                            clause, 
+                            query)
+                    );
             return;
         }
 
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForFromClause.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForFromClause.java
index f1b4050..31a018e 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForFromClause.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForFromClause.java
@@ -24,6 +24,7 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.functional.Result;
 import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.core.metamodel.facets.all.deficiencies.DeficiencyFacet;
 import org.apache.isis.core.metamodel.spec.Hierarchical;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
@@ -60,11 +61,16 @@ class VisitorForFromClause extends VisitorForClauseAbstract {
                 
         if(fromSpecResult.isFailure() 
                 || !fromSpecResult.getValue().isPresent()) {
-            validator.onFailure(
+            DeficiencyFacet.appendTo(
                     objectSpec,
                     Identifier.classIdentifier(LogicalType.fqcn(cls)),
-                    "%s: error in JDOQL query, class name after '%s' clause could not be loaded (JDOQL : %s)",
-                    cls.getName(), clause, query);
+                    String.format(
+                            "%s: error in JDOQL query, "
+                            + "class name after '%s' clause could not be loaded (JDOQL : %s)",
+                            cls.getName(), 
+                            clause, 
+                            query)
+                    );
             return;
         }
         
@@ -73,11 +79,17 @@ class VisitorForFromClause extends VisitorForClauseAbstract {
         if(subclasses.contains(objectSpec)) {
             return;
         }
-        validator.onFailure(
+        DeficiencyFacet.appendTo(
                 objectSpec,
                 Identifier.classIdentifier(LogicalType.fqcn(cls)),
-                "%s: error in JDOQL query, class name after '%s' clause should be same as class name on which annotated, or one of its supertypes (JDOQL : %s)",
-                cls.getName(), clause, query);
+                String.format(
+                        "%s: error in JDOQL query, class name after '%s' "
+                        + "clause should be same as class name on which annotated, "
+                        + "or one of its supertypes (JDOQL : %s)",
+                        cls.getName(), 
+                        clause, 
+                        query)
+                );
     }
 
 
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForVariablesClause.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForVariablesClause.java
index 79eb0f4..cfc3ec5 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForVariablesClause.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/object/query/VisitorForVariablesClause.java
@@ -20,6 +20,7 @@ package org.apache.isis.persistence.jdo.metamodel.facets.object.query;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.id.LogicalType;
+import org.apache.isis.core.metamodel.facets.all.deficiencies.DeficiencyFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.specimpl.IntrospectionState;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
@@ -56,11 +57,16 @@ class VisitorForVariablesClause extends VisitorForClauseAbstract {
                 objectSpecification.getFacet(JdoPersistenceCapableFacet.class);
 
         if(persistenceCapableFacet == null) {
-            validator.onFailure(
+            DeficiencyFacet.appendTo(
                     objectSpec,
                     Identifier.classIdentifier(LogicalType.fqcn(cls)),
-                    "%s: error in JDOQL query, class name for '%s' clause is not annotated as @PersistenceCapable (JDOQL : %s)",
-                    cls.getName(), clause, query);
+                    String.format(
+                            "%s: error in JDOQL query, class name for '%s' "
+                            + "clause is not annotated as @PersistenceCapable (JDOQL : %s)",
+                            cls.getName(), 
+                            clause, 
+                            query)
+                    );
             return;
         }
     }
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
index d282b20..4688d9f 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
@@ -171,13 +171,12 @@ implements MetaModelRefiner {
                         DeficiencyFacet.appendToWithFormat(
                                 association,
                                 "%s: incompatible usage of Isis' @Optional annotation and @javax.jdo.annotations.Column; use just @javax.jdo.annotations.Column(allowsNull=\"...\")",
-                                association.getIdentifier().toString());
+                                association.getIdentifier().getFullIdentityString());
                     } else {
-                        validator.onFailure(
+                        DeficiencyFacet.appendToWithFormat(
                                 association,
-                                association.getIdentifier(),
                                 "%s: incompatible Isis' default of required/optional properties vs JDO; add @javax.jdo.annotations.Column(allowsNull=\"...\")",
-                                association.getIdentifier().toString());
+                                association.getIdentifier().getFullIdentityString());
                     }
                 }
 
@@ -191,12 +190,12 @@ implements MetaModelRefiner {
                         DeficiencyFacet.appendToWithFormat(
                                 association,
                                 "%s: incompatible usage of Isis' @Optional annotation and @javax.jdo.annotations.Column; use just @javax.jdo.annotations.Column(allowsNull=\"...\")",
-                                association.getIdentifier().toString());
+                                association.getIdentifier().getFullIdentityString());
                     } else {
                         DeficiencyFacet.appendToWithFormat(
                                 association,
                                 "%s: incompatible default handling of required/optional properties between Isis and JDO; add @javax.jdo.annotations.Column(allowsNull=\"...\")",
-                                association.getIdentifier().toString());
+                                association.getIdentifier().getFullIdentityString());
                     }
                 }
             }