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