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/09/13 11:28:27 UTC

[isis] branch v2 updated: ISIS-2158 introduces 2 prototypes sub-classing BuilderScriptAbstract

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 37f18f8  ISIS-2158 introduces 2 prototypes sub-classing BuilderScriptAbstract
37f18f8 is described below

commit 37f18f82fea1fe4934d4e368855df67b6e464058
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 13 13:28:07 2019 +0200

    ISIS-2158 introduces 2 prototypes sub-classing BuilderScriptAbstract
    
    - BuilderScriptWithResult
    - BuilderScriptWithoutResult
    
    to further simplify persona declarations
    
    see for example usage
    https://github.com/apache/isis/blob/v2/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/JdoTestDomainPersona.java
---
 .../commons/internal/exceptions/_Exceptions.java   |  7 +++
 .../simple/fixture/SimpleObjectBuilder.java        | 17 ++++----
 .../isis/testdomain/jdo/JdoTestDomainPersona.java  | 39 +++++++----------
 .../testdomain/auditing/AuditerServiceTest.java    | 17 +++-----
 .../publishing/PublisherServiceTest.java           | 16 ++-----
 .../fixturescripts/BuilderScriptAbstract.java      | 50 ++++++++++++----------
 .../fixturescripts/BuilderScriptWithResult.java    | 41 ++++++++----------
 .../fixturescripts/BuilderScriptWithoutResult.java | 39 ++++++-----------
 8 files changed, 96 insertions(+), 130 deletions(-)

diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
index 814308a..00c9892 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
@@ -104,6 +104,11 @@ public final class _Exceptions {
         return new RuntimeException(String.format("unrecoverable error: '%s' with cause ...", msg), cause);
     }
 
+    public static UnsupportedOperationException unsupportedOperation() {
+        return new UnsupportedOperationException("unrecoverable error: method call not allowed/supported");
+    }
+    
+    
     /**
      * Used to hide from the compiler the fact, that this call always throws.
      *
@@ -340,4 +345,6 @@ public final class _Exceptions {
     }
 
 
+
+
 }
diff --git a/examples/apps/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java b/examples/apps/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
index 0837f07..7f1ee24 100644
--- a/examples/apps/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
+++ b/examples/apps/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
@@ -21,7 +21,7 @@ package domainapp.modules.simple.fixture;
 
 import javax.inject.Inject;
 
-import org.apache.isis.extensions.fixtures.fixturescripts.BuilderScriptAbstract;
+import org.apache.isis.extensions.fixtures.fixturescripts.BuilderScriptWithResult;
 
 import domainapp.modules.simple.dom.impl.SimpleObject;
 import domainapp.modules.simple.dom.impl.SimpleObjects;
@@ -30,21 +30,20 @@ import lombok.Setter;
 import lombok.experimental.Accessors;
 
 @Accessors(chain = true)
-public class SimpleObjectBuilder extends BuilderScriptAbstract<SimpleObject> {
+public class SimpleObjectBuilder extends BuilderScriptWithResult<SimpleObject> {
 
     @Getter @Setter
     private String name;
 
-    @Getter
-    private SimpleObject object;
-
     @Override
-    protected void execute(final ExecutionContext ec) {
-
+    protected SimpleObject buildResult(final ExecutionContext ec) {
+        
         checkParam("name", ec, String.class);
-
-        object = wrap(simpleObjects).create(name);
+        
+        return wrap(simpleObjects).create(name);
     }
+    
+    // -- DEPENDENCIES
 
     @Inject SimpleObjects simpleObjects;
 
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/JdoTestDomainPersona.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/JdoTestDomainPersona.java
index b72892c..ef87904 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/JdoTestDomainPersona.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/JdoTestDomainPersona.java
@@ -25,6 +25,8 @@ import javax.inject.Inject;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.extensions.fixtures.api.PersonaWithBuilderScript;
 import org.apache.isis.extensions.fixtures.fixturescripts.BuilderScriptAbstract;
+import org.apache.isis.extensions.fixtures.fixturescripts.BuilderScriptWithResult;
+import org.apache.isis.extensions.fixtures.fixturescripts.BuilderScriptWithoutResult;
 import org.apache.isis.extensions.secman.api.SecurityModuleConfig;
 import org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository;
 import org.apache.isis.extensions.secman.api.user.ApplicationUserRepository;
@@ -33,12 +35,12 @@ import org.apache.isis.testdomain.ldap.LdapConstants;
 import lombok.val;
 
 public enum JdoTestDomainPersona 
-implements PersonaWithBuilderScript<BuilderScriptAbstract<Inventory>>  {
+implements PersonaWithBuilderScript<BuilderScriptAbstract<? extends Object>>  {
 
     PurgeAll {
         @Override
-        public BuilderScriptAbstract<Inventory> builder() {
-            return new BuilderScriptAbstract<Inventory>() {
+        public BuilderScriptAbstract<?> builder() {
+            return new BuilderScriptWithoutResult() {
 
                 @Override
                 protected void execute(ExecutionContext ec) {
@@ -53,11 +55,6 @@ implements PersonaWithBuilderScript<BuilderScriptAbstract<Inventory>>  {
                     .forEach(repository::remove);
 
                 }
-
-                @Override
-                public Inventory getObject() {
-                    return null;
-                }
                 
                 @Inject private RepositoryService repository;
 
@@ -67,13 +64,13 @@ implements PersonaWithBuilderScript<BuilderScriptAbstract<Inventory>>  {
 
     InventoryWith1Book {
         @Override
-        public BuilderScriptAbstract<Inventory> builder() {
-            return new BuilderScriptAbstract<Inventory>() {
+        public BuilderScriptAbstract<?> builder() {
+            return new BuilderScriptWithResult<Inventory>() {
 
                 private Inventory inventory;
 
                 @Override
-                protected void execute(ExecutionContext ec) {
+                protected Inventory buildResult(ExecutionContext ec) {
 
                     val products = new HashSet<Product>();
 
@@ -83,12 +80,9 @@ implements PersonaWithBuilderScript<BuilderScriptAbstract<Inventory>>  {
 
                     inventory = Inventory.of("Sample Inventory", products);
                     repository.persist(inventory);
-
-                }
-
-                @Override
-                public Inventory getObject() {
+                    
                     return inventory;
+
                 }
                 
                 @Inject private RepositoryService repository;
@@ -99,13 +93,13 @@ implements PersonaWithBuilderScript<BuilderScriptAbstract<Inventory>>  {
     
     SvenApplicationUser {
         @Override
-        public BuilderScriptAbstract<Inventory> builder() {
-            return new BuilderScriptAbstract<Inventory>() {
+        public BuilderScriptAbstract<?> builder() {
+            return new BuilderScriptWithResult<Inventory>() {
 
                 private Inventory inventory;
 
                 @Override
-                protected void execute(ExecutionContext ec) {
+                protected Inventory buildResult(ExecutionContext ec) {
 
                     val regularUserRoleName = securityConfig.getRegularUserRoleName();
                     val regularUserRole = applicationRoleRepository.findByName(regularUserRoleName);
@@ -118,12 +112,9 @@ implements PersonaWithBuilderScript<BuilderScriptAbstract<Inventory>>  {
                     } else {
                         applicationUserRepository.enable(svenUser);
                     }
-
-                }
-
-                @Override
-                public Inventory getObject() {
+                    
                     return inventory;
+
                 }
                 
                 @Inject private ApplicationUserRepository applicationUserRepository;
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/auditing/AuditerServiceTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/auditing/AuditerServiceTest.java
index dfdec4e..cd7ec7e 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/auditing/AuditerServiceTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/auditing/AuditerServiceTest.java
@@ -69,18 +69,11 @@ class AuditerServiceTest {
     @BeforeEach
     void setUp() {
 
-        val transactionTemplate = IsisContext.createTransactionTemplate();
-        transactionTemplate.execute(status -> {
-
-            // cleanup
-            fixtureScripts.runPersona(JdoTestDomainPersona.PurgeAll);
-
-            // given
-            fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
-
-            return null;
-
-        });
+        // cleanup
+        fixtureScripts.runPersona(JdoTestDomainPersona.PurgeAll);
+        
+        // given
+        fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
 
     }
 
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/publishing/PublisherServiceTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/publishing/PublisherServiceTest.java
index e35acb2..041d975 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/publishing/PublisherServiceTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/publishing/PublisherServiceTest.java
@@ -68,19 +68,11 @@ class PublisherServiceTest {
     @BeforeEach
     void setUp() {
 
-        val transactionTemplate = IsisContext.createTransactionTemplate();
-        transactionTemplate.execute(status -> {
-
-            // cleanup
-            fixtureScripts.runPersona(JdoTestDomainPersona.PurgeAll);
-
-            // given
-            fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
-
-            return null;
-
-        });
+        // cleanup
+        fixtureScripts.runPersona(JdoTestDomainPersona.PurgeAll);
 
+        // given
+        fixtureScripts.runPersona(JdoTestDomainPersona.InventoryWith1Book);
     }
 
     @Test @Order(1)
diff --git a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/BuilderScriptAbstract.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/BuilderScriptAbstract.java
index 8d2bf77..d99c3c9 100644
--- a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/BuilderScriptAbstract.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/BuilderScriptAbstract.java
@@ -27,12 +27,17 @@ import org.apache.isis.extensions.fixtures.api.PersonaWithBuilderScript;
 import org.apache.isis.extensions.fixtures.api.PersonaWithFinder;
 import org.apache.isis.extensions.fixtures.api.WithPrereqs;
 
+import lombok.Getter;
+
 @Programmatic
 public abstract class BuilderScriptAbstract<T>
 extends FixtureScript implements WithPrereqs<T>, FixtureScriptWithExecutionStrategy {
 
-    private final FixtureScripts.MultipleExecutionStrategy executionStrategy;
+    @Getter(onMethod=@__({@Override}))
+    private final FixtureScripts.MultipleExecutionStrategy multipleExecutionStrategy;
 
+    // -- FACTORIES
+    
     /**
      * Typically we expect builders to have value semantics, so this is provided as a convenience.
      */
@@ -41,14 +46,15 @@ extends FixtureScript implements WithPrereqs<T>, FixtureScriptWithExecutionStrat
     }
 
     protected BuilderScriptAbstract(final FixtureScripts.MultipleExecutionStrategy executionStrategy) {
-        this.executionStrategy = executionStrategy;
-    }
-
-    @Override
-    public FixtureScripts.MultipleExecutionStrategy getMultipleExecutionStrategy() {
-        return executionStrategy;
+        this.multipleExecutionStrategy = executionStrategy;
     }
 
+    // -- RESULTING OBJECT
+    
+    public abstract T getObject();
+    
+    // -- RUN ANOTHER SCRIPT
+    
     @Programmatic
     public BuilderScriptAbstract<T> build(
             final FixtureScript parentFixtureScript,
@@ -63,35 +69,29 @@ extends FixtureScript implements WithPrereqs<T>, FixtureScriptWithExecutionStrat
         return executionContext.executeChildT(parentFixtureScript, this);
     }
 
-    @Override
-    public void execPrereqs(final ExecutionContext executionContext) {
-        for (final WithPrereqs.Block<T> prereq : prereqs) {
-            prereq.execute(this, executionContext);
-        }
-    }
-
-    @Override
-    protected abstract void execute(final ExecutionContext executionContext);
-
-    public abstract T getObject();
-
+    // -- RUN PERSONAS
+    
     public T objectFor(
             final PersonaWithBuilderScript<BuilderScriptAbstract<T>> persona,
-            final FixtureScript.ExecutionContext ec) {
+            final ExecutionContext executionContext) {
 
         if(persona == null) {
             return null;
         }
         final BuilderScriptAbstract<T> fixtureScript = persona.builder();
-        return ec.executeChildT(this, fixtureScript).getObject();
+        return executionContext.executeChildT(this, fixtureScript).getObject();
     }
 
+    // -- RUN FINDERS
+    
     public T findUsing(final PersonaWithFinder<T> persona) {
         if(persona == null) {
             return null;
         }
         return persona.findUsing(serviceRegistry);
     }
+    
+    // -- PREREQUISITES
 
     private final List<WithPrereqs.Block<T>> prereqs = _Lists.newArrayList();
 
@@ -100,7 +100,13 @@ extends FixtureScript implements WithPrereqs<T>, FixtureScriptWithExecutionStrat
         prereqs.add(prereq);
         return this;
     }
-
+    
+    @Override
+    public void execPrereqs(final ExecutionContext executionContext) {
+        for (final WithPrereqs.Block<T> prereq : prereqs) {
+            prereq.execute(this, executionContext);
+        }
+    }
 
 
 }
diff --git a/examples/apps/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/BuilderScriptWithResult.java
similarity index 55%
copy from examples/apps/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
copy to extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/BuilderScriptWithResult.java
index 0837f07..e913f88 100644
--- a/examples/apps/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/BuilderScriptWithResult.java
@@ -16,36 +16,29 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+package org.apache.isis.extensions.fixtures.fixturescripts;
 
-package domainapp.modules.simple.fixture;
+import org.apache.isis.applib.annotation.Programmatic;
 
-import javax.inject.Inject;
-
-import org.apache.isis.extensions.fixtures.fixturescripts.BuilderScriptAbstract;
-
-import domainapp.modules.simple.dom.impl.SimpleObject;
-import domainapp.modules.simple.dom.impl.SimpleObjects;
 import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-
-@Accessors(chain = true)
-public class SimpleObjectBuilder extends BuilderScriptAbstract<SimpleObject> {
 
-    @Getter @Setter
-    private String name;
+/**
+ * 
+ * @since 2.0
+ *
+ * @param <T>
+ */
+public abstract class BuilderScriptWithResult<T> extends BuilderScriptAbstract<T> {
 
-    @Getter
-    private SimpleObject object;
+    @Getter(onMethod=@__({@Override}))
+    public T object;
+    
+    @Programmatic
+    protected abstract T buildResult(final ExecutionContext ec);
 
     @Override
-    protected void execute(final ExecutionContext ec) {
-
-        checkParam("name", ec, String.class);
-
-        object = wrap(simpleObjects).create(name);
+    protected final void execute(final ExecutionContext executionContext) {
+        object = buildResult(executionContext);
     }
-
-    @Inject SimpleObjects simpleObjects;
-
+    
 }
diff --git a/examples/apps/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/BuilderScriptWithoutResult.java
similarity index 53%
copy from examples/apps/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
copy to extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/BuilderScriptWithoutResult.java
index 0837f07..a17fd23 100644
--- a/examples/apps/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/BuilderScriptWithoutResult.java
@@ -16,36 +16,21 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+package org.apache.isis.extensions.fixtures.fixturescripts;
 
-package domainapp.modules.simple.fixture;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 
-import javax.inject.Inject;
-
-import org.apache.isis.extensions.fixtures.fixturescripts.BuilderScriptAbstract;
-
-import domainapp.modules.simple.dom.impl.SimpleObject;
-import domainapp.modules.simple.dom.impl.SimpleObjects;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-
-@Accessors(chain = true)
-public class SimpleObjectBuilder extends BuilderScriptAbstract<SimpleObject> {
-
-    @Getter @Setter
-    private String name;
-
-    @Getter
-    private SimpleObject object;
+/**
+ * 
+ * @since 2.0
+ *
+ * @param <T>
+ */
+public abstract class BuilderScriptWithoutResult extends BuilderScriptAbstract<Object> {
 
     @Override
-    protected void execute(final ExecutionContext ec) {
-
-        checkParam("name", ec, String.class);
-
-        object = wrap(simpleObjects).create(name);
+    public Object getObject() {
+        throw _Exceptions.unsupportedOperation();
     }
-
-    @Inject SimpleObjects simpleObjects;
-
+    
 }