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.