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

danhaywood pushed a commit to branch CAUSEWAY-3175
in repository https://gitbox.apache.org/repos/asf/causeway-app-helloworld.git

commit 190251a9f125c780c7d832c5f3a1ae26d4438e71
Author: danhaywood <[email protected]>
AuthorDate: Fri Jul 28 12:52:13 2023 +0100

    copies over Brian's example, cleans up
---
 pom.xml                                            |  6 ++
 ...{HelloWorldObject.java => HelloWorldChild.java} | 38 +++++++-----
 .../modules/hello/dom/hwo/HelloWorldObject.java    | 29 ++++++++-
 .../hello/dom/hwo/HelloWorldObject.layout.xml      | 12 ++++
 .../dom/hwo/HelloWorldObject_EnableDisable.java    | 29 +++++++++
 ...loWorldObject_LookupChildUsingAutoComplete.java | 70 ++++++++++++++++++++++
 .../HelloWorldObject_LookupChildUsingChoices.java  | 69 +++++++++++++++++++++
 7 files changed, 237 insertions(+), 16 deletions(-)

diff --git a/pom.xml b/pom.xml
index 6e385cd..32ad7a8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -114,6 +114,12 @@
             <artifactId>spring-boot-actuator-autoconfigure</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
     </dependencies>
 
     <profiles>
diff --git 
a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.java 
b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldChild.java
similarity index 81%
copy from src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.java
copy to src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldChild.java
index dbd7386..39c1c96 100644
--- a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.java
+++ b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldChild.java
@@ -7,7 +7,6 @@ import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
-import javax.jdo.annotations.NotPersistent;
 import javax.jdo.annotations.PersistenceCapable;
 import javax.jdo.annotations.Queries;
 import javax.jdo.annotations.Query;
@@ -36,7 +35,7 @@ import domainapp.modules.hello.types.Notes;
         identityType = IdentityType.DATASTORE
 )
 @Unique(
-        name = "HelloWorldObject__name__UNQ", members = {"name"}
+        name = "HelloWorldChild__name__UNQ", members = {"name"}
 )
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @Version(strategy= VersionStrategy.VERSION_NUMBER, column ="version")
@@ -44,18 +43,18 @@ import domainapp.modules.hello.types.Notes;
         @Query(
                 name = "findByName",
                 value = "SELECT " +
-                        "FROM domainapp.modules.hello.dom.hwo.HelloWorldObject 
" +
+                        "FROM domainapp.modules.hello.dom.hwo.HelloWorldChild 
" +
                         "WHERE name.indexOf(:name) >= 0"
         )
 )
-@Named("hello.HelloWorldObject")
+@Named("hello.HelloWorldChild")
 @DomainObject()
 @DomainObjectLayout()  // causes UI events to be triggered
-public class HelloWorldObject implements Comparable<HelloWorldObject> {
+public class HelloWorldChild implements Comparable<HelloWorldChild> {
 
-    private HelloWorldObject(){}
+    private HelloWorldChild(){}
 
-    public HelloWorldObject(final String name) {
+    public HelloWorldChild(final String name) {
         this.name = name;
     }
 
@@ -63,7 +62,7 @@ public class HelloWorldObject implements 
Comparable<HelloWorldObject> {
 
     private String name;
 
-    @Title(prepend = "Object: ")
+    @Title(prepend = "Child: ")
     @Name
     @PropertyLayout(fieldSetId = LayoutConstants.FieldSetId.IDENTITY, sequence 
= "1")
     public String getName() {
@@ -75,8 +74,17 @@ public class HelloWorldObject implements 
Comparable<HelloWorldObject> {
 
 
     private String notes;
+    private boolean enabled = true;
 
-    @Notes
+    public boolean isEnabled() {
+               return enabled;
+       }
+
+       public void setEnabled(boolean enabled) {
+               this.enabled = enabled;
+       }
+
+       @Notes
     @PropertyLayout(fieldSetId = LayoutConstants.FieldSetId.DETAILS, sequence 
= "1")
     public String getNotes() {
         return notes;
@@ -95,7 +103,7 @@ public class HelloWorldObject implements 
Comparable<HelloWorldObject> {
             associateWith = "name",
             describedAs = "Updates the object's name"
     )
-    public HelloWorldObject updateName(
+    public HelloWorldChild updateName(
             @Name final String name) {
         setName(name);
         return this;
@@ -128,13 +136,13 @@ public class HelloWorldObject implements 
Comparable<HelloWorldObject> {
     }
 
     @Override
-    public int compareTo(final HelloWorldObject other) {
-        return Comparator.comparing(HelloWorldObject::getName).compare(this, 
other);
+    public int compareTo(final HelloWorldChild other) {
+        return Comparator.comparing(HelloWorldChild::getName).compare(this, 
other);
     }
 
 
-    @Inject @NotPersistent RepositoryService repositoryService;
-    @Inject @NotPersistent TitleService titleService;
-    @Inject @NotPersistent MessageService messageService;
+    @Inject RepositoryService repositoryService;
+    @Inject TitleService titleService;
+    @Inject MessageService messageService;
 
 }
diff --git 
a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.java 
b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.java
index dbd7386..34b9f86 100644
--- a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.java
+++ b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.java
@@ -1,6 +1,7 @@
 package domainapp.modules.hello.dom.hwo;
 
 import java.util.Comparator;
+import java.util.List;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -17,12 +18,15 @@ import javax.jdo.annotations.VersionStrategy;
 
 import org.apache.causeway.applib.annotation.Action;
 import org.apache.causeway.applib.annotation.ActionLayout;
+import org.apache.causeway.applib.annotation.Collection;
+import org.apache.causeway.applib.annotation.CollectionLayout;
 import org.apache.causeway.applib.annotation.DomainObject;
 import org.apache.causeway.applib.annotation.DomainObjectLayout;
 import org.apache.causeway.applib.annotation.PropertyLayout;
 import org.apache.causeway.applib.annotation.Publishing;
 import org.apache.causeway.applib.annotation.SemanticsOf;
 import org.apache.causeway.applib.annotation.Title;
+import org.apache.causeway.applib.annotation.Where;
 import org.apache.causeway.applib.layout.LayoutConstants;
 import org.apache.causeway.applib.services.message.MessageService;
 import org.apache.causeway.applib.services.repository.RepositoryService;
@@ -60,7 +64,6 @@ public class HelloWorldObject implements 
Comparable<HelloWorldObject> {
     }
 
 
-
     private String name;
 
     @Title(prepend = "Object: ")
@@ -87,6 +90,30 @@ public class HelloWorldObject implements 
Comparable<HelloWorldObject> {
 
 
 
+
+    private List<HelloWorldChild> children;
+
+
+    @Collection
+    @CollectionLayout(hidden = Where.NOWHERE)
+    public List<HelloWorldChild> getChildren() {
+               return children;
+       }
+       public void setChildren(List<HelloWorldChild> children) {
+               this.children = children;
+       }
+
+
+    public HelloWorldObject createChild(String name) {
+        HelloWorldChild newChild = new HelloWorldChild(name);
+        this.children.add(newChild);
+        return this;
+    }
+
+
+
+
+
     @Action(
             semantics = SemanticsOf.IDEMPOTENT,
             executionPublishing = Publishing.ENABLED
diff --git 
a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.layout.xml 
b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.layout.xml
index 2d6693e..8a3e512 100644
--- a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.layout.xml
+++ b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.layout.xml
@@ -44,6 +44,18 @@
         </bs3:col>
         <bs3:col span="6">
             <bs3:tabGroup  unreferencedCollections="true">
+                <bs3:tab>
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:collection id = "children">
+                                <cpt:action id = "createChild"/>
+                                <cpt:action id = 
"lookupChildUsingAutoComplete"/>
+                                <cpt:action id = "lookupChildUsingChoices"/>
+                                <cpt:action id = "enableDisable"/>
+                            </cpt:collection>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
             </bs3:tabGroup>
         </bs3:col>
     </bs3:row>
diff --git 
a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject_EnableDisable.java
 
b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject_EnableDisable.java
new file mode 100644
index 0000000..fc4cec6
--- /dev/null
+++ 
b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject_EnableDisable.java
@@ -0,0 +1,29 @@
+package domainapp.modules.hello.dom.hwo;
+
+import java.util.List;
+
+import org.apache.causeway.applib.annotation.Action;
+
+import lombok.RequiredArgsConstructor;
+
+
+/**
+ * this works fine.
+ * @return
+ */
+@Action(choicesFrom = "children")
+@RequiredArgsConstructor
+public class HelloWorldObject_EnableDisable {
+
+       private final HelloWorldObject target;
+
+    /**
+     * @param selection
+     * @param enabled
+     */
+    public HelloWorldObject act(List<HelloWorldChild> selection, boolean 
enabled) {
+        selection.stream().forEach((c)->c.setEnabled(enabled));
+        return target;
+    }
+
+}
diff --git 
a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject_LookupChildUsingAutoComplete.java
 
b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject_LookupChildUsingAutoComplete.java
new file mode 100644
index 0000000..72d5b3d
--- /dev/null
+++ 
b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject_LookupChildUsingAutoComplete.java
@@ -0,0 +1,70 @@
+package domainapp.modules.hello.dom.hwo;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.applib.annotation.Action;
+import org.apache.causeway.applib.annotation.MinLength;
+import org.apache.causeway.applib.annotation.Parameter;
+
+import lombok.RequiredArgsConstructor;
+import lombok.Value;
+import lombok.experimental.Accessors;
+
+
+@SuppressWarnings("CdiManagedBeanInconsistencyInspection")
+@Action
+@RequiredArgsConstructor
+public class HelloWorldObject_LookupChildUsingAutoComplete {
+
+       @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
+    private final HelloWorldObject target;
+
+       @Value
+    @Accessors(fluent = true)
+       static class Parameters {
+               String objectName;
+               String childName;
+       }
+
+       public HelloWorldChild act(
+                       @Parameter String objectName,
+                       @Parameter String childName) {
+               return helloWorldObjects.findByName(objectName)
+                               .get(0)
+                               .getChildren()
+                               .stream()
+                               .filter((o)->o.getName().equals(childName))
+                               .findFirst()
+                               .get();
+       }
+
+    public Collection<String> 
choicesObjectName(HelloWorldObject_LookupChildUsingChoices.Parameters params) {
+        return helloWorldObjects
+                .listAll()
+                .stream()
+                .map((o)->o.getName())
+                .collect(Collectors.toList())
+                ;
+    }
+
+    /**
+     * This method is _not_ picked up.
+     */
+       public Collection<String> autoCompleteChildName(Parameters params,
+                       @MinLength(3) String search) {
+        HelloWorldObject helloWorldObject = 
helloWorldObjects.findByName(params.objectName)
+                .get(0);
+        return List.copyOf(helloWorldObject.getChildren())
+                        .stream()
+                        .map((o)->o.getName())
+                        .collect(Collectors.toList());
+       }
+
+
+       @Inject HelloWorldObjects helloWorldObjects;
+
+}
diff --git 
a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject_LookupChildUsingChoices.java
 
b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject_LookupChildUsingChoices.java
new file mode 100644
index 0000000..26c55de
--- /dev/null
+++ 
b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject_LookupChildUsingChoices.java
@@ -0,0 +1,69 @@
+package domainapp.modules.hello.dom.hwo;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.applib.annotation.Action;
+import org.apache.causeway.applib.annotation.Parameter;
+
+import lombok.RequiredArgsConstructor;
+import lombok.Value;
+import lombok.experimental.Accessors;
+
+
+@SuppressWarnings("CdiManagedBeanInconsistencyInspection")
+@Action
+@RequiredArgsConstructor
+public class HelloWorldObject_LookupChildUsingChoices {
+
+    @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
+    private final HelloWorldObject target;
+
+       @Value
+    @Accessors(fluent = true)
+       static class Parameters {
+               String objectName;
+               String childName;
+       }
+
+       public HelloWorldChild act(
+                       @Parameter String objectName,
+                       @Parameter String childName) {
+               return helloWorldObjects.findByName(objectName)
+                               .get(0)
+                               .getChildren()
+                               .stream()
+                               .filter((o)->o.getName().equals(childName))
+                               .findFirst()
+                               .get();
+       }
+
+       public Collection<String> choicesObjectName(Parameters params) {
+               return helloWorldObjects
+                               .listAll()
+                               .stream()
+                               .map((o)->o.getName())
+                               .collect(Collectors.toList())
+                               ;
+       }
+
+    /**
+     * This method is pickd up fine.
+     * @param params
+     * @return
+     */
+       public Collection<String> choicesChildName(Parameters params) {
+        HelloWorldObject helloWorldObject = 
helloWorldObjects.findByName(params.objectName)
+                .get(0);
+        return List.copyOf(helloWorldObject.getChildren())
+                        .stream()
+                        .map((o)->o.getName())
+                        .collect(Collectors.toList());
+       }
+
+       @Inject HelloWorldObjects helloWorldObjects;
+
+}

Reply via email to