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/12/18 14:06:34 UTC

[isis] 04/04: ISIS-2050: changes fullIntrospection boolean property into an enum property: LAZY vs LAZY_UNLESS_PRODUCTION vs FULL

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2050
in repository https://gitbox.apache.org/repos/asf/isis.git

commit ac0fbc9e350517fe0a579f94e3fe36a2e77c87b5
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Dec 18 14:06:12 2018 +0000

    ISIS-2050: changes fullIntrospection boolean property into an enum property: LAZY vs LAZY_UNLESS_PRODUCTION  vs FULL
    
    Set the default to 'LAZY_UNLESS_PRODUCTION'
---
 .../core/commons/config/ConfigPropertyEnum.java    |  2 +-
 .../metamodel/specloader/SpecificationLoader.java  | 44 +++++++++++++++++++---
 2 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/ConfigPropertyEnum.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/ConfigPropertyEnum.java
index 246697e..6f79142 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/ConfigPropertyEnum.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/ConfigPropertyEnum.java
@@ -5,6 +5,6 @@ public class ConfigPropertyEnum<E extends Enum<E>> extends ConfigPropertyAbstrac
         super(key, defaultValue);
     }
     public E from(final IsisConfiguration configuration) {
-        return Enum.valueOf(defaultValue.getDeclaringClass(), configuration.getString(key, defaultValue.name()));
+        return Enum.valueOf(defaultValue.getDeclaringClass(), configuration.getString(key, defaultValue.name()).toUpperCase());
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index 3e66ce5..a8ffae0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@ -37,10 +37,12 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.config.ConfigPropertyBoolean;
+import org.apache.isis.core.commons.config.ConfigPropertyEnum;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.lang.ClassUtil;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
 import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
@@ -94,8 +96,38 @@ public class SpecificationLoader implements ApplicationScopedComponent {
     public static final ConfigPropertyBoolean CONFIG_PROPERTY_PARALLELIZE =
             new ConfigPropertyBoolean("isis.reflector.introspector.parallelize", true);
 
-    public static final ConfigPropertyBoolean CONFIG_PROPERTY_FULL_INTROSPECTION =
-            new ConfigPropertyBoolean("isis.reflector.introspector.fullIntrospection", false);
+    public static enum IntrospectionMode {
+        /**
+         * Lazy (don't introspect members for most classes unless required), irrespective of the deployment mode.
+         */
+        LAZY{
+            @Override
+            public boolean isFullIntrospect(final DeploymentCategory category) {
+                return false;
+            }
+        },
+        /**
+         * If production deployment mode, then full, otherwise lazy.
+         */
+        LAZY_UNLESS_PRODUCTION {
+            @Override public boolean isFullIntrospect(final DeploymentCategory category) {
+                return category.isProduction();
+            }
+        },
+        /**
+         * Full introspection, irrespective of deployment mode.
+         */
+        FULL {
+            @Override
+            public boolean isFullIntrospect(final DeploymentCategory category) {
+                return true;
+            }
+        };
+
+        public abstract boolean isFullIntrospect(final DeploymentCategory category);
+    }
+    public static final ConfigPropertyEnum<IntrospectionMode> CONFIG_PROPERTY_MODE =
+            new ConfigPropertyEnum<>("isis.reflector.introspector.mode", IntrospectionMode.LAZY_UNLESS_PRODUCTION);
 
 
     //region > constructor, fields
@@ -217,8 +249,8 @@ public class SpecificationLoader implements ApplicationScopedComponent {
 
         logAfter(cachedSpecifications);
 
-        final boolean validate = CONFIG_PROPERTY_FULL_INTROSPECTION.from(configuration);
-        if(validate) {
+        final IntrospectionMode mode = CONFIG_PROPERTY_MODE.from(configuration);
+        if(mode.isFullIntrospect(servicesInjector.getDeploymentCategoryProvider().getDeploymentCategory())) {
             LOG.info("Introspecting all cached specs up to {}", IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
             introspect(cachedSpecifications, IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
         }
@@ -385,8 +417,8 @@ public class SpecificationLoader implements ApplicationScopedComponent {
 
     @Programmatic
     public void validateAndAssert() {
-        final Boolean validate = CONFIG_PROPERTY_FULL_INTROSPECTION.from(configuration);
-        if(!validate) {
+        final IntrospectionMode mode = CONFIG_PROPERTY_MODE.from(configuration);
+        if(!mode.isFullIntrospect(servicesInjector.getDeploymentCategoryProvider().getDeploymentCategory())) {
             LOG.info("Meta model validation skipped (full introspection of metamodel not configured)");
             return;
         }