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 2019/01/04 14:10:32 UTC

[isis] 01/02: 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 13f34641e6fb48ff98327d38fb02eab62a5d4ad2
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  | 27 ++++++++++++++++++----
 1 file changed, 23 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 5e6fb94..4da74ce 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;
@@ -32,10 +34,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;
@@ -75,8 +79,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);
@@ -261,7 +263,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() {