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