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/03 21:42:49 UTC

[isis] branch v2 updated: ISIS-2158: migrating to new _Annotation API, starting with ...

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 1c085be  ISIS-2158: migrating to new _Annotation API, starting with ...
1c085be is described below

commit 1c085beac2d5a6333a39c30116b86e4540f5afd3
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 3 23:42:40 2019 +0200

    ISIS-2158: migrating to new _Annotation API, starting with ...
    
    - @DomainObject(auditing=...)
    - @DomainObject(publishing=...)
---
 .../DomainObjectAnnotationFacetFactory.java        | 30 +++++++------
 .../AuditableFacetForDomainObjectAnnotation.java   | 26 ++----------
 ...lishedObjectFacetForDomainObjectAnnotation.java | 49 +++++++++++-----------
 .../specloader/SpecificationCacheDefault.java      |  8 ++--
 4 files changed, 49 insertions(+), 64 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index e75f3d8..fd8fc2e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -27,8 +27,10 @@ import java.util.stream.Collectors;
 import javax.annotation.PostConstruct;
 
 import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.annotation.Auditing;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.events.domain.ActionDomainEvent;
 import org.apache.isis.applib.events.domain.CollectionDomainEvent;
 import org.apache.isis.applib.events.domain.PropertyDomainEvent;
@@ -41,6 +43,7 @@ import org.apache.isis.applib.events.lifecycle.ObjectUpdatedEvent;
 import org.apache.isis.applib.events.lifecycle.ObjectUpdatingEvent;
 import org.apache.isis.applib.services.HasUniqueId;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.commons.internal.reflection._Annotations;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facetapi.FacetUtil;
@@ -85,6 +88,8 @@ import org.apache.isis.metamodel.specloader.validator.MetaModelValidatorVisiting
 import org.apache.isis.metamodel.specloader.validator.ValidationFailures;
 import org.apache.isis.metamodel.util.EventUtil;
 
+import lombok.val;
+
 
 public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract
 implements MetaModelValidatorRefiner, PostConstructMethodCache, ObjectSpecIdFacetFactory {
@@ -120,10 +125,9 @@ implements MetaModelValidatorRefiner, PostConstructMethodCache, ObjectSpecIdFace
 
 
     void processAuditing(final ProcessClassContext processClassContext) {
-        final Class<?> cls = processClassContext.getCls();
-        final List<DomainObject> domainObjects = Annotations.getAnnotations(cls, DomainObject.class);
-        final FacetHolder holder = processClassContext.getFacetHolder();
-
+        val cls = processClassContext.getCls();
+        val facetHolder = processClassContext.getFacetHolder();
+        
         //
         // this rule originally implemented only in AuditableFacetFromConfigurationFactory
         // but think should apply in general
@@ -134,10 +138,10 @@ implements MetaModelValidatorRefiner, PostConstructMethodCache, ObjectSpecIdFace
             return;
         }
 
-
         // check for @DomainObject(auditing=....)
-        AuditableFacet auditableFacet = AuditableFacetForDomainObjectAnnotation
-                .create(domainObjects, getConfiguration(), holder);
+        val auditing = _Annotations.getEnum("auditing", cls, DomainObject.class, Auditing.class);
+        val auditableFacet = AuditableFacetForDomainObjectAnnotation
+                .create(auditing, getConfiguration(), facetHolder);
 
         // then add
         FacetUtil.addFacet(auditableFacet);
@@ -145,9 +149,8 @@ implements MetaModelValidatorRefiner, PostConstructMethodCache, ObjectSpecIdFace
 
 
     void processPublishing(final ProcessClassContext processClassContext) {
-        final Class<?> cls = processClassContext.getCls();
-        final List<DomainObject> domainObjects = Annotations.getAnnotations(cls, DomainObject.class);
-        final FacetHolder facetHolder = processClassContext.getFacetHolder();
+        val cls = processClassContext.getCls();
+        val facetHolder = processClassContext.getFacetHolder();
 
         //
         // this rule inspired by a similar rule for auditing, see above
@@ -159,8 +162,9 @@ implements MetaModelValidatorRefiner, PostConstructMethodCache, ObjectSpecIdFace
         }
 
         // check from @DomainObject(publishing=...)
-        PublishedObjectFacet publishedObjectFacet = PublishedObjectFacetForDomainObjectAnnotation
-                .create(domainObjects, getConfiguration(), facetHolder);
+        val publishing = _Annotations.getEnum("publishing", cls, DomainObject.class, Publishing.class);
+        val publishedObjectFacet = PublishedObjectFacetForDomainObjectAnnotation
+                .create(publishing, getConfiguration(), facetHolder);
 
         // then add
         FacetUtil.addFacet(publishedObjectFacet);
@@ -170,7 +174,7 @@ implements MetaModelValidatorRefiner, PostConstructMethodCache, ObjectSpecIdFace
         final Class<?> cls = processClassContext.getCls();
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        // check from @DomainObject(auditing=...)
+        // check from @DomainObject(autoCompleteRepository=...)
         final List<DomainObject> domainObjects = Annotations.getAnnotations(cls, DomainObject.class);
         Facet facet = createFor(domainObjects, facetHolder, cls);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java
index d43b9fd..67a7924 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java
@@ -19,12 +19,9 @@
 package org.apache.isis.metamodel.facets.object.domainobject.auditing;
 
 
-import java.util.List;
-
-import javax.annotation.Nullable;
+import java.util.Optional;
 
 import org.apache.isis.applib.annotation.Auditing;
-import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -36,26 +33,11 @@ import lombok.val;
 public class AuditableFacetForDomainObjectAnnotation extends AuditableFacetAbstract {
 
     public static AuditableFacet create(
-            List<DomainObject> domainObjectAnnotations,
-            IsisConfiguration configuration,
-            FacetHolder holder) {
-
-        val domainObjectAnnotation = domainObjectAnnotations.stream()
-                .filter(doAnnot -> doAnnot.auditing() != Auditing.NOT_SPECIFIED)
-                .findFirst()
-                .orElse(null);
-
-        return create(domainObjectAnnotation, configuration, holder);
-    }
-
-    private static AuditableFacet create(
-            @Nullable DomainObject domainObjectAnnotation,
+            Optional<Auditing> auditingIfAny,
             IsisConfiguration configuration,
             FacetHolder holder) {
 
-        val auditing = domainObjectAnnotation != null 
-                ? domainObjectAnnotation.auditing() 
-                        : Auditing.AS_CONFIGURED;
+        val auditing = auditingIfAny.orElse(Auditing.AS_CONFIGURED); 
                 
         switch (auditing) {
         case AS_CONFIGURED:
@@ -65,7 +47,7 @@ public class AuditableFacetForDomainObjectAnnotation extends AuditableFacetAbstr
             case NONE:
                 return null;
             default:
-                return domainObjectAnnotation != null
+                return auditingIfAny.isPresent()
                 ? new AuditableFacetForDomainObjectAnnotationAsConfigured(holder)
                         : new AuditableFacetFromConfiguration(holder);
             }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/publishing/PublishedObjectFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/publishing/PublishedObjectFacetForDomainObjectAnnotation.java
index d46ab24..e3f6971 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/publishing/PublishedObjectFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/domainobject/publishing/PublishedObjectFacetForDomainObjectAnnotation.java
@@ -19,9 +19,8 @@
 
 package org.apache.isis.metamodel.facets.object.domainobject.publishing;
 
-import java.util.List;
+import java.util.Optional;
 
-import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.config.IsisConfiguration;
@@ -32,34 +31,34 @@ import org.apache.isis.metamodel.facets.object.publishedobject.PublishedObjectFa
 public class PublishedObjectFacetForDomainObjectAnnotation extends PublishedObjectFacetAbstract {
 
     public static PublishedObjectFacet create(
-            final List<DomainObject> domainObjects,
+            final Optional<Publishing> publishingIfAny,
             final IsisConfiguration configuration,
             final FacetHolder holder) {
 
         final PublishObjectsConfiguration setting = configuration.getServices().getPublish().getObjects();
-        return domainObjects.stream()
-                .map(DomainObject::publishing)
-                .filter(publishing -> publishing != Publishing.NOT_SPECIFIED)
-                .findFirst()
-                .map(publishing -> {
-                    switch (publishing) {
-                    case AS_CONFIGURED:
-                        return setting == PublishObjectsConfiguration.NONE
-                        ? null
-                                : (PublishedObjectFacet)new PublishedObjectFacetForDomainObjectAnnotationAsConfigured(holder)
-                                ;
-                    case DISABLED:
-                        return null;
-                    case ENABLED:
-                        return new PublishedObjectFacetForDomainObjectAnnotation(holder);
-                    case NOT_SPECIFIED:
-                        throw _Exceptions.unexpectedCodeReach(); // case filtered out above
-                    }
-                    throw new IllegalStateException("domainObject.publishing() not recognised, is " + publishing);
+        
+        return
+        publishingIfAny.map(publishing -> {
+            switch (publishing) {
+            case AS_CONFIGURED:
+                return setting == PublishObjectsConfiguration.NONE
+                ? null
+                        : (PublishedObjectFacet)new PublishedObjectFacetForDomainObjectAnnotationAsConfigured(holder)
+                        ;
+            case DISABLED:
+                return null;
+            case ENABLED:
+                return new PublishedObjectFacetForDomainObjectAnnotation(holder);
+            case NOT_SPECIFIED:
+                throw _Exceptions.unexpectedCodeReach(); // case filtered out above
+            }
+            throw new IllegalStateException("domainObject.publishing() not recognised, is " + publishing);
 
-                }).orElseGet(() -> setting == PublishObjectsConfiguration.NONE
-                        ? null
-                                : new PublishedObjectFacetFromConfiguration(holder));
+        })
+        .orElseGet(() -> setting == PublishObjectsConfiguration.NONE
+                ? null
+                        : new PublishedObjectFacetFromConfiguration(holder));
+        
 
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationCacheDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationCacheDefault.java
index bc574e3..66aa7c9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationCacheDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationCacheDefault.java
@@ -37,13 +37,13 @@ class SpecificationCacheDefault<T extends ObjectSpecification> {
     private final Map<String, T> specByClassName = _Maps.newHashMap();
     private final Map<ObjectSpecId, String> classNameBySpecId = _Maps.newHashMap();
     
-    public T get(final String className) {
+    public T get(String className) {
         return specByClassName.get(className);
     }
     
     public T computeIfAbsent(
-            final String className, 
-            final Function<? super String, T> mappingFunction) {
+            String className, 
+            Function<? super String, T> mappingFunction) {
         
         T spec = specByClassName.get(className);
         if(spec==null) {
@@ -66,7 +66,7 @@ class SpecificationCacheDefault<T extends ObjectSpecification> {
     }
 
     public T getByObjectType(final ObjectSpecId objectSpecID) {
-        final String className = classNameBySpecId.get(objectSpecID);
+        val className = classNameBySpecId.get(objectSpecID);
         return className != null ? specByClassName.get(className) : null;
     }