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/21 19:05:50 UTC
[isis-app-simpleapp] 01/01: 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 d3f6c92dbd99c54bc5d355113595ff9fdc5568f9
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 7155a96..cc7f996 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 SimpleObject.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();
+ }
+}