ISIS-1559: removes the mixins from SimpleObject, and simplifies code elsewhere also where possible.
Also moves the specglue from the application module to the module-simple module. Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/1e81a3a0 Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/1e81a3a0 Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/1e81a3a0 Branch: refs/heads/maint-1.13.3 Commit: 1e81a3a0e2a7815a8052a41702a96551f1d421af Parents: 735cb81 Author: Dan Haywood <d...@haywood-associates.co.uk> Authored: Thu Dec 22 18:45:49 2016 +0000 Committer: Dan Haywood <d...@haywood-associates.co.uk> Committed: Thu Dec 22 18:45:49 2016 +0000 ---------------------------------------------------------------------- .../application/simpleapp/application/pom.xml | 7 +- .../fixture/scenarios/DomainAppDemo.java | 28 +-- .../fixture/teardown/DomainAppTearDown.java | 5 - .../DomainAppAppManifestWithFixtures.java | 4 +- .../services/homepage/HomePageViewModel.java | 9 - .../bdd/specglue/BootstrappingGlue.java | 2 - .../bdd/specglue/CatalogOfFixturesGlue.java | 6 +- .../bdd/specglue/SimpleObjectGlue.java | 50 ------ .../application/bdd/specs/RunIntegBddSpecs.java | 5 +- .../SimpleObjectSpec_listAllAndCreate.feature | 2 +- .../application/integtests/Smoke_IntegTest.java | 4 +- .../simple/dom/SimpleModuleDomSubmodule.java | 2 +- .../modules/simple/dom/impl/SimpleObject.java | 180 +++++-------------- .../fixture/SimpleModuleFixtureSubmodule.java | 3 +- .../fixture/data/SimpleObjectMenu_create.java | 58 ------ .../fixture/scenario/CreateSimpleObjects.java | 81 +++++++++ .../fixture/scenario/RecreateSimpleObjects.java | 76 -------- .../tests/SimpleObjectMenu_IntegTest.java | 8 +- .../tests/SimpleObject_IntegTest.java | 10 +- .../simple/specglue/SimpleObjectMenuGlue.java | 53 ++++++ example/application/simpleapp/pom.xml | 6 + .../src/main/webapp/WEB-INF/translations-en.po | 2 +- .../src/main/webapp/WEB-INF/translations-es.po | 2 +- .../src/main/webapp/WEB-INF/translations-nl.po | 2 +- .../src/main/webapp/WEB-INF/translations.po | 2 +- 25 files changed, 221 insertions(+), 386 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/pom.xml ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/pom.xml b/example/application/simpleapp/application/pom.xml index d0dd876..293ffc0 100644 --- a/example/application/simpleapp/application/pom.xml +++ b/example/application/simpleapp/application/pom.xml @@ -107,7 +107,12 @@ <groupId>${project.groupId}</groupId> <artifactId>simpleapp-module-simple</artifactId> </dependency> - + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>simpleapp-module-simple</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> <!-- isis --> <dependency> http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java b/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java index 8914ba8..7f3ce27 100644 --- a/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java +++ b/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java @@ -18,10 +18,14 @@ */ package domainapp.application.fixture.scenarios; +import javax.annotation.Nullable; + import org.apache.isis.applib.fixturescripts.FixtureScript; import domainapp.application.fixture.teardown.DomainAppTearDown; -import domainapp.modules.simple.fixture.scenario.RecreateSimpleObjects; +import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects; +import lombok.Getter; +import lombok.Setter; public class DomainAppDemo extends FixtureScript { @@ -29,32 +33,16 @@ public class DomainAppDemo extends FixtureScript { withDiscoverability(Discoverability.DISCOVERABLE); } - //region > number (optional input) + @Nullable + @Getter @Setter private Integer number; - /** - * The number of objects to create, up to 10; optional, defaults to 3. - */ - public Integer getNumber() { - return number; - } - - public DomainAppDemo setNumber(final Integer number) { - this.number = number; - return this; - } - //endregion - @Override protected void execute(final ExecutionContext ec) { - // defaults - final int number = defaultParam("number", ec, 3); - - // execute ec.executeChild(this, new DomainAppTearDown()); - ec.executeChild(this, new RecreateSimpleObjects().setNumber(number)); + ec.executeChild(this, new CreateSimpleObjects().setNumber(number)); } } http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/teardown/DomainAppTearDown.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/teardown/DomainAppTearDown.java b/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/teardown/DomainAppTearDown.java index 44a81a8..f7ea288 100644 --- a/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/teardown/DomainAppTearDown.java +++ b/example/application/simpleapp/application/src/main/java/domainapp/application/fixture/teardown/DomainAppTearDown.java @@ -19,7 +19,6 @@ package domainapp.application.fixture.teardown; import org.apache.isis.applib.fixturescripts.FixtureScript; -import org.apache.isis.applib.services.jdosupport.IsisJdoSupport; import domainapp.modules.simple.fixture.teardown.SimpleModuleTearDown; @@ -30,8 +29,4 @@ public class DomainAppTearDown extends FixtureScript { executionContext.executeChild(this, new SimpleModuleTearDown()); } - - @javax.inject.Inject - private IsisJdoSupport isisJdoSupport; - } http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java b/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java index 1afec6f..756ff0e 100644 --- a/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java +++ b/example/application/simpleapp/application/src/main/java/domainapp/application/manifest/DomainAppAppManifestWithFixtures.java @@ -27,7 +27,7 @@ import com.google.common.collect.Maps; import org.apache.isis.applib.fixturescripts.FixtureScript; -import domainapp.modules.simple.fixture.scenario.RecreateSimpleObjects; +import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects; /** * Run the app but without setting up any fixtures. @@ -39,7 +39,7 @@ public class DomainAppAppManifestWithFixtures extends DomainAppAppManifest { */ @Override public List<Class<? extends FixtureScript>> getFixtures() { - return Lists.newArrayList(RecreateSimpleObjects.class); + return Lists.newArrayList(CreateSimpleObjects.class); } /** http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/src/main/java/domainapp/application/services/homepage/HomePageViewModel.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/src/main/java/domainapp/application/services/homepage/HomePageViewModel.java b/example/application/simpleapp/application/src/main/java/domainapp/application/services/homepage/HomePageViewModel.java index 78e0ae0..0a0fb6c 100644 --- a/example/application/simpleapp/application/src/main/java/domainapp/application/services/homepage/HomePageViewModel.java +++ b/example/application/simpleapp/application/src/main/java/domainapp/application/services/homepage/HomePageViewModel.java @@ -29,23 +29,14 @@ import domainapp.modules.simple.dom.impl.SimpleObjectRepository; @ViewModel public class HomePageViewModel { - //region > title public TranslatableString title() { return TranslatableString.tr("{num} objects", "num", getObjects().size()); } - //endregion - //region > object (collection) - @org.apache.isis.applib.annotation.HomePage public List<SimpleObject> getObjects() { return simpleObjectRepository.listAll(); } - //endregion - - //region > injected services @javax.inject.Inject SimpleObjectRepository simpleObjectRepository; - - //endregion } http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java index 53df979..43f59e1 100644 --- a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java +++ b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java @@ -27,9 +27,7 @@ public class BootstrappingGlue extends CukeGlueAbstract { @Before(value={"@integration"}, order=100) public void beforeScenarioIntegrationScope() { - DomainAppIntegTestAbstract.initSystem(); - before(ScenarioExecutionScope.INTEGRATION); } http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/CatalogOfFixturesGlue.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/CatalogOfFixturesGlue.java b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/CatalogOfFixturesGlue.java index 1a7c4c7..a5adbac 100644 --- a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/CatalogOfFixturesGlue.java +++ b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/CatalogOfFixturesGlue.java @@ -19,13 +19,13 @@ package domainapp.application.bdd.specglue; import org.apache.isis.core.specsupport.specs.CukeGlueAbstract; import cucumber.api.java.Before; -import domainapp.modules.simple.fixture.scenario.RecreateSimpleObjects; +import domainapp.application.fixture.scenarios.DomainAppDemo; public class CatalogOfFixturesGlue extends CukeGlueAbstract { - @Before(value={"@integration", "@RecreateSimpleObjects"}, order=20000) + @Before(value={"@integration", "@DomainAppDemo"}, order=20000) public void integrationFixtures() throws Throwable { - scenarioExecution().install(new RecreateSimpleObjects()); + scenarioExecution().install(new DomainAppDemo()); } } http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/SimpleObjectGlue.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/SimpleObjectGlue.java b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/SimpleObjectGlue.java deleted file mode 100644 index 258b9f0..0000000 --- a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/SimpleObjectGlue.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package domainapp.application.bdd.specglue; - -import java.util.List; -import java.util.UUID; - -import org.apache.isis.core.specsupport.specs.CukeGlueAbstract; - -import cucumber.api.java.en.Given; -import cucumber.api.java.en.When; -import domainapp.modules.simple.dom.impl.SimpleObject; -import domainapp.modules.simple.dom.impl.SimpleObjectMenu; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; - -public class SimpleObjectGlue extends CukeGlueAbstract { - - @Given("^there are.* (\\d+) simple objects$") - public void there_are_N_simple_objects(int n) throws Throwable { - try { - final List<SimpleObject> findAll = service(SimpleObjectMenu.class).listAll(); - assertThat(findAll.size(), is(n)); - putVar("list", "all", findAll); - - } finally { - assertMocksSatisfied(); - } - } - - @When("^I create a new simple object$") - public void I_create_a_new_simple_object() throws Throwable { - service(SimpleObjectMenu.class).create(UUID.randomUUID().toString()); - } - -} http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java index 18fd3be..4d9f543 100644 --- a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java +++ b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunIntegBddSpecs.java @@ -31,7 +31,10 @@ import cucumber.api.junit.Cucumber; "html:target/cucumber-html-report" ,"json:target/cucumber.json" }, - glue={"classpath:domainapp.application.bdd.specglue"}, + glue={ + "classpath:domainapp.application.bdd.specglue", + "classpath:domainapp.modules.simple.specglue" + }, strict = true, tags = { "~@backlog", "~@ignore" }) public class RunIntegBddSpecs { http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature index 77e0356..083e2cb 100644 --- a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature +++ b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/SimpleObjectSpec_listAllAndCreate.feature @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -@RecreateSimpleObjects +@DomainAppDemo Feature: List and Create New Simple Objects @integration http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/Smoke_IntegTest.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/Smoke_IntegTest.java b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/Smoke_IntegTest.java index 4b514e8..08e64ef 100644 --- a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/Smoke_IntegTest.java +++ b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/Smoke_IntegTest.java @@ -81,7 +81,7 @@ public class Smoke_IntegTest extends DomainAppIntegTestAbstract { // when - wrap(mixin(SimpleObject.updateName.class, fred)).exec("Freddy"); + wrap(fred).updateName("Freddy"); transactionService.flushTransaction(); // then @@ -97,7 +97,7 @@ public class Smoke_IntegTest extends DomainAppIntegTestAbstract { // when - wrap(mixin(SimpleObject.delete.class, fred)).exec(); + wrap(fred).delete(); transactionService.flushTransaction(); http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java index 41dc75b..7d314e8 100644 --- a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java +++ b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java @@ -19,6 +19,7 @@ package domainapp.modules.simple.dom; public final class SimpleModuleDomSubmodule { + private SimpleModuleDomSubmodule(){} public static class PropertyDomainEvent<S,T> extends org.apache.isis.applib.services.eventbus.PropertyDomainEvent<S,T> {} @@ -26,5 +27,4 @@ public final class SimpleModuleDomSubmodule { extends org.apache.isis.applib.services.eventbus.CollectionDomainEvent<S,T> {} public static class ActionDomainEvent<S> extends org.apache.isis.applib.services.eventbus.ActionDomainEvent<S> {} - } http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java ---------------------------------------------------------------------- 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 23b3c54..52e9fe9 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 @@ -22,25 +22,19 @@ import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.VersionStrategy; import org.apache.isis.applib.annotation.Action; -import org.apache.isis.applib.annotation.ActionLayout; -import org.apache.isis.applib.annotation.Auditing; -import org.apache.isis.applib.annotation.CommandReification; -import org.apache.isis.applib.annotation.Contributed; import org.apache.isis.applib.annotation.DomainObject; import org.apache.isis.applib.annotation.Editing; -import org.apache.isis.applib.annotation.Mixin; 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 domainapp.modules.simple.dom.SimpleModuleDomSubmodule; import lombok.Getter; import lombok.Setter; @@ -51,172 +45,68 @@ import lombok.Setter; ) @javax.jdo.annotations.DatastoreIdentity( strategy=javax.jdo.annotations.IdGeneratorStrategy.IDENTITY, - column="id") + column="id") @javax.jdo.annotations.Version( strategy= VersionStrategy.DATE_TIME, column="version") @javax.jdo.annotations.Queries({ @javax.jdo.annotations.Query( - name = "findByName", language = "JDOQL", + name = "findByName", value = "SELECT " + "FROM domainapp.modules.simple.dom.impl.SimpleObject " + "WHERE name.indexOf(:name) >= 0 ") }) @javax.jdo.annotations.Unique(name="SimpleObject_name_UNQ", members = {"name"}) @DomainObject( - objectType = "simple.SimpleObject", - auditing = Auditing.ENABLED, - publishing = Publishing.ENABLED + objectType = "simple.SimpleObject" ) public class SimpleObject implements Comparable<SimpleObject> { - //region > title - public TranslatableString title() { - return TranslatableString.tr("Object: {name}", "name", getName()); - } - //endregion - - //region > constructor public SimpleObject(final String name) { setName(name); } - //endregion - - //region > name (read-only property) - public static class NameType { - private NameType() { - } - - public static class Meta { - public static final int MAX_LEN = 40; - - private Meta() { - } - } - - public static class PropertyDomainEvent - extends SimpleModuleDomSubmodule.PropertyDomainEvent<SimpleObject, String> { } - } - - @javax.jdo.annotations.Column(allowsNull = "false", length = NameType.Meta.MAX_LEN) - @Property( - editing = Editing.DISABLED, - domainEvent = NameType.PropertyDomainEvent.class - ) + @javax.jdo.annotations.Column(allowsNull = "false", length = 40) + @Property(editing = Editing.DISABLED) @Getter @Setter + @Title(prepend = "Object: ") private String name; - // endregion - - //region > notes (editable property) - public static class NotesType { - private NotesType() { - } - - public static class Meta { - public static final int MAX_LEN = 4000; - - private Meta() { - } - } - - public static class PropertyDomainEvent - extends SimpleModuleDomSubmodule.PropertyDomainEvent<SimpleObject, String> { } - } - - - @javax.jdo.annotations.Column( - allowsNull = "true", - length = NotesType.Meta.MAX_LEN - ) - @Property( - command = CommandReification.ENABLED, - publishing = Publishing.ENABLED, - domainEvent = NotesType.PropertyDomainEvent.class - ) + @javax.jdo.annotations.Column(allowsNull = "true", length = 4000) + @Property(editing = Editing.ENABLED) @Getter @Setter private String notes; - //endregion + //region > updateName (action) - @Mixin(method = "exec") - public static class updateName { - - public static class ActionDomainEvent extends SimpleModuleDomSubmodule.ActionDomainEvent<SimpleObject> { - } - - private final SimpleObject simpleObject; - - public updateName(final SimpleObject simpleObject) { - this.simpleObject = simpleObject; - } - - @Action( - command = CommandReification.ENABLED, - publishing = Publishing.ENABLED, - semantics = SemanticsOf.IDEMPOTENT, - domainEvent = ActionDomainEvent.class - ) - @ActionLayout( - contributed = Contributed.AS_ACTION - ) - public SimpleObject exec( - @Parameter(maxLength = SimpleObject.NameType.Meta.MAX_LEN) - @ParameterLayout(named = "Name") - final String name) { - simpleObject.setName(name); - return simpleObject; - } - - public String default0Exec() { - return simpleObject.getName(); - } - - public TranslatableString validate0Exec(final String name) { - return name != null && name.contains("!") ? TranslatableString.tr("Exclamation mark is not allowed") : null; - } + @Action(semantics = SemanticsOf.IDEMPOTENT) + public SimpleObject updateName( + @Parameter(maxLength = 40) + @ParameterLayout(named = "Name") + final String name) { + setName(name); + return this; + } + public String default0UpdateName() { + return getName(); + } + + public TranslatableString validate0UpdateName(final String name) { + return name != null && name.contains("!") ? TranslatableString.tr("Exclamation mark is not allowed") : null; } //endregion //region > delete (action) - @Mixin(method = "exec") - public static class delete { - - public static class ActionDomainEvent extends SimpleModuleDomSubmodule.ActionDomainEvent<SimpleObject> { - } - - private final SimpleObject simpleObject; - public delete(final SimpleObject simpleObject) { - this.simpleObject = simpleObject; - } - - @Action( - domainEvent = ActionDomainEvent.class, - semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE - ) - @ActionLayout( - contributed = Contributed.AS_ACTION - ) - public void exec() { - final String title = titleService.titleOf(simpleObject); - messageService.informUser(String.format("'%s' deleted", title)); - repositoryService.remove(simpleObject); - } - - @javax.inject.Inject - RepositoryService repositoryService; - - @javax.inject.Inject - TitleService titleService; - - @javax.inject.Inject - MessageService messageService; + @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() { @@ -227,7 +117,17 @@ public class SimpleObject implements Comparable<SimpleObject> { public int compareTo(final SimpleObject other) { return ObjectContracts.compare(this, other, "name"); } + //endregion + + //region > injected services + @javax.inject.Inject + RepositoryService repositoryService; + + @javax.inject.Inject + TitleService titleService; + @javax.inject.Inject + MessageService messageService; //endregion } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleModuleFixtureSubmodule.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleModuleFixtureSubmodule.java b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleModuleFixtureSubmodule.java index 0ac5838..b840eb2 100644 --- a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleModuleFixtureSubmodule.java +++ b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleModuleFixtureSubmodule.java @@ -19,6 +19,5 @@ package domainapp.modules.simple.fixture; public final class SimpleModuleFixtureSubmodule { - - + private SimpleModuleFixtureSubmodule(){} } http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/data/SimpleObjectMenu_create.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/data/SimpleObjectMenu_create.java b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/data/SimpleObjectMenu_create.java deleted file mode 100644 index cb22a8b..0000000 --- a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/data/SimpleObjectMenu_create.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package domainapp.modules.simple.fixture.data; - -import org.apache.isis.applib.fixturescripts.FixtureScript; - -import domainapp.modules.simple.dom.impl.SimpleObject; -import domainapp.modules.simple.dom.impl.SimpleObjectMenu; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -@Accessors(chain = true) -public class SimpleObjectMenu_create extends FixtureScript { - - /** - * Name of the object (required) - */ - @Getter @Setter - private String name; - - /** - * The created simple object (output). - */ - @Getter - private SimpleObject simpleObject; - - - @Override - protected void execute(final ExecutionContext ec) { - - String name = checkParam("name", ec, String.class); - - this.simpleObject = wrap(simpleObjectMenu).create(name); - ec.addResult(this, simpleObject); - } - - @javax.inject.Inject - SimpleObjectMenu simpleObjectMenu; - -} http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java new file mode 100644 index 0000000..35c4a43 --- /dev/null +++ b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package domainapp.modules.simple.fixture.scenario; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import javax.annotation.Nullable; + +import com.google.common.collect.Lists; + +import org.apache.isis.applib.fixturescripts.FixtureScript; + +import domainapp.modules.simple.dom.impl.SimpleObject; +import domainapp.modules.simple.dom.impl.SimpleObjectMenu; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Accessors(chain = true) +public class CreateSimpleObjects extends FixtureScript { + + public final List<String> NAMES = Collections.unmodifiableList(Arrays.asList( + "Foo", "Bar", "Baz", "Frodo", "Froyo", "Fizz", "Bip", "Bop", "Bang", "Boo")); + + /** + * The number of objects to create, up to 10; optional, defaults to 3. + */ + @Nullable + @Getter @Setter + private Integer number; + + /** + * The simpleobjects created by this fixture (output). + */ + @Getter + private final List<SimpleObject> simpleObjects = Lists.newArrayList(); + + @Override + protected void execute(final ExecutionContext ec) { + + // defaults + final int number = defaultParam("number", ec, 3); + + // validate + if(number < 0 || number > NAMES.size()) { + throw new IllegalArgumentException(String.format("number must be in range [0,%d)", NAMES.size())); + } + + // execute + for (int i = 0; i < number; i++) { + final String name = NAMES.get(i); + + final SimpleObject simpleObject = wrap(simpleObjectMenu).create(name); + ec.addResult(this, simpleObject); + simpleObjects.add(simpleObject); + } + } + + @javax.inject.Inject + SimpleObjectMenu simpleObjectMenu; + +} http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/RecreateSimpleObjects.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/RecreateSimpleObjects.java b/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/RecreateSimpleObjects.java deleted file mode 100644 index a91b29c..0000000 --- a/example/application/simpleapp/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/RecreateSimpleObjects.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package domainapp.modules.simple.fixture.scenario; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import com.google.common.collect.Lists; - -import org.apache.isis.applib.fixturescripts.FixtureScript; - -import domainapp.modules.simple.dom.impl.SimpleObject; -import domainapp.modules.simple.fixture.data.SimpleObjectMenu_create; -import domainapp.modules.simple.fixture.teardown.SimpleModuleTearDown; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -@Accessors(chain = true) -public class RecreateSimpleObjects extends FixtureScript { - - public final List<String> NAMES = Collections.unmodifiableList(Arrays.asList( - "Foo", "Bar", "Baz", "Frodo", "Froyo", "Fizz", "Bip", "Bop", "Bang", "Boo")); - - /** - * The number of objects to create, up to 10; optional, defaults to 3. - */ - @Getter @Setter - private Integer number; - - /** - * The simpleobjects created by this fixture (output). - */ - @Getter - private final List<SimpleObject> simpleObjects = Lists.newArrayList(); - - @Override - protected void execute(final ExecutionContext ec) { - - // defaults - final int number = defaultParam("number", ec, 3); - - // validate - if(number < 0 || number > NAMES.size()) { - throw new IllegalArgumentException(String.format("number must be in range [0,%d)", NAMES.size())); - } - - // execute - ec.executeChild(this, new SimpleModuleTearDown()); - for (int i = 0; i < number; i++) { - final String name = NAMES.get(i); - final SimpleObjectMenu_create fs = new SimpleObjectMenu_create().setName(name); - ec.executeChild(this, fs.getName(), fs); - simpleObjects.add(fs.getSimpleObject()); - } - } - -} http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java index e6a6700..88016a9 100644 --- a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java +++ b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java @@ -32,12 +32,11 @@ import org.junit.Test; import org.apache.isis.applib.fixturescripts.FixtureScript; import org.apache.isis.applib.fixturescripts.FixtureScripts; -import org.apache.isis.applib.services.repository.RepositoryService; import org.apache.isis.applib.services.xactn.TransactionService; import domainapp.modules.simple.dom.impl.SimpleObject; import domainapp.modules.simple.dom.impl.SimpleObjectMenu; -import domainapp.modules.simple.fixture.scenario.RecreateSimpleObjects; +import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects; import domainapp.modules.simple.fixture.teardown.SimpleModuleTearDown; import domainapp.modules.simple.integtests.SimpleModuleIntegTestAbstract; import static org.assertj.core.api.Assertions.assertThat; @@ -50,8 +49,6 @@ public class SimpleObjectMenu_IntegTest extends SimpleModuleIntegTestAbstract { TransactionService transactionService; @Inject SimpleObjectMenu menu; - @Inject - RepositoryService repositoryService; public static class ListAll extends SimpleObjectMenu_IntegTest { @@ -59,7 +56,8 @@ public class SimpleObjectMenu_IntegTest extends SimpleModuleIntegTestAbstract { public void happyCase() throws Exception { // given - RecreateSimpleObjects fs = new RecreateSimpleObjects(); + fixtureScripts.runFixtureScript(new SimpleModuleTearDown(), null); + CreateSimpleObjects fs = new CreateSimpleObjects(); fixtureScripts.runFixtureScript(fs, null); transactionService.nextTransaction(); http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java index f6ac63e..9ece316 100644 --- a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java +++ b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java @@ -34,7 +34,8 @@ import org.apache.isis.core.metamodel.services.jdosupport.Persistable_datanucleu import org.apache.isis.core.metamodel.services.jdosupport.Persistable_datanucleusVersionTimestamp; import domainapp.modules.simple.dom.impl.SimpleObject; -import domainapp.modules.simple.fixture.scenario.RecreateSimpleObjects; +import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects; +import domainapp.modules.simple.fixture.teardown.SimpleModuleTearDown; import domainapp.modules.simple.integtests.SimpleModuleIntegTestAbstract; import static org.assertj.core.api.Assertions.assertThat; @@ -50,7 +51,8 @@ public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract { @Before public void setUp() throws Exception { // given - RecreateSimpleObjects fs = new RecreateSimpleObjects().setNumber(1); + fixtureScripts.runFixtureScript(new SimpleModuleTearDown(), null); + CreateSimpleObjects fs = new CreateSimpleObjects().setNumber(1); fixtureScripts.runFixtureScript(fs, null); transactionService.nextTransaction(); @@ -87,7 +89,7 @@ public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract { public void can_be_updated_directly() throws Exception { // when - wrap(mixin(SimpleObject.updateName.class, simpleObject)).exec("new name"); + wrap(simpleObject).updateName("new name"); transactionService.nextTransaction(); // then @@ -102,7 +104,7 @@ public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract { expectedExceptions.expectMessage("Exclamation mark is not allowed"); // when - wrap(mixin(SimpleObject.updateName.class, simpleObject)).exec("new name!"); + wrap(simpleObject).updateName("new name!"); } } http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/specglue/SimpleObjectMenuGlue.java ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/specglue/SimpleObjectMenuGlue.java b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/specglue/SimpleObjectMenuGlue.java new file mode 100644 index 0000000..c0b887e --- /dev/null +++ b/example/application/simpleapp/module-simple/src/test/java/domainapp/modules/simple/specglue/SimpleObjectMenuGlue.java @@ -0,0 +1,53 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package domainapp.modules.simple.specglue; + +import java.util.List; +import java.util.UUID; + +import org.apache.isis.core.specsupport.specs.CukeGlueAbstract; + +import cucumber.api.java.en.Given; +import cucumber.api.java.en.When; +import domainapp.modules.simple.dom.impl.SimpleObject; +import domainapp.modules.simple.dom.impl.SimpleObjectMenu; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +public class SimpleObjectMenuGlue extends CukeGlueAbstract { + + @Given("^there are.* (\\d+) simple objects$") + public void there_are_N_simple_objects(int n) throws Throwable { + try { + final List<SimpleObject> list = simpleObjectMenu().listAll(); + assertThat(list.size(), is(n)); + putVar("java.util.List", "simpleObjects", list); + } finally { + assertMocksSatisfied(); + } + } + + @When("^.*create a .*simple object$") + public void create_a_simple_object() throws Throwable { + simpleObjectMenu().create(UUID.randomUUID().toString()); + } + + private SimpleObjectMenu simpleObjectMenu() { + return service(SimpleObjectMenu.class); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/pom.xml ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/pom.xml b/example/application/simpleapp/pom.xml index 464ffdf..e20afcc 100644 --- a/example/application/simpleapp/pom.xml +++ b/example/application/simpleapp/pom.xml @@ -342,6 +342,12 @@ </dependency> <dependency> <groupId>${project.groupId}</groupId> + <artifactId>simpleapp-module-simple</artifactId> + <version>${project.version}</version> + <type>test-jar</type> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> <artifactId>simpleapp-application</artifactId> <version>${project.version}</version> </dependency> http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-en.po ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-en.po b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-en.po index c927400..5d9f038 100644 --- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-en.po +++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-en.po @@ -488,7 +488,7 @@ msgstr "Remember Me" #: org.apache.isis.viewer.wicket.ui.pages.login.WicketSignInPage msgid "resetButtonLabel" -msgstr "RecreateSimpleObjects" +msgstr "CreateSimpleObjects" #: org.wicketstuff.select2.Select2Choice http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po index 2730e34..5c0f06b 100644 --- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po +++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-es.po @@ -487,7 +487,7 @@ msgstr "Remember Me" #: org.apache.isis.viewer.wicket.ui.pages.login.WicketSignInPage msgid "resetButtonLabel" -msgstr "RecreateSimpleObjects" +msgstr "CreateSimpleObjects" #: org.wicketstuff.select2.Select2Choice http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-nl.po ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-nl.po b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-nl.po index 6efa8de..f7c3e89 100644 --- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-nl.po +++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations-nl.po @@ -488,7 +488,7 @@ msgstr "Remember Me" #: org.apache.isis.viewer.wicket.ui.pages.login.WicketSignInPage msgid "resetButtonLabel" -msgstr "RecreateSimpleObjects" +msgstr "CreateSimpleObjects" #: org.wicketstuff.select2.Select2Choice http://git-wip-us.apache.org/repos/asf/isis/blob/1e81a3a0/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations.po ---------------------------------------------------------------------- diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations.po b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations.po index d071cdf..52dcfb3 100644 --- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations.po +++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/translations.po @@ -487,7 +487,7 @@ msgstr "Remember Me" #: org.apache.isis.viewer.wicket.ui.pages.login.WicketSignInPage msgid "resetButtonLabel" -msgstr "RecreateSimpleObjects" +msgstr "CreateSimpleObjects" #: org.wicketstuff.select2.Select2Choice