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 2021/01/26 15:57:15 UTC

[isis-app-simpleapp] 01/05: ISIS-1628: adds example

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

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

commit 4b4ab516c8a5fe18a384077c8c2ae9b2ba8c31ad
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Jan 21 18:33:45 2021 +0000

    ISIS-1628: adds example
---
 .../modules/simple/dom/co/SimpleChildObject.java   | 47 ++++++++++++++++++++++
 .../modules/simple/dom/so/SimpleObject.java        | 15 +++++++
 .../modules/simple/dom/so/SimpleObject.layout.xml  |  5 +++
 .../modules/simple/mixins/Collection_count.java    | 20 +++++++++
 .../mixins/SimpleObject_numberOfChildren.java      | 30 ++++++++++++++
 5 files changed, 117 insertions(+)

diff --git a/module-simple/src/main/java/domainapp/modules/simple/dom/co/SimpleChildObject.java b/module-simple/src/main/java/domainapp/modules/simple/dom/co/SimpleChildObject.java
new file mode 100644
index 0000000..3bc605a
--- /dev/null
+++ b/module-simple/src/main/java/domainapp/modules/simple/dom/co/SimpleChildObject.java
@@ -0,0 +1,47 @@
+package domainapp.modules.simple.dom.co;
+
+import java.util.Comparator;
+
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.IdentityType;
+import javax.jdo.annotations.VersionStrategy;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.jaxb.PersistentEntityAdapter;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import domainapp.modules.simple.dom.so.SimpleObject;
+
+@javax.jdo.annotations.PersistenceCapable(identityType=IdentityType.DATASTORE, schema = "simple")
+@javax.jdo.annotations.DatastoreIdentity(strategy=IdGeneratorStrategy.IDENTITY, column="id")
+@javax.jdo.annotations.Version(strategy= VersionStrategy.DATE_TIME, column="version")
+@javax.jdo.annotations.Unique(name="SimpleChildObject_name_UNQ", members = {"simpleObject", "name"})
+@DomainObject()
+@DomainObjectLayout()
+@XmlJavaTypeAdapter(PersistentEntityAdapter.class)
+@ToString(onlyExplicitlyIncluded = true)
+public class SimpleChildObject implements Comparable<SimpleChildObject> {
+
+	@PropertyLayout(hidden = Where.PARENTED_TABLES)
+	@Getter @Setter
+	private SimpleObject simpleObject;
+
+	@Getter @Setter
+	private String name;
+
+	private final static Comparator<SimpleChildObject> comparator =
+            Comparator.comparing(SimpleChildObject::getName);
+
+    @Override
+    public int compareTo(final SimpleChildObject other) {
+        return comparator.compare(this, other);
+    }
+
+}
diff --git a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java
index 8fbf95a..0db79b9 100644
--- a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java
+++ b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java
@@ -1,10 +1,12 @@
 package domainapp.modules.simple.dom.so;
 
 import java.util.Comparator;
+import java.util.Set;
 
 import javax.inject.Inject;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
+import javax.jdo.annotations.Persistent;
 import javax.jdo.annotations.VersionStrategy;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
@@ -21,6 +23,7 @@ import static org.apache.isis.applib.annotation.SemanticsOf.IDEMPOTENT;
 import static org.apache.isis.applib.annotation.SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE;
 
 import domainapp.modules.simple.SimpleModule;
+import domainapp.modules.simple.dom.co.SimpleChildObject;
 import domainapp.modules.simple.types.Name;
 import domainapp.modules.simple.types.Notes;
 
@@ -66,6 +69,18 @@ public class SimpleObject implements Comparable<SimpleObject> {
     @Getter @Setter
     private String notes;
 
+    @Persistent(mappedBy = "simpleObject")
+    @Getter @Setter
+    private Set<SimpleChildObject> children;
+
+    @Action
+    public SimpleObject addChild(String name) {
+    	SimpleChildObject child = new SimpleChildObject();
+    	child.setName(name);
+    	child.setSimpleObject(this);
+    	repositoryService.persist(child);
+    	return this;
+    }
 
     public static class UpdateNameActionDomainEvent extends ActionDomainEvent {}
     @Action(semantics = IDEMPOTENT,
diff --git a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.layout.xml b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.layout.xml
index a970956..0bd636d 100644
--- a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.layout.xml
+++ b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.layout.xml
@@ -21,6 +21,11 @@
                                 </c:property>
                                 <c:property id="notes"/>
                             </c:fieldSet>
+                            <c:fieldSet name="Contributed by Collection_count Mixin" id="other" unreferencedProperties="true">
+                                <c:property id="numberOfChildren">
+                                    <c:named>Number Of Children</c:named>
+                                </c:property>
+                            </c:fieldSet>
                         </bs3:col>
                     </bs3:row>
                 </bs3:tab>
diff --git a/module-simple/src/main/java/domainapp/modules/simple/mixins/Collection_count.java b/module-simple/src/main/java/domainapp/modules/simple/mixins/Collection_count.java
new file mode 100644
index 0000000..861ac47
--- /dev/null
+++ b/module-simple/src/main/java/domainapp/modules/simple/mixins/Collection_count.java
@@ -0,0 +1,20 @@
+package domainapp.modules.simple.mixins;
+
+import java.util.Collection;
+
+import org.apache.isis.applib.annotation.Property;
+
+@Property
+public abstract class Collection_count {
+	
+	private final Collection<?> collection;
+	public Collection_count(Collection<?> collection) {
+		super();
+		this.collection = collection;
+	}
+	
+	public int prop() {
+		return collection.size();
+	}
+
+}
diff --git a/module-simple/src/main/java/domainapp/modules/simple/mixins/SimpleObject_numberOfChildren.java b/module-simple/src/main/java/domainapp/modules/simple/mixins/SimpleObject_numberOfChildren.java
new file mode 100644
index 0000000..c4d810a
--- /dev/null
+++ b/module-simple/src/main/java/domainapp/modules/simple/mixins/SimpleObject_numberOfChildren.java
@@ -0,0 +1,30 @@
+package domainapp.modules.simple.mixins;
+
+import org.apache.isis.applib.annotation.Property;
+
+import domainapp.modules.simple.dom.so.SimpleObject;
+
+/*
+ * ISIS-1628: the @Property mixin annotation of the abstract super class is ignored and
+ * needs to be duplicated on the concrete sub class.
+ * 
+ * To replicate the problem remove this annotation and see how the contribution disappears from the UI.
+ */
+@Property
+public class SimpleObject_numberOfChildren extends Collection_count {
+
+	public SimpleObject_numberOfChildren(SimpleObject simpleObject) {
+		super(simpleObject.getChildren());
+	}
+
+	/*
+	 * ISIS-1628: the prop() method of the abstract super class needs to
+	 * be overridden in the concrete sub class.
+	 * 
+	 * To replicate the problem remove this method and see how the contribution disappears from the UI.
+	 */
+	@Override
+	public int prop() {
+		return super.prop();
+	}	
+}