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

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

commit 46a8716b7a80c2e968802fe83dce3f8d1fe5fcae
Author: Dan Haywood <d...@haywood-associates.co.uk>
AuthorDate: Sun Nov 12 18:26:00 2017 +0000

    ISIS-1728, ISIS-1776: updates helloworld and simpleapp to use typesafe 
queries; removes lombok from helloworld
    
    Also, reduces differences between helloworld and simpleapp, don't use 
ObjectContracts (instead ComparisonChain), don't use static constructor method.
---
 example/application/helloworld/pom.xml             |  8 ----
 .../java/domainapp/dom/impl/HelloWorldObject.java  | 41 ++++++++----------
 .../java/domainapp/dom/impl/HelloWorldObjects.java | 24 +++++------
 .../dom/impl/HelloWorldObjectTest_delete.java      |  2 +-
 .../dom/impl/HelloWorldObjectTest_updateName.java  |  2 +-
 .../modules/simple/dom/impl/SimpleObject.java      | 50 ++++++++++------------
 .../modules/simple/dom/impl/SimpleObjectMenu.java  |  3 ++
 .../simple/dom/impl/SimpleObjectRepository.java    | 22 ++++++----
 .../dom/impl/SimpleObjectRepository_Test.java      |  5 ---
 .../modules/simple/dom/impl/SimpleObject_Test.java |  2 +-
 10 files changed, 72 insertions(+), 87 deletions(-)

diff --git a/example/application/helloworld/pom.xml 
b/example/application/helloworld/pom.xml
index ecbd029..d13f547 100644
--- a/example/application/helloworld/pom.xml
+++ b/example/application/helloworld/pom.xml
@@ -38,8 +38,6 @@
     <properties>
         <isis.version>1.16.0-SNAPSHOT</isis.version>
 
-        <lombok.version>1.16.18</lombok.version>
-
         <compiler-plugin.source>1.8</compiler-plugin.source>
         <compiler-plugin.target>1.8</compiler-plugin.target>
         <compiler-plugin.compilerArgument></compiler-plugin.compilerArgument>
@@ -133,12 +131,6 @@
             <artifactId>hsqldb</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <version>${lombok.version}</version>
-            <scope>provided</scope>
-        </dependency>
     </dependencies>
 
     <profiles>
diff --git 
a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
 
b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
index 40708dd..672a528 100644
--- 
a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
+++ 
b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
@@ -22,7 +22,7 @@ import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.VersionStrategy;
 
-import com.google.common.collect.Ordering;
+import com.google.common.collect.ComparisonChain;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.Auditing;
@@ -40,36 +40,30 @@ import 
org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.title.TitleService;
 
-import lombok.AccessLevel;
-
 @javax.jdo.annotations.PersistenceCapable(identityType = 
IdentityType.DATASTORE, schema = "helloworld" )
 @javax.jdo.annotations.DatastoreIdentity(strategy = 
IdGeneratorStrategy.IDENTITY, column = "id")
 @javax.jdo.annotations.Version(strategy= VersionStrategy.DATE_TIME, column 
="version")
-@javax.jdo.annotations.Queries({
-        @javax.jdo.annotations.Query(
-                name = "findByName",
-                value = "SELECT "
-                        + "FROM domainapp.dom.impl.HelloWorldObject "
-                        + "WHERE name.indexOf(:name) >= 0 ")
-})
 @javax.jdo.annotations.Unique(name="HelloWorldObject_name_UNQ", members = 
{"name"})
 @DomainObject(auditing = Auditing.ENABLED)
-@DomainObjectLayout()  // trigger events etc.
-@lombok.RequiredArgsConstructor(staticName = "create")
-@lombok.Getter @lombok.Setter
+@DomainObjectLayout()  // causes UI events to be triggered
 public class HelloWorldObject implements Comparable<HelloWorldObject> {
 
+    public HelloWorldObject(final String name) {
+        this.name = name;
+    }
 
     @javax.jdo.annotations.Column(allowsNull = "false", length = 40)
-    @lombok.NonNull
     @Property(editing = Editing.DISABLED)
     @Title(prepend = "Object: ")
     private String name;
-
+    public String getName() { return name; }
+    public void setName(final String name) { this.name = name; }
 
     @javax.jdo.annotations.Column(allowsNull = "true", length = 4000)
     @Property(editing = Editing.ENABLED)
     private String notes;
+    public String getNotes() { return notes; }
+    public void setNotes(final String notes) { this.notes = notes; }
 
 
     @Action(semantics = SemanticsOf.IDEMPOTENT, command = 
CommandReification.ENABLED, publishing = Publishing.ENABLED)
@@ -80,7 +74,6 @@ public class HelloWorldObject implements 
Comparable<HelloWorldObject> {
         setName(name);
         return this;
     }
-
     public String default0UpdateName() {
         return getName();
     }
@@ -93,25 +86,29 @@ public class HelloWorldObject implements 
Comparable<HelloWorldObject> {
         repositoryService.removeAndFlush(this);
     }
 
+    @Override
+    public String toString() {
+        return getName();
+    }
 
     @Override
     public int compareTo(final HelloWorldObject other) {
-        return 
Ordering.natural().onResultOf(HelloWorldObject::getName).compare(this, other);
+        return ComparisonChain.start()
+                .compare(this.getName(), other.getName())
+                .result();
     }
 
 
-    //region > injected services
+    @javax.jdo.annotations.NotPersistent
     @javax.inject.Inject
-    @lombok.Getter(AccessLevel.NONE) @lombok.Setter(AccessLevel.NONE)
     RepositoryService repositoryService;
 
+    @javax.jdo.annotations.NotPersistent
     @javax.inject.Inject
-    @lombok.Getter(AccessLevel.NONE) @lombok.Setter(AccessLevel.NONE)
     TitleService titleService;
 
+    @javax.jdo.annotations.NotPersistent
     @javax.inject.Inject
-    @lombok.Getter(AccessLevel.NONE) @lombok.Setter(AccessLevel.NONE)
     MessageService messageService;
-    //endregion
 
 }
\ No newline at end of file
diff --git 
a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObjects.java
 
b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObjects.java
index a8c4d39..242cf7e 100644
--- 
a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObjects.java
+++ 
b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObjects.java
@@ -20,6 +20,8 @@ package domainapp.dom.impl;
 
 import java.util.List;
 
+import org.datanucleus.query.typesafe.TypesafeQuery;
+
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.MemberOrder;
@@ -28,8 +30,7 @@ import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.applib.query.QueryDefault;
-import org.apache.isis.applib.services.registry.ServiceRegistry2;
+import org.apache.isis.applib.services.jdosupport.IsisJdoSupport;
 import org.apache.isis.applib.services.repository.RepositoryService;
 
 @DomainService(
@@ -44,17 +45,19 @@ public class HelloWorldObjects {
             @Parameter(maxLength = 40)
             @ParameterLayout(named = "Name")
             final String name) {
-        return repositoryService.persist(HelloWorldObject.create(name));
+        return repositoryService.persist(new HelloWorldObject(name));
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @MemberOrder(sequence = "2")
     public List<HelloWorldObject> findByName(final String name) {
-        return repositoryService.allMatches(
-                new QueryDefault<>(
-                        HelloWorldObject.class,
-                        "findByName",
-                        "name", name));
+        TypesafeQuery<HelloWorldObject> q = 
isisJdoSupport.newTypesafeQuery(HelloWorldObject.class);
+        final QHelloWorldObject cand = QHelloWorldObject.candidate();
+        q = q.filter(
+                cand.name.indexOf(q.stringParameter("name")).ne(-1)
+        );
+        return q.setParameter("name", name)
+                .executeList();
     }
 
     @Action(semantics = SemanticsOf.SAFE, restrictTo = RestrictTo.PROTOTYPING)
@@ -63,13 +66,10 @@ public class HelloWorldObjects {
         return repositoryService.allInstances(HelloWorldObject.class);
     }
 
-
-    //region > injected services
     @javax.inject.Inject
     RepositoryService repositoryService;
 
     @javax.inject.Inject
-    ServiceRegistry2 serviceRegistry;
-    //endregion
+    IsisJdoSupport isisJdoSupport;
 
 }
diff --git 
a/example/application/helloworld/src/test/java/domainapp/dom/impl/HelloWorldObjectTest_delete.java
 
b/example/application/helloworld/src/test/java/domainapp/dom/impl/HelloWorldObjectTest_delete.java
index 23736b9..43e2967 100644
--- 
a/example/application/helloworld/src/test/java/domainapp/dom/impl/HelloWorldObjectTest_delete.java
+++ 
b/example/application/helloworld/src/test/java/domainapp/dom/impl/HelloWorldObjectTest_delete.java
@@ -48,7 +48,7 @@ public class HelloWorldObjectTest_delete {
     public void happy_case() throws Exception {
 
         // given
-        final HelloWorldObject object = HelloWorldObject.create("Foo");
+        final HelloWorldObject object = new HelloWorldObject("Foo");
         object.titleService = mockTitleService;
         object.messageService = mockMessageService;
         object.repositoryService = mockRepositoryService;
diff --git 
a/example/application/helloworld/src/test/java/domainapp/dom/impl/HelloWorldObjectTest_updateName.java
 
b/example/application/helloworld/src/test/java/domainapp/dom/impl/HelloWorldObjectTest_updateName.java
index 96b6a12..7ae316f 100644
--- 
a/example/application/helloworld/src/test/java/domainapp/dom/impl/HelloWorldObjectTest_updateName.java
+++ 
b/example/application/helloworld/src/test/java/domainapp/dom/impl/HelloWorldObjectTest_updateName.java
@@ -27,7 +27,7 @@ public class HelloWorldObjectTest_updateName {
     @Test
     public void happy_case() throws Exception {
         // given
-        final HelloWorldObject object = HelloWorldObject.create("Foo");
+        final HelloWorldObject object = new HelloWorldObject("Foo");
         assertThat(object.getName()).isEqualTo("Foo");
 
         // when
diff --git 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
index 50a5a73..92f64b1 100644
--- 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
+++ 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
@@ -21,45 +21,35 @@ package domainapp.modules.simple.dom.impl;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.VersionStrategy;
 
+import com.google.common.collect.ComparisonChain;
+
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Auditing;
+import org.apache.isis.applib.annotation.CommandReification;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.title.TitleService;
-import org.apache.isis.applib.util.ObjectContracts;
 
 import lombok.AccessLevel;
 
-@javax.jdo.annotations.PersistenceCapable(
-        identityType=IdentityType.DATASTORE,
-        schema = "simple"
-)
-@javax.jdo.annotations.DatastoreIdentity(
-        strategy=javax.jdo.annotations.IdGeneratorStrategy.IDENTITY,
-        column="id")
-@javax.jdo.annotations.Version(
-        strategy= VersionStrategy.DATE_TIME,
-        column="version")
-@javax.jdo.annotations.Queries({
-        @javax.jdo.annotations.Query(
-                name = "findByName",
-                value = "SELECT "
-                        + "FROM domainapp.modules.simple.dom.impl.SimpleObject 
"
-                        + "WHERE name.indexOf(:name) >= 0 ")
-})
+@javax.jdo.annotations.PersistenceCapable(identityType=IdentityType.DATASTORE, 
schema = "simple")
+@javax.jdo.annotations.DatastoreIdentity(strategy=javax.jdo.annotations.IdGeneratorStrategy.IDENTITY,
 column="id")
+@javax.jdo.annotations.Version(strategy= VersionStrategy.DATE_TIME, 
column="version")
 @javax.jdo.annotations.Unique(name="SimpleObject_name_UNQ", members = {"name"})
-@DomainObject() // objectType inferred from @PersistenceCapable#schema
-@DomainObjectLayout() // trigger events etc.
+@DomainObject(auditing = Auditing.ENABLED)
+@DomainObjectLayout()  // causes UI events to be triggered
 @lombok.Getter @lombok.Setter
-@lombok.RequiredArgsConstructor(staticName = "create")
+@lombok.RequiredArgsConstructor
 public class SimpleObject implements Comparable<SimpleObject> {
 
     @javax.jdo.annotations.Column(allowsNull = "false", length = 40)
@@ -73,8 +63,7 @@ public class SimpleObject implements Comparable<SimpleObject> 
{
     private String notes;
 
 
-    //region > updateName (action)
-    @Action(semantics = SemanticsOf.IDEMPOTENT)
+    @Action(semantics = SemanticsOf.IDEMPOTENT, command = 
CommandReification.ENABLED, publishing = Publishing.ENABLED)
     public SimpleObject updateName(
             @Parameter(maxLength = 40)
             @ParameterLayout(named = "Name")
@@ -90,40 +79,45 @@ public class SimpleObject implements 
Comparable<SimpleObject> {
     public TranslatableString validate0UpdateName(final String name) {
         return name != null && name.contains("!") ? 
TranslatableString.tr("Exclamation mark is not allowed") : null;
     }
-    //endregion
 
-    //region > delete (action)
+
     @Action(semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)
     public void delete() {
         final String title = titleService.titleOf(this);
         messageService.informUser(String.format("'%s' deleted", title));
         repositoryService.remove(this);
     }
-    //endregion
+
 
 
     //region > toString, compareTo
     @Override
     public String toString() {
-        return ObjectContracts.toString(this, "name");
+        return getName();
     }
 
     @Override
     public int compareTo(final SimpleObject other) {
-        return ObjectContracts.compare(this, other, "name");
+        return ComparisonChain.start()
+                .compare(this.getName(), other.getName())
+                .result();
     }
     //endregion
 
+
     //region > injected services
     @javax.inject.Inject
+    @javax.jdo.annotations.NotPersistent
     @lombok.Getter(AccessLevel.NONE) @lombok.Setter(AccessLevel.NONE)
     RepositoryService repositoryService;
 
     @javax.inject.Inject
+    @javax.jdo.annotations.NotPersistent
     @lombok.Getter(AccessLevel.NONE) @lombok.Setter(AccessLevel.NONE)
     TitleService titleService;
 
     @javax.inject.Inject
+    @javax.jdo.annotations.NotPersistent
     @lombok.Getter(AccessLevel.NONE) @lombok.Setter(AccessLevel.NONE)
     MessageService messageService;
     //endregion
diff --git 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java
 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java
index e0ac401..79b209a 100644
--- 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java
+++ 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java
@@ -20,6 +20,8 @@ package domainapp.modules.simple.dom.impl;
 
 import java.util.List;
 
+import javax.inject.Inject;
+
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
@@ -30,6 +32,7 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
+import org.apache.isis.applib.services.message.MessageService;
 
 @DomainService(
         nature = NatureOfService.VIEW_MENU_ONLY,
diff --git 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java
 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java
index 7a0f14e..1b652d5 100644
--- 
a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java
+++ 
b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java
@@ -20,10 +20,11 @@ package domainapp.modules.simple.dom.impl;
 
 import java.util.List;
 
+import org.datanucleus.query.typesafe.TypesafeQuery;
+
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.query.QueryDefault;
-import org.apache.isis.applib.services.registry.ServiceRegistry2;
+import org.apache.isis.applib.services.jdosupport.IsisJdoSupport;
 import org.apache.isis.applib.services.repository.RepositoryService;
 
 @DomainService(
@@ -37,19 +38,22 @@ public class SimpleObjectRepository {
     }
 
     public List<SimpleObject> findByName(final String name) {
-        return repositoryService.allMatches(
-                new QueryDefault<>(
-                        SimpleObject.class,
-                        "findByName",
-                        "name", name));
+        TypesafeQuery<SimpleObject> q = 
isisJdoSupport.newTypesafeQuery(SimpleObject.class);
+        final QSimpleObject cand = QSimpleObject.candidate();
+        q = q.filter(
+                cand.name.indexOf(q.stringParameter("name")).ne(-1)
+        );
+        return q.setParameter("name", name)
+                .executeList();
     }
 
     public SimpleObject create(final String name) {
-        return repositoryService.persist(SimpleObject.create(name));
+        return repositoryService.persist(new SimpleObject(name));
     }
 
     @javax.inject.Inject
     RepositoryService repositoryService;
+
     @javax.inject.Inject
-    ServiceRegistry2 serviceRegistry;
+    IsisJdoSupport isisJdoSupport;
 }
diff --git 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository_Test.java
 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository_Test.java
index eea0c81..609151e 100644
--- 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository_Test.java
+++ 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository_Test.java
@@ -29,7 +29,6 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
-import org.apache.isis.applib.services.registry.ServiceRegistry2;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.core.unittestsupport.jmocking.JMockActions;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
@@ -43,9 +42,6 @@ public class SimpleObjectRepository_Test {
     public JUnitRuleMockery2 context = 
JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
 
     @Mock
-    ServiceRegistry2 mockServiceRegistry;
-    
-    @Mock
     RepositoryService mockRepositoryService;
 
     SimpleObjectRepository simpleObjectRepository;
@@ -54,7 +50,6 @@ public class SimpleObjectRepository_Test {
     public void setUp() throws Exception {
         simpleObjectRepository = new SimpleObjectRepository();
         simpleObjectRepository.repositoryService = mockRepositoryService;
-        simpleObjectRepository.serviceRegistry = mockServiceRegistry;
     }
 
     public static class Create extends SimpleObjectRepository_Test {
diff --git 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObject_Test.java
 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObject_Test.java
index 132269b..d228676 100644
--- 
a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObject_Test.java
+++ 
b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObject_Test.java
@@ -27,7 +27,7 @@ public class SimpleObject_Test {
 
     @Before
     public void setUp() throws Exception {
-        simpleObject = SimpleObject.create("Foobar");
+        simpleObject = new SimpleObject("Foobar");
     }
 
     public static class Name extends SimpleObject_Test {

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <commits@isis.apache.org>.

Reply via email to