You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/11/20 23:47:37 UTC
[isis] branch master updated: ISIS-1974: moves further metamodel
validation to be evaluated later
This is an automated email from the ASF dual-hosted git repository.
danhaywood 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 61ba00e ISIS-1974: moves further metamodel validation to be evaluated later
61ba00e is described below
commit 61ba00e6fb5545ea761cad41742b71649092868c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Nov 21 00:47:25 2018 +0100
ISIS-1974: moves further metamodel validation to be evaluated later
---
.../autocomplete/AutoCompleteFacetAbstract.java | 4 +++
.../DomainObjectAnnotationFacetFactory.java | 39 ++++++++++------------
...AutoCompleteFacetForDomainObjectAnnotation.java | 8 -----
3 files changed, 21 insertions(+), 30 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
index 84e689a..cf8fcea 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
@@ -73,6 +73,10 @@ public abstract class AutoCompleteFacetAbstract extends FacetAbstract implements
this.authenticationSessionProvider = servicesInjector.getAuthenticationSessionProvider();
}
+ public Class<?> getRepositoryClass() {
+ return repositoryClass;
+ }
+
@Override
public List<ObjectAdapter> execute(
final String search,
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 3a60287..2a35bba 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
@@ -54,6 +54,7 @@ import org.apache.isis.core.metamodel.facets.MethodFinderUtils;
import org.apache.isis.core.metamodel.facets.PostConstructMethodCache;
import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
+import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacetAbstract;
import org.apache.isis.core.metamodel.facets.object.callbacks.CreatedLifecycleEventFacetForDomainObjectAnnotation;
import org.apache.isis.core.metamodel.facets.object.callbacks.LoadedLifecycleEventFacetForDomainObjectAnnotation;
import org.apache.isis.core.metamodel.facets.object.callbacks.PersistedLifecycleEventFacetForDomainObjectAnnotation;
@@ -103,7 +104,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
private final MetaModelValidatorForDeprecatedAnnotation boundedValidator = new MetaModelValidatorForDeprecatedAnnotation(Bounded.class);
private final MetaModelValidatorForDeprecatedAnnotation immutableValidator = new MetaModelValidatorForDeprecatedAnnotation(Immutable.class);
private final MetaModelValidatorForDeprecatedAnnotation objectTypeValidator = new MetaModelValidatorForDeprecatedAnnotation(ObjectType.class);
- private final MetaModelValidatorForValidationFailures autoCompleteInvalid = new MetaModelValidatorForValidationFailures();
+ private final MetaModelValidatorForValidationFailures autoCompleteMethodInvalid = new MetaModelValidatorForValidationFailures();
private final MetaModelValidatorForMixinTypes mixinTypeValidator = new MetaModelValidatorForMixinTypes("@DomainObject#nature=MIXIN");
@@ -221,9 +222,6 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
final Class<?> repositoryClass = annotation.repository();
final String actionName = annotation.action();
- if(!isServiceType(cls, "@AutoComplete", repositoryClass)) {
- return null;
- }
final Method repositoryMethod = findRepositoryMethod(cls, "@AutoComplete", repositoryClass, actionName);
if(repositoryMethod == null) {
return null;
@@ -246,9 +244,6 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
}
final String actionName = domainObject.autoCompleteAction();
- if(!isServiceType(cls, "@DomainObject", repositoryClass)) {
- return null;
- }
final Method repositoryMethod = findRepositoryMethod(cls, "@DomainObject", repositoryClass, actionName);
if(repositoryMethod == null) {
return null;
@@ -258,19 +253,6 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
facetHolder, repositoryClass, repositoryMethod, servicesInjector);
}
- private boolean isServiceType(
- final Class<?> cls,
- final String annotationName,
- final Class<?> repositoryClass) {
- final boolean isRegistered = servicesInjector.isRegisteredService(repositoryClass);
- if(!isRegistered) {
- autoCompleteInvalid.addFailure(
- "%s annotation on %s specifies unknown repository '%s'",
- annotationName, cls.getName(), repositoryClass.getName());
- }
- return isRegistered;
- }
-
private Method findRepositoryMethod(
final Class<?> cls,
final String annotationName,
@@ -285,7 +267,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
}
}
}
- autoCompleteInvalid.addFailure(
+ autoCompleteMethodInvalid.addFailure(
"%s annotation on %s specifies method '%s' that does not exist in repository '%s'",
annotationName, cls.getName(), methodName, repositoryClass.getName());
return null;
@@ -575,6 +557,19 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
otherSpec.getFullIdentifier(),
objectSpecId);
}
+
+ final AutoCompleteFacet autoCompleteFacet = thisSpec.getFacet(AutoCompleteFacet.class);
+ if(autoCompleteFacet != null && !autoCompleteFacet.isNoop() && autoCompleteFacet instanceof AutoCompleteFacetAbstract) {
+ final AutoCompleteFacetAbstract facet = (AutoCompleteFacetForDomainObjectAnnotation) autoCompleteFacet;
+ final Class<?> repositoryClass = facet.getRepositoryClass();
+ final boolean isRegistered = servicesInjector.isRegisteredService(repositoryClass);
+ if(!isRegistered) {
+ validationFailures.add(
+ "@DomainObject annotation on %s specifies unknown repository '%s'",
+ thisSpec.getFullIdentifier(), repositoryClass.getName());
+ }
+
+ }
}
}));
@@ -586,7 +581,7 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
metaModelValidator.add(immutableValidator);
metaModelValidator.add(objectTypeValidator);
- metaModelValidator.add(autoCompleteInvalid);
+ metaModelValidator.add(autoCompleteMethodInvalid);
metaModelValidator.add(mixinTypeValidator);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/autocomplete/AutoCompleteFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/autocomplete/AutoCompleteFacetForDomainObjectAnnotation.java
index 2478300..31e4027 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/autocomplete/AutoCompleteFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/autocomplete/AutoCompleteFacetForDomainObjectAnnotation.java
@@ -27,7 +27,6 @@ import org.apache.isis.core.metamodel.services.ServicesInjector;
public class AutoCompleteFacetForDomainObjectAnnotation extends AutoCompleteFacetAbstract {
- private final Class<?> repositoryClass;
private final String actionName;
public AutoCompleteFacetForDomainObjectAnnotation(
@@ -36,16 +35,9 @@ public class AutoCompleteFacetForDomainObjectAnnotation extends AutoCompleteFace
final Method repositoryMethod,
final ServicesInjector servicesInjector) {
super(facetHolder, repositoryClass, repositoryMethod, servicesInjector);
- this.repositoryClass = repositoryClass;
this.actionName = repositoryMethod.getName();
}
- /**
- * Introduced for testing only.
- */
- public Class<?> getRepositoryClass() {
- return repositoryClass;
- }
/**
* Introduced for testing only.