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 2018/10/11 12:37:56 UTC
[isis] branch v2 updated: ISIS-1976: further cleanup ServiceUtil,
fixes a NPE regression
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 2acc1da ISIS-1976: further cleanup ServiceUtil, fixes a NPE regression
2acc1da is described below
commit 2acc1da22593a254f20cdb714e2066aa96f9bdc3
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 11 14:37:51 2018 +0200
ISIS-1976: further cleanup ServiceUtil, fixes a NPE regression
Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
...jectSpecIdFacetDerivedFromClassNameFactory.java | 3 +-
.../isis/core/metamodel/services/ServiceUtil.java | 53 +++++++++++-----------
.../core/metamodel/services/ServiceUtil_Test.java | 8 ++--
3 files changed, 33 insertions(+), 31 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
index 59db0a7..4d3d2ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
@@ -74,7 +74,8 @@ MetaModelValidatorRefiner {
private static ObjectSpecIdFacet createObjectSpecIdFacet(final FacetHolder facetHolder, final Class<?> substitutedClass) {
final boolean isService = isService(facetHolder);
if (isService) {
- final String id = ServiceUtil.idOfType(substitutedClass);
+
+ final String id = ServiceUtil.getExplicitelySpecifiedIdOfType(substitutedClass).orElse(null);
if (id != null) {
return new ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId(id, facetHolder);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
index 0bb7773..769fa6c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
@@ -16,11 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
-
package org.apache.isis.core.metamodel.services;
import java.lang.reflect.Method;
-import java.util.function.Supplier;
+import java.util.Optional;
import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.commons.internal.base._Strings;
@@ -33,36 +32,39 @@ public final class ServiceUtil {
private ServiceUtil() {
}
- public static String idOfType(final Class<?> serviceClass) {
-
- final String serviceType = serviceTypeUsingAnnotation(serviceClass);
- if (serviceType != null) {
- return serviceType;
- }
-
- return serviceTypeUsingIdGetterOrElseGet(serviceClass, ()->serviceClass.newInstance(), ()->null);
- }
-
public static String idOfPojo(final Object serviceObject) {
final Class<?> serviceClass = serviceObject.getClass();
- final String serviceType = serviceTypeUsingAnnotation(serviceClass);
- if(serviceType != null) {
- return serviceType;
- }
-
- return serviceTypeUsingIdGetterOrElseGet(serviceClass, ()->serviceObject, ()->normalize(serviceClass));
+ return explicitelySpecifiedIdOfType(serviceClass, ()->serviceObject)
+ .orElseGet(()->normalize(serviceClass));
}
public static String idOfSpec(final ObjectSpecification serviceSpec) {
- return idOfType(serviceSpec.getCorrespondingClass());
+ final Class<?> serviceClass = serviceSpec.getCorrespondingClass();
+ return explicitelySpecifiedIdOfType(serviceClass, serviceClass::newInstance)
+ .orElseGet(()->normalize(serviceClass));
+ }
+
+ public static String idOfAdapter(final ManagedObject serviceAdapter) {
+ return idOfPojo(serviceAdapter.getPojo());
}
- public static String idOfAdapter(final ManagedObject adapter) {
- return idOfPojo(adapter.getPojo());
+ public static Optional<String> getExplicitelySpecifiedIdOfType(final Class<?> serviceClass) {
+ return explicitelySpecifiedIdOfType(serviceClass, serviceClass::newInstance);
}
// -- HELPER
+ private static Optional<String> explicitelySpecifiedIdOfType(
+ final Class<?> serviceClass,
+ final _Functions.CheckedSupplier<Object> serviceInstanceSupplier) {
+
+ final String serviceType = serviceTypeUsingAnnotation(serviceClass);
+ if (serviceType != null) {
+ return Optional.of(serviceType);
+ }
+ return serviceTypeUsingIdGetter(serviceClass, serviceInstanceSupplier);
+ }
+
private static String serviceTypeUsingAnnotation(final Class<?> serviceClass) {
final String serviceType;
final DomainService domainService = serviceClass.getAnnotation(DomainService.class);
@@ -75,17 +77,16 @@ public final class ServiceUtil {
return null;
}
- private static String serviceTypeUsingIdGetterOrElseGet(
+ private static Optional<String> serviceTypeUsingIdGetter(
final Class<?> serviceClass,
- final _Functions.CheckedSupplier<Object> objectSupplier,
- final Supplier<String> orElse
+ final _Functions.CheckedSupplier<Object> serviceInstanceSupplier
) {
try {
final Method m = serviceClass.getMethod("getId");
- return (String) m.invoke(objectSupplier.get());
+ return Optional.ofNullable((String) m.invoke(serviceInstanceSupplier.get()));
} catch (Exception e) {
- return orElse.get();
+ return Optional.empty();
}
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServiceUtil_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServiceUtil_Test.java
index 4549312..cd266fb 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServiceUtil_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServiceUtil_Test.java
@@ -63,7 +63,7 @@ public class ServiceUtil_Test {
is(equalTo("foo.SomeServiceAnnotated")));
assertThat(
- ServiceUtil.idOfType(SomeServiceAnnotated.class),
+ ServiceUtil.getExplicitelySpecifiedIdOfType(SomeServiceAnnotated.class).orElse(null),
is(equalTo("foo.SomeServiceAnnotated")));
}
@@ -75,7 +75,7 @@ public class ServiceUtil_Test {
is(equalTo("bar.SomeServiceWithId")));
assertThat(
- ServiceUtil.idOfType(SomeServiceWithId.class),
+ ServiceUtil.getExplicitelySpecifiedIdOfType(SomeServiceWithId.class).orElse(null),
is(equalTo("bar.SomeServiceWithId")));
}
@@ -87,7 +87,7 @@ public class ServiceUtil_Test {
is(equalTo("bop.SomeServiceAnnotated")));
assertThat(
- ServiceUtil.idOfType(SomeServiceAnnotatedAndWithId.class),
+ ServiceUtil.getExplicitelySpecifiedIdOfType(SomeServiceAnnotatedAndWithId.class).orElse(null),
is(equalTo("bop.SomeServiceAnnotated")));
}
@@ -97,7 +97,7 @@ public class ServiceUtil_Test {
ServiceUtil.idOfPojo(new SomeServiceWithoutAnnotationOrId()),
is(equalTo("org.apache.isis.core.metamodel.services.ServiceUtil_Test$SomeServiceWithoutAnnotationOrId")));
assertThat(
- ServiceUtil.idOfType(SomeServiceWithoutAnnotationOrId.class),
+ ServiceUtil.getExplicitelySpecifiedIdOfType(SomeServiceWithoutAnnotationOrId.class).orElse(null),
is(nullValue()));
}