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;
+ }
+
+}