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/10/19 12:52:13 UTC

[isis] 03/04: Revert "ISIS-1974: reverts skipping of introspection of actions for domain services"

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

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

commit e82036bfe0b936f29f81e3fefa2bad4de09dc9c6
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 19 11:27:37 2018 +0200

    Revert "ISIS-1974: reverts skipping of introspection of actions for domain services"
    
    This reverts commit 5e592ac4920af1557bdae35bf67001aa68948db7.
---
 .../specimpl/dflt/ObjectSpecificationDefault.java  | 28 ++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index a708e79..22948ea 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.specloader.specimpl.dflt;
 
+import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
+
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.List;
@@ -30,10 +32,12 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.applib.annotation.HomePage;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.core.commons.lang.StringExtensions;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -45,6 +49,7 @@ import org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated;
 import org.apache.isis.core.metamodel.facets.all.i18n.PluralFacetTranslated;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
+import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
 import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
 import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
 import org.apache.isis.core.metamodel.facets.object.plural.inferred.PluralFacetInferred;
@@ -70,8 +75,6 @@ import org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbs
 import org.apache.isis.core.metamodel.specloader.specimpl.OneToManyAssociationDefault;
 import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationDefault;
 
-import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
-
 public class ObjectSpecificationDefault extends ObjectSpecificationAbstract implements FacetHolder {
 
     private final static Logger LOG = LoggerFactory.getLogger(ObjectSpecificationDefault.class);
@@ -256,7 +259,24 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
     }
 
     private boolean skipAssociationsAndActions() {
-        return isFixtureScript();
+        return isFixtureScript() || isDomainServiceWithDomainNatureOfServiceNotHomePage();
+    }
+
+    // TODO: this is a bit horrible; maybe instead introduce a new NatureOfService for home page services (also for seed services?)
+    private boolean isDomainServiceWithDomainNatureOfServiceNotHomePage() {
+        final DomainServiceFacet domainServiceFacet = this.getFacet(DomainServiceFacet.class);
+        if (domainServiceFacet == null) {
+            return false;
+        }
+        if (domainServiceFacet.getNatureOfService() != NatureOfService.DOMAIN) {
+            return false;
+        }
+        // domain services that have a single method annotated with @HomePage ARE introspected.
+        final Method[] methods = getCorrespondingClass().getDeclaredMethods();
+        if (methods.length != 1) {
+            return true;
+        }
+        return methods[0].getAnnotation(HomePage.class) == null;
     }
 
     private boolean isFixtureScript() {