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>.