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/04/04 12:35:14 UTC

[isis] branch 2033-IoC_spring updated: ISIS-2033: further simplify 'SpecLoader'

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

ahuber pushed a commit to branch 2033-IoC_spring
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/2033-IoC_spring by this push:
     new 590e4de  ISIS-2033: further simplify 'SpecLoader'
590e4de is described below

commit 590e4de09182e135d89b4b8a1a3c81925ab76a9e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Apr 4 14:35:08 2019 +0200

    ISIS-2033: further simplify 'SpecLoader'
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2033
---
 .../apache/isis/core/commons/lang/ClassUtil.java   | 20 +++++---
 .../layout/SortedByFacetForCollectionXml.java      |  6 ++-
 .../RemoveAnnotatedMethodsFacetFactory.java        |  9 +---
 .../metamodel/specloader/SpecificationLoader.java  | 20 +++++++-
 .../specloader/SpecificationLoaderDefault.java     | 39 ---------------
 .../wicket/model/models/EntityCollectionModel.java |  2 +-
 .../command/IncubatingSpecificationLoader.java     | 56 ++++++++++++++++++++++
 7 files changed, 95 insertions(+), 57 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassUtil.java
index 972ac6a..d218d65 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassUtil.java
@@ -19,13 +19,17 @@
 
 package org.apache.isis.core.commons.lang;
 
+import static org.apache.isis.commons.internal.base._With.requiresNotEmpty;
+
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 
 public final class ClassUtil {
 
@@ -60,6 +64,7 @@ public final class ClassUtil {
                     double.class, 0.0,
                     char.class, (char)0
                     );
+    
     static Map<Class<?>, Class<?>> wrapperClasses =
             MapUtil.asMap(
                     // TODO: there is a better way of doing this in 1.6 using TypeMirror
@@ -142,20 +147,21 @@ public final class ClassUtil {
         return false;
     }
 
-    public static Class<?> forName(final String fullName) {
-        final Class<?> primitiveCls = primitives.get(fullName);
-        if (primitiveCls != null) {
-            return primitiveCls;
-        }
+    public static Class<?> forNameElseFail(final String fullName) {
+    	requiresNotEmpty(fullName, "fullName");
+    	final Class<?> builtIn = ClassUtil.getBuiltIn(fullName);
+		if (builtIn != null) {
+			return builtIn;
+		}
         try {
             return _Context.loadClass(fullName);
         } catch (final ClassNotFoundException e) {
-            throw new RuntimeException(e);
+            throw _Exceptions.unrecoverable(e);
         }
     }
 
     public static Class<?> forNameElseNull(final String fullName) {
-        if (fullName == null) {
+        if (_Strings.isNullOrEmpty(fullName)) {
             return null;
         }
         try {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java
index 5816f3f..d75075e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java
@@ -39,12 +39,14 @@ public class SortedByFacetForCollectionXml extends SortedByFacetAbstract {
         if (sortedBy == null) {
             return null;
         }
-        final Class<?> sortedByClass = ClassUtil.forName(sortedBy);
+        final Class<?> sortedByClass = ClassUtil.forNameElseFail(sortedBy);
         if(sortedByClass == Comparator.class) {
             return null;
         }
 
-        return sortedByClass != null ? new SortedByFacetForCollectionXml(uncheckedCast(sortedByClass), holder) : null;
+        return sortedByClass != null 
+        		? new SortedByFacetForCollectionXml(uncheckedCast(sortedByClass), holder) 
+        				: null;
     }
 
     private SortedByFacetForCollectionXml(Class<? extends Comparator<?>> sortedBy, FacetHolder holder) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
index 36fa908..56c6fcb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
@@ -54,13 +54,8 @@ public class RemoveAnnotatedMethodsFacetFactory extends FacetFactoryAbstract {
         eventHandlerClasses = eventHandlerClassNames.stream()
         .map(name->{
             Class<? extends Annotation> eventHandlerAnnotationClass;
-            try {
-                // doing this reflectively so that don't bring in a dependency on axon.
-                eventHandlerAnnotationClass = uncheckedCast(ClassUtil.forName(name));
-            } catch(Exception ignore) {
-                // ignore
-                eventHandlerAnnotationClass = null;
-            }
+            // doing this reflectively so that don't bring in a dependency on axon.
+            eventHandlerAnnotationClass = uncheckedCast(ClassUtil.forNameElseNull(name));
             return eventHandlerAnnotationClass;
         })
         .filter(_NullSafe::isPresent)
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 a12e912..027118e 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
@@ -20,12 +20,17 @@ import java.util.List;
 
 import javax.annotation.Nullable;
 
+import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.config.property.ConfigPropertyBoolean;
 import org.apache.isis.config.property.ConfigPropertyEnum;
+import org.apache.isis.core.commons.exceptions.IsisException;
+import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.specimpl.IntrospectionState;
 
+import lombok.val;
+
 /**
  * Builds the meta-model.
  * TODO [2033] add missing java-doc
@@ -86,7 +91,20 @@ public interface SpecificationLoader {
 	 * 
 	 * @return {@code null} if {@code objectSpecId==null} 
 	 */
-	ObjectSpecification loadSpecification(@Nullable ObjectSpecId objectSpecId, IntrospectionState upTo);
+	default ObjectSpecification loadSpecification(@Nullable ObjectSpecId objectSpecId, IntrospectionState upTo) {
+		if(objectSpecId==null) {
+			return null;
+		}
+		
+		val className = objectSpecId.asString();
+		
+		if(_Strings.isNullOrEmpty(className)) {
+			return null;
+		}
+		
+		final Class<?> type = ClassUtil.forNameElseFail(className);
+		return loadSpecification(type, upTo);
+	}
 	
 	// -- SHORTCUTS
 	
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
index 59781c2..a6ead9c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
@@ -17,15 +17,12 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.registry.ServiceRegistry.BeanAdapter;
 import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.debug._Probe;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.config.internal._Config;
 import org.apache.isis.config.registry.IsisBeanTypeRegistry;
-import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.metamodel.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
@@ -242,34 +239,6 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
 	}
 
 	@Override
-	public ObjectSpecification loadSpecification(
-			@Nullable final ObjectSpecId objectSpecId, 
-			final IntrospectionState upTo) {
-		
-		if(objectSpecId==null) {
-			return null;
-		}
-		
-		val className = objectSpecId.asString();
-		
-		if(_Strings.isNullOrEmpty(className)) {
-			return null;
-		}
-
-		try {
-			final Class<?> type = loadClassByName(className);
-			return loadSpecification(type, upTo);
-
-		} catch (final ClassNotFoundException e) {
-			final ObjectSpecification spec = cache.get(className); 
-			if (spec == null) {
-				throw new IsisException("No such class available: " + className);
-			}
-			return spec;
-		}
-	}
-
-	@Override
 	public ObjectSpecification loadSpecification(@Nullable final Class<?> type, final IntrospectionState upTo) {
 		
 		if(type==null) {
@@ -408,14 +377,6 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
 		final DomainService domainServiceIfAny = type.getAnnotation(DomainService.class);
 		return domainServiceIfAny != null ? domainServiceIfAny.nature() : fallback;
 	}
-
-	private Class<?> loadClassByName(final String className) throws ClassNotFoundException {
-		final Class<?> builtIn = ClassUtil.getBuiltIn(className);
-		if (builtIn != null) {
-			return builtIn;
-		}
-		return ClassUtil.forName(className);
-	}
 	
 	private final static _Probe probe = _Probe.unlimited().label("SpecificationLoader");
 
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index 227a353..b25fa52 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -389,7 +389,7 @@ UiHintContainer {
 
     private static Class<?> forName(final ObjectSpecification objectSpec) {
         final String fullName = objectSpec.getFullIdentifier();
-        return ClassUtil.forName(fullName);
+        return ClassUtil.forNameElseFail(fullName);
     }
 
 
diff --git a/example/application/springapp/src/main/java/isis/incubator/command/IncubatingSpecificationLoader.java b/example/application/springapp/src/main/java/isis/incubator/command/IncubatingSpecificationLoader.java
new file mode 100644
index 0000000..d477181
--- /dev/null
+++ b/example/application/springapp/src/main/java/isis/incubator/command/IncubatingSpecificationLoader.java
@@ -0,0 +1,56 @@
+package isis.incubator.command;
+
+import java.util.List;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.specimpl.IntrospectionState;
+import org.springframework.stereotype.Service;
+
+@Service
+public class IncubatingSpecificationLoader implements SpecificationLoader {
+
+	@Override
+	public void init() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public void shutdown() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public List<ObjectSpecification> allSpecifications() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public ObjectSpecification lookupBySpecId(ObjectSpecId objectSpecId) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public void reloadSpecification(Class<?> domainType) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public ObjectSpecification loadSpecification(Class<?> domainType, IntrospectionState upTo) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public ObjectSpecification loadSpecification(ObjectSpecId objectSpecId, IntrospectionState upTo) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}