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 2022/05/10 09:07:01 UTC

[isis] 01/01: ISIS-3037: rationalizes PersonaEnumPersistAll with v1

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

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

commit 7551f13d0752c15633843221b633b9b005b8f51a
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue May 10 10:06:34 2022 +0100

    ISIS-3037: rationalizes PersonaEnumPersistAll with v1
---
 .../applib/setup/PersonaEnumPersistAll.java        |  7 +++---
 .../fixtures/applib/personas/dom/Employee.java     | 12 +++++++++++
 .../fixtures/applib/personas/dom/Person.java       | 14 ++++++++++++
 .../applib/personas/dom/PersonRepository.java      | 18 ++++++++++++++++
 .../applib/personas/fixtures/Customer_persona.java |  1 +
 .../applib/personas/fixtures/EmployeeBuilder.java  | 25 ++++++++++++++++++++++
 .../personas/fixtures/PersistAllFixtureScript.java | 18 ++++++----------
 .../personas/fixtures/PersonBuilderScript.java     | 25 ++++++++++++++++++++++
 .../{Customer_persona.java => Person_persona.java} | 16 +++++++-------
 .../personas/fixtures/ScenarioFixtureScript.java   | 13 +++++------
 .../applib/personas/fixtures/ScenarioTest.java     | 14 ++++++++++++
 11 files changed, 132 insertions(+), 31 deletions(-)

diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/setup/PersonaEnumPersistAll.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/setup/PersonaEnumPersistAll.java
index 9108ba1392..09920a86f3 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/setup/PersonaEnumPersistAll.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/setup/PersonaEnumPersistAll.java
@@ -32,10 +32,9 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
  * @since 2.x {@index}
  */
 @Programmatic
-public class PersonaEnumPersistAll<E extends Enum<E> & PersonaWithBuilderScript<T, ? extends BuilderScriptAbstract<T>>, T>
-
-extends FixtureScript
-implements FixtureScriptWithExecutionStrategy {
+public class PersonaEnumPersistAll<T, E extends Enum<E> & PersonaWithBuilderScript<T, B>, B extends BuilderScriptAbstract<T>>
+        extends FixtureScript
+        implements FixtureScriptWithExecutionStrategy {
 
     private final Class<E> personaEnumClass;
 
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/dom/Employee.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/dom/Employee.java
new file mode 100644
index 0000000000..cc79297d1f
--- /dev/null
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/dom/Employee.java
@@ -0,0 +1,12 @@
+package org.apache.isis.testing.fixtures.applib.personas.dom;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class Employee {
+
+    private Person person;
+
+}
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/dom/Person.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/dom/Person.java
new file mode 100644
index 0000000000..b540b29b76
--- /dev/null
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/dom/Person.java
@@ -0,0 +1,14 @@
+package org.apache.isis.testing.fixtures.applib.personas.dom;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class Person {
+
+    private String firstName;
+    private String lastName;
+    private int age;
+
+}
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/dom/PersonRepository.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/dom/PersonRepository.java
new file mode 100644
index 0000000000..6f298a9bc8
--- /dev/null
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/dom/PersonRepository.java
@@ -0,0 +1,18 @@
+package org.apache.isis.testing.fixtures.applib.personas.dom;
+
+import java.util.Optional;
+
+public class PersonRepository {
+
+    public Person create(String firstName, String lastName, int age) {
+        return Person.builder()
+                .firstName(firstName)
+                .lastName(lastName)
+                .age(age)
+                .build();
+    }
+
+    public Optional<Person> findById(int id) {
+        return Optional.empty();
+    }
+}
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/Customer_persona.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/Customer_persona.java
index 7ed18efc57..22259efa88 100644
--- a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/Customer_persona.java
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/Customer_persona.java
@@ -1,5 +1,6 @@
 package org.apache.isis.testing.fixtures.applib.personas.fixtures;
 
+
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.testing.fixtures.applib.personas.Persona;
 import org.apache.isis.testing.fixtures.applib.personas.dom.Customer;
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/EmployeeBuilder.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/EmployeeBuilder.java
new file mode 100644
index 0000000000..f30a2094fe
--- /dev/null
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/EmployeeBuilder.java
@@ -0,0 +1,25 @@
+package org.apache.isis.testing.fixtures.applib.personas.fixtures;
+
+import javax.resource.spi.work.ExecutionContext;
+
+import org.apache.isis.testing.fixtures.applib.personas.BuilderScriptAbstract;
+import org.apache.isis.testing.fixtures.applib.personas.dom.Employee;
+import org.apache.isis.testing.fixtures.applib.personas.dom.Person;
+
+import lombok.Getter;
+
+
+public class EmployeeBuilder extends BuilderScriptAbstract<Employee> {
+
+    private Person_persona persona;
+
+    @Getter
+    private Employee object;
+
+    @Override
+    protected void execute(ExecutionContext executionContext) {
+        Person person = objectFor(persona, executionContext);
+        object = Employee.builder().person(person).build();
+    }
+
+}
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/PersistAllFixtureScript.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/PersistAllFixtureScript.java
index c742cb6da2..90748e7ce4 100644
--- a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/PersistAllFixtureScript.java
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/PersistAllFixtureScript.java
@@ -1,26 +1,22 @@
 package org.apache.isis.testing.fixtures.applib.personas.fixtures;
 
-import java.util.List;
-
-import javax.inject.Inject;
+import javax.resource.spi.work.ExecutionContext;
 
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
-import org.apache.isis.testing.fixtures.applib.personas.BuilderScriptWithResult;
-import org.apache.isis.testing.fixtures.applib.personas.dom.Customer;
-import org.apache.isis.testing.fixtures.applib.personas.dom.CustomerRepository;
+import org.apache.isis.testing.fixtures.applib.personas.dom.Person;
 import org.apache.isis.testing.fixtures.applib.setup.PersonaEnumPersistAll;
 
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
 
 public class PersistAllFixtureScript extends FixtureScript {
 
     @Override
     protected void execute(ExecutionContext executionContext) {
 
-        val persistAll = new PersonaEnumPersistAll<>(Customer_persona.class);
+        // create them all.
+        final PersonaEnumPersistAll<Person, Person_persona, PersonBuilderScript> persistAll = new PersonaEnumPersistAll<>(Person_persona.class);
+
+        executionContext.executeChildren(this, Person_persona.SteveSingle, Person_persona.MeghanMarriedMum);
 
-        List<Customer> customers = executionContext.executeChildT(this, persistAll).getObjects();
+        Person person = executionContext.executeChildT(this, Person_persona.SteveSingle.builder()).getObject();
     }
 }
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/PersonBuilderScript.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/PersonBuilderScript.java
new file mode 100644
index 0000000000..15fb4de10c
--- /dev/null
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/PersonBuilderScript.java
@@ -0,0 +1,25 @@
+package org.apache.isis.testing.fixtures.applib.personas.fixtures;
+
+import javax.inject.Inject;
+import javax.resource.spi.work.ExecutionContext;
+
+import org.apache.isis.testing.fixtures.applib.personas.BuilderScriptWithResult;
+import org.apache.isis.testing.fixtures.applib.personas.dom.Person;
+import org.apache.isis.testing.fixtures.applib.personas.dom.PersonRepository;
+
+import lombok.RequiredArgsConstructor;
+
+
+@RequiredArgsConstructor
+public class PersonBuilderScript extends BuilderScriptWithResult<Person> {
+
+    private final Person_persona persona;
+
+    @Override
+    protected Person buildResult(ExecutionContext ec) {
+        return customerRepository.create(persona.getFirstName(), persona.getLastName(), persona.getAge());
+    }
+
+    @Inject PersonRepository customerRepository;
+
+}
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/Customer_persona.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/Person_persona.java
similarity index 52%
copy from testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/Customer_persona.java
copy to testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/Person_persona.java
index 7ed18efc57..ef4cd0f685 100644
--- a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/Customer_persona.java
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/Person_persona.java
@@ -2,16 +2,16 @@ package org.apache.isis.testing.fixtures.applib.personas.fixtures;
 
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.testing.fixtures.applib.personas.Persona;
-import org.apache.isis.testing.fixtures.applib.personas.dom.Customer;
-import org.apache.isis.testing.fixtures.applib.personas.dom.CustomerRepository;
+import org.apache.isis.testing.fixtures.applib.personas.dom.Person;
+import org.apache.isis.testing.fixtures.applib.personas.dom.PersonRepository;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 
 @Getter
 @RequiredArgsConstructor
-public enum Customer_persona
-        implements Persona<Customer, CustomerBuilderScript> {
+public enum Person_persona
+        implements Persona<Person, PersonBuilderScript> {
 
     SteveSingle(1, "Steve", "Single", 21),
     MeghanMarriedMum(2, "Meghan", "Married-Mum", 35);
@@ -22,12 +22,12 @@ public enum Customer_persona
     private final int age;
 
     @Override
-    public CustomerBuilderScript builder() {
-        return new CustomerBuilderScript(this);
+    public PersonBuilderScript builder() {
+        return new PersonBuilderScript(this);
     }
 
     @Override
-    public Customer findUsing(ServiceRegistry serviceRegistry) {
-        return serviceRegistry.lookupServiceElseFail(CustomerRepository.class).findById(id).orElseThrow();
+    public Person findUsing(ServiceRegistry serviceRegistry2) {
+        return serviceRegistry2.lookupServiceElseFail(PersonRepository.class).findById(id).orElseThrow(RuntimeException::new);
     }
 }
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/ScenarioFixtureScript.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/ScenarioFixtureScript.java
index 48d51f2001..bbffa3a3be 100644
--- a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/ScenarioFixtureScript.java
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/ScenarioFixtureScript.java
@@ -1,13 +1,9 @@
 package org.apache.isis.testing.fixtures.applib.personas.fixtures;
 
-import javax.inject.Inject;
+import javax.resource.spi.work.ExecutionContext;
 
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
-import org.apache.isis.testing.fixtures.applib.personas.BuilderScriptWithResult;
-import org.apache.isis.testing.fixtures.applib.personas.dom.Customer;
-import org.apache.isis.testing.fixtures.applib.personas.dom.CustomerRepository;
-
-import lombok.RequiredArgsConstructor;
+import org.apache.isis.testing.fixtures.applib.personas.dom.Person;
 
 
 public class ScenarioFixtureScript extends FixtureScript {
@@ -16,9 +12,10 @@ public class ScenarioFixtureScript extends FixtureScript {
     protected void execute(ExecutionContext executionContext) {
 
         // build it ..
-        Customer steve = Customer_persona.SteveSingle.build(this, executionContext);
+        Person steve = Person_persona.SteveSingle.build(this, executionContext);
 
         // ... look it up
-        Customer steve2 = Customer_persona.SteveSingle.findUsing(serviceRegistry);
+        Person steve2 = Person_persona.SteveSingle.findUsing(serviceRegistry);
+
     }
 }
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/ScenarioTest.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/ScenarioTest.java
new file mode 100644
index 0000000000..e19d13ba42
--- /dev/null
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/personas/fixtures/ScenarioTest.java
@@ -0,0 +1,14 @@
+package org.apache.isis.testing.fixtures.applib.personas.fixtures;
+
+import org.apache.isis.testing.fixtures.applib.setup.PersonaEnumPersistAll;
+
+import lombok.val;
+
+
+public class ScenarioTest {
+
+
+    void setup() {
+        val persistAll = new PersonaEnumPersistAll<>(Person_persona.class);
+    }
+}