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/28 17:16:19 UTC

[isis] 07/10: ISIS-2158: ClassSubstitutor: also allow to filter by package name

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

commit 4f23c34a9f9602e248028b7d9baa41d6e2eef026
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Oct 28 15:41:22 2019 +0100

    ISIS-2158: ClassSubstitutor: also allow to filter by package name
---
 .../isis/config/registry/IsisBeanTypeRegistry.java  | 21 ++++++++++++---------
 .../ApplicationFeatureRepositoryDefault.java        |  3 +--
 .../specloader/SpecificationLoaderDefault.java      |  4 ++++
 .../classsubstitutor/ClassSubstitutor.java          | 18 +++++++++++++++++-
 .../isis/testdomain/jdo/InventoryResource.java      |  4 ++--
 5 files changed, 36 insertions(+), 14 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java b/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
index 170183c..6ec1bdf 100644
--- a/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
+++ b/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
@@ -171,23 +171,27 @@ public final class IsisBeanTypeRegistry implements IsisComponentScanInterceptor,
             typeMeta.setBeanNameOverride(extractObjectType(typeMeta.getUnderlyingClass()).orElse(null));
         }
         
-        val isToBeRegistered = beanSort.isManagedBean();
-        val isToBeInspected = !beanSort.isUnknown();
+        val isManagedBeanToBeInspected = beanSort.isManagedBean() 
+                && findNearestAnnotation(type, DomainService.class).isPresent();
+        
+        val isManagedObjectToBeInspected = !beanSort.isManagedBean() 
+                && !beanSort.isUnknown();
 
+        val isToBeInspected = isManagedBeanToBeInspected || isManagedObjectToBeInspected;
+        
         if(isToBeInspected) {
             addIntrospectableType(beanSort, typeMeta);
-        }
-
-        if(log.isDebugEnabled()) {
-            if(isToBeInspected || isToBeRegistered) {
-                log.debug("{} {} [{}]",
-                        isToBeRegistered ? "provision" : beanSort.isEntity() ? "entity" : "skip",
+        
+            if(log.isDebugEnabled()) {
+                log.debug("to-be-inspected: {} [{}]",                        
                                 type,
                                 beanSort.name());
             }
         }
 
         
+
+        
     }
     
     /**
@@ -218,7 +222,6 @@ public final class IsisBeanTypeRegistry implements IsisComponentScanInterceptor,
     private BeanSort quickClassify(Class<?> type) {
 
         requires(type, "type");
-
         
         if(findNearestAnnotation(type, Vetoed.class).isPresent()) {
             return BeanSort.UNKNOWN; // reject
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index 495f5ca..b179fb4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -81,8 +81,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
         }
     }
 
-    @Inject
-    IsisConfiguration configuration;
+    @Inject IsisConfiguration configuration;
 
     private boolean isEagerInitialize() {
         ApplicationFeaturesInitConfiguration setting = configuration.getServices().getApplicationFeatures().getInit();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
index 054a101..d7b672d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
@@ -276,6 +276,10 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
             return null;
         }
 
+//        if(type.getName().equals("com.fasterxml.jackson.core.Version")) {
+//            System.out.println("####");
+//        }
+        
         requires(upTo, "upTo");
 
         val substitutedType = classSubstitutor.getClass(type);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/classsubstitutor/ClassSubstitutor.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
index 2a40440..83236c4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
@@ -26,6 +26,8 @@ import org.apache.isis.commons.internal.base._Blackhole;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.metamodel.commons.ClassUtil;
 
+import lombok.val;
+
 /**
  * Provides capability to translate or ignore classes.
  */
@@ -44,6 +46,9 @@ public class ClassSubstitutor {
         // ignore javassist
         ignore("javassist.util.proxy.ProxyObject");
         ignore("javassist.util.proxy.MethodHandler");
+        
+        ignorePackage("com.fasterxml.jackson.");
+        ignorePackage("com.google.gson.");
 
     }
 
@@ -95,6 +100,7 @@ public class ClassSubstitutor {
 
     private final Set<Class<?>> classesToIgnore = _Sets.newConcurrentHashSet();
     private final Set<String> classNamesToIgnore = _Sets.newHashSet();
+    private final Set<String> packageNamesToIgnore = _Sets.newHashSet();
 
 
     /**
@@ -104,6 +110,10 @@ public class ClassSubstitutor {
     private void ignore(final String className) {
         classNamesToIgnore.add(className);
     }
+    
+    private void ignorePackage(final String packageName) {
+        packageNamesToIgnore.add(packageName);
+    }
 
     private boolean shouldIgnore(final Class<?> cls) {
         if (cls.isArray()) {
@@ -115,8 +125,14 @@ public class ClassSubstitutor {
             return true;
         }
 
+        val className = cls.getName();
+        
         try{
-            return classesToIgnore.contains(cls) || classNamesToIgnore.contains(cls.getCanonicalName());
+            return classesToIgnore.contains(cls) 
+                    || classNamesToIgnore.contains(cls.getCanonicalName())
+                    || packageNamesToIgnore.stream().anyMatch(className::startsWith)
+                    ;
+                    
         } catch(java.lang.NoClassDefFoundError e) {
 
             try{
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/InventoryResource.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/InventoryResource.java
index b77390a..a5b64a2 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/InventoryResource.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/InventoryResource.java
@@ -57,8 +57,8 @@ public class InventoryResource {
         return Book.of("Book of the week", "An awesome Book", 12, "Author", "ISBN", "Publisher");
     }
 
-    @Action
-    public Book storeBook(String newBook) throws JAXBException {
+    @Action //TODO improve the REST client such that the param can be of type Book
+    public Book storeBook(String newBook) throws JAXBException { 
         Book book = BookDto.decode(newBook).toBook();
         return repository.persist(book);
     }