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/09/19 10:06:58 UTC

[isis] branch v2 updated: ISIS-2158 changes MetaModelExporter behavior

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 dbaef8e  ISIS-2158 changes MetaModelExporter behavior
dbaef8e is described below

commit dbaef8e4f48abdc6f28c2dd281109fd837e0fda4
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 19 12:06:49 2019 +0200

    ISIS-2158 changes MetaModelExporter behavior
    
    - if no package prefixes configured export all instead of none
---
 .../services/metamodel/MetaModelService.java       | 35 ++++++++++++++--------
 .../metamodel/MetaModelService_Config_Test.java    |  7 +++--
 .../java/org/apache/isis/config/IsisPresets.java   |  1 +
 .../services/metamodel/MetaModelExporter.java      | 14 +++++++--
 4 files changed, 38 insertions(+), 19 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
index 9ea6347..c11cfa7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
@@ -18,18 +18,21 @@
  */
 package org.apache.isis.applib.services.metamodel;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
+import java.util.Set;
 
 import org.springframework.boot.autoconfigure.data.web.SpringDataWebProperties.Sort;
 
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.command.CommandDtoProcessor;
-import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.commons.internal.ioc.BeanSort;
 import org.apache.isis.schema.metamodel.v1.MetamodelDto;
 
+import lombok.val;
+
 /**
  * This service provides a formal API into Isis' metamodel.
  *
@@ -92,14 +95,19 @@ public interface MetaModelService {
         private static final int IGNORE_MIXINS = 16;
 
         private final int mask;
-        private final List<String> packagePrefixes;
+        
+        private final Set<String> packagePrefixes = _Sets.newHashSet();
 
         public Config() {
             this(0, Collections.emptyList());
         }
-        private Config(final int mask, final List<String> packagePrefixes) {
+        private Config(final int mask, final Collection<String> packagePrefixes) {
             this.mask = mask;
-            this.packagePrefixes = Collections.unmodifiableList(packagePrefixes);
+            this.packagePrefixes.addAll(packagePrefixes);
+        }
+        
+        public Set<String> getPackagePrefixes() {
+            return Collections.unmodifiableSet(packagePrefixes);
         }
 
         public Config withIgnoreNoop() {
@@ -123,10 +131,15 @@ public interface MetaModelService {
             return new Config(mask | x, packagePrefixes);
         }
 
+        /**
+         * Returns a new {@code Config} with given {@code packagePrefix} added to the set of 
+         * this {@code Config}'s packagePrefixes.
+         * @param packagePrefix - prefix to be added
+         */
         public Config withPackagePrefix(final String packagePrefix) {
-            final List<String> prefixes = _Lists.newArrayList(this.packagePrefixes);
-            prefixes.add(packagePrefix);
-            return new Config(mask, prefixes);
+            val newPrefixes = _Sets.newHashSet(this.packagePrefixes);
+            newPrefixes.add(packagePrefix);
+            return new Config(mask, newPrefixes);
         }
 
         public boolean isIgnoreNoop() {
@@ -147,14 +160,10 @@ public interface MetaModelService {
             return hasFlag(IGNORE_MIXINS);
         }
 
-        public List<String> getPackagePrefixes() {
-            return packagePrefixes;
-        }
-
         private boolean hasFlag(final int x) {
             return (mask & x) == x;
         }
-
+        
     }
 
     MetamodelDto exportMetaModel(final Config config);
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java b/core/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java
index 914aef5..9ed693c 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java
@@ -25,6 +25,7 @@ import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 
 public class MetaModelService_Config_Test {
 
@@ -59,7 +60,7 @@ public class MetaModelService_Config_Test {
         // then
         assertNotSame(config, config2);
         assertThat(config2.getPackagePrefixes().size(), is(equalTo(1)));
-        assertThat(config2.getPackagePrefixes().get(0), is(equalTo("org.foo")));
+        assertThat(config2.getPackagePrefixes().iterator().next(), is(equalTo("org.foo")));
 
         // and when
         MetaModelService.Config config3 = config2.withPackagePrefix("org.bar");
@@ -68,7 +69,7 @@ public class MetaModelService_Config_Test {
         assertNotSame(config, config3);
         assertNotSame(config2, config3);
         assertThat(config3.getPackagePrefixes().size(), is(equalTo(2)));
-        assertThat(config3.getPackagePrefixes().get(0), is(equalTo("org.foo")));
-        assertThat(config3.getPackagePrefixes().get(1), is(equalTo("org.bar")));
+        assertTrue(config3.getPackagePrefixes().contains("org.foo"));
+        assertTrue(config3.getPackagePrefixes().contains("org.bar"));
     }
 }
\ No newline at end of file
diff --git a/core/config/src/main/java/org/apache/isis/config/IsisPresets.java b/core/config/src/main/java/org/apache/isis/config/IsisPresets.java
index a160e20..124bf67 100644
--- a/core/config/src/main/java/org/apache/isis/config/IsisPresets.java
+++ b/core/config/src/main/java/org/apache/isis/config/IsisPresets.java
@@ -96,6 +96,7 @@ public final class IsisPresets  {
     public static final String DataNucleusAutoCreate = "classpath:/presets/DataNucleusAutoCreate.properties";
     
     public static final String DebugPersistence = "classpath:/presets/DebugPersistence.properties";
+    public static final String DebugDiscovery = "logging.level.org.apache.isis.config.registry.IsisBeanTypeRegistry=DEBUG";
     
     
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/metamodel/MetaModelExporter.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/metamodel/MetaModelExporter.java
index 0fb6374..e823c87 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/metamodel/MetaModelExporter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/metamodel/MetaModelExporter.java
@@ -57,6 +57,8 @@ import org.apache.isis.schema.metamodel.v1.ScalarParam;
 import org.apache.isis.schema.metamodel.v1.VectorParam;
 import org.apache.isis.schema.utils.CommonDtoUtils;
 
+import lombok.val;
+
 class MetaModelExporter {
 
     SpecificationLoader specificationLookup;
@@ -155,9 +157,15 @@ class MetaModelExporter {
     private boolean inPackagePrefixes(
             final ObjectSpecification specification,
             final MetaModelService.Config config) {
-        final String canonicalName = specification.getCorrespondingClass().getCanonicalName();
-        for (final String s : config.getPackagePrefixes()) {
-            if(canonicalName.startsWith(s)) {
+        
+        val prefixes = config.getPackagePrefixes();
+        if(prefixes.isEmpty()) {
+            return true; // treat no prefixes configured as a wildcard to export them all  
+        }
+        
+        val canonicalName = specification.getCorrespondingClass().getCanonicalName();
+        for (val prefix : prefixes) {
+            if(canonicalName.startsWith(prefix)) {
                 return true;
             }
         }