You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/05/19 17:35:59 UTC
[isis] branch master updated: ISIS-2620: Demo: prepare the String
Value for a JPA variant
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 3219006 ISIS-2620: Demo: prepare the String Value for a JPA variant
3219006 is described below
commit 32190069496aa84637cb8aed2f534caa906d3de6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed May 19 19:34:20 2021 +0200
ISIS-2620: Demo: prepare the String Value for a JPA variant
that is, make value holder repository generic
also unify seeding for JPA/JDO
---
.../demoapp/dom/_infra/values/ValueHolder.java | 7 +++
.../dom/_infra/values/ValueHolderRepository.java | 71 ++++++++++++++++++++++
.../types/javalang/strings/JavaLangStrings.java | 12 ++--
.../javalang/strings/jdo/JavaLangStringJdo.java | 8 +--
.../strings/jdo/JavaLangStringJdoEntities.java | 23 +++----
.../strings/jdo/JavaLangStringJdoSeedService.java | 57 -----------------
.../JavaLangStringEntity.java} | 41 +++++--------
.../strings/persistence/JavaLangStringSeeding.java | 33 ++++++++++
8 files changed, 144 insertions(+), 108 deletions(-)
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/values/ValueHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/values/ValueHolder.java
new file mode 100644
index 0000000..f9937a9
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/values/ValueHolder.java
@@ -0,0 +1,7 @@
+package demoapp.dom._infra.values;
+
+public interface ValueHolder<T> {
+
+ T getReadOnlyProperty();
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/values/ValueHolderRepository.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/values/ValueHolderRepository.java
new file mode 100644
index 0000000..5aeab8c
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/values/ValueHolderRepository.java
@@ -0,0 +1,71 @@
+/*
+ * 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 demoapp.dom._infra.values;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Consumer;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+
+import lombok.AccessLevel;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+
+import demoapp.dom.types.Samples;
+
+@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
+public abstract class ValueHolderRepository<T, E extends ValueHolder<T>> {
+
+ @Inject protected RepositoryService repositoryService;
+
+ private final Class<E> entityType;
+
+ // -- REPOSITORY BASICS
+
+ public Optional<E> find(final T readOnlyProperty) {
+ return repositoryService
+ .firstMatch(
+ entityType,
+ x -> Objects.equals(x.getReadOnlyProperty(), readOnlyProperty));
+ }
+
+ public List<E> all() {
+ return repositoryService.allInstances(entityType);
+ }
+
+ protected abstract E newDetachedEntity(T value);
+
+ // -- SEEDING SUPPORT
+
+ @Inject protected Samples<T> samples;
+
+ public void seedSamples(
+ final @NonNull Consumer<E> onSamplePersisted) {
+
+ samples.stream()
+ .map(this::newDetachedEntity)
+ .peek(repositoryService::persist)
+ .forEach(onSamplePersisted);
+ }
+
+}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/JavaLangStrings.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/JavaLangStrings.java
index dab5bad..1ae479a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/JavaLangStrings.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/JavaLangStrings.java
@@ -36,19 +36,17 @@ import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.applib.annotation.SemanticsOf;
-import lombok.extern.log4j.Log4j2;
-
import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom._infra.values.ValueHolderRepository;
import demoapp.dom.types.Samples;
-import demoapp.dom.types.javalang.strings.jdo.JavaLangStringJdo;
-import demoapp.dom.types.javalang.strings.jdo.JavaLangStringJdoEntities;
+import demoapp.dom.types.javalang.strings.persistence.JavaLangStringEntity;
import demoapp.dom.types.javalang.strings.vm.JavaLangStringVm;
@XmlRootElement(name = "Demo")
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@DomainObject(nature=Nature.VIEW_MODEL, objectType = "demo.JavaLangStrings", editing=Editing.ENABLED)
-@Log4j2
+//@Log4j2
public class JavaLangStrings implements HasAsciiDocDescription {
public String title() {
@@ -65,13 +63,13 @@ public class JavaLangStrings implements HasAsciiDocDescription {
}
@Collection
- public List<JavaLangStringJdo> getEntities() {
+ public List<? extends JavaLangStringEntity> getEntities() {
return entities.all();
}
@Inject
@XmlTransient
- JavaLangStringJdoEntities entities;
+ ValueHolderRepository<String, ? extends JavaLangStringEntity> entities;
@Inject
@XmlTransient
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdo.java
index 916c254..8824cb4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdo.java
@@ -31,19 +31,19 @@ import org.apache.isis.applib.annotation.Property;
import org.apache.isis.applib.annotation.PropertyLayout;
import org.apache.isis.applib.annotation.Title;
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.javalang.strings.holder.JavaLangStringHolder2;
import lombok.Getter;
import lombok.Setter;
+import demoapp.dom.types.javalang.strings.persistence.JavaLangStringEntity;
+
//tag::class[]
@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
@DomainObject(
- objectType = "demo.JavaLangStringJdo"
+ objectType = "demo.JavaLangStringEntity"
)
public class JavaLangStringJdo // <.>
- implements HasAsciiDocDescription, JavaLangStringHolder2 {
+ extends JavaLangStringEntity {
//end::class[]
public JavaLangStringJdo(String initialValue) {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdoEntities.java
index 3961268..3fcf616 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdoEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdoEntities.java
@@ -18,28 +18,21 @@
*/
package demoapp.dom.types.javalang.strings.jdo;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-
-import javax.inject.Inject;
-
import org.springframework.stereotype.Service;
-import org.apache.isis.applib.services.repository.RepositoryService;
+import demoapp.dom._infra.values.ValueHolderRepository;
@Service
-public class JavaLangStringJdoEntities {
+public class JavaLangStringJdoEntities
+extends ValueHolderRepository<String, JavaLangStringJdo> {
- public Optional<JavaLangStringJdo> find(final String readOnlyProperty) {
- return repositoryService.firstMatch(JavaLangStringJdo.class, x -> Objects.equals(x.getReadOnlyProperty(), readOnlyProperty));
+ protected JavaLangStringJdoEntities() {
+ super(JavaLangStringJdo.class);
}
- public List<JavaLangStringJdo> all() {
- return repositoryService.allInstances(JavaLangStringJdo.class);
+ @Override
+ protected JavaLangStringJdo newDetachedEntity(String value) {
+ return new JavaLangStringJdo(value);
}
- @Inject
- RepositoryService repositoryService;
-
}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdoSeedService.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdoSeedService.java
deleted file mode 100644
index 3adbec6..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdoSeedService.java
+++ /dev/null
@@ -1,57 +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 demoapp.dom.types.javalang.strings.jdo;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
-
-import demoapp.dom._infra.seed.SeedServiceAbstract;
-import demoapp.dom.types.Samples;
-
-@Service
-public class JavaLangStringJdoSeedService extends SeedServiceAbstract {
-
- public JavaLangStringJdoSeedService() {
- super(JavaLangStringJdoEntityFixture::new);
- }
-
- static class JavaLangStringJdoEntityFixture extends FixtureScript {
-
- @Override
- protected void execute(ExecutionContext executionContext) {
- samples.stream()
- .map(JavaLangStringJdo::new)
- .forEach(domainObject -> {
- repositoryService.persist(domainObject);
- executionContext.addResult(this, domainObject);
- });
-
- }
-
- @Inject
- RepositoryService repositoryService;
-
- @Inject
- Samples<String> samples;
- }
-}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/persistence/JavaLangStringEntity.java
similarity index 53%
copy from examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdoEntities.java
copy to examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/persistence/JavaLangStringEntity.java
index 3961268..eda96b7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdoEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/persistence/JavaLangStringEntity.java
@@ -16,30 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
-package demoapp.dom.types.javalang.strings.jdo;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.isis.applib.services.repository.RepositoryService;
-
-@Service
-public class JavaLangStringJdoEntities {
-
- public Optional<JavaLangStringJdo> find(final String readOnlyProperty) {
- return repositoryService.firstMatch(JavaLangStringJdo.class, x -> Objects.equals(x.getReadOnlyProperty(), readOnlyProperty));
- }
-
- public List<JavaLangStringJdo> all() {
- return repositoryService.allInstances(JavaLangStringJdo.class);
- }
-
- @Inject
- RepositoryService repositoryService;
+package demoapp.dom.types.javalang.strings.persistence;
+
+import org.apache.isis.applib.annotation.DomainObject;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom._infra.values.ValueHolder;
+import demoapp.dom.types.javalang.strings.holder.JavaLangStringHolder2;
+
+@DomainObject(
+ objectType = "demo.JavaLangStringEntity" // shared permissions with concrete sub class
+)
+public abstract class JavaLangStringEntity
+implements
+ HasAsciiDocDescription,
+ JavaLangStringHolder2,
+ ValueHolder<String> {
}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/persistence/JavaLangStringSeeding.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/persistence/JavaLangStringSeeding.java
new file mode 100644
index 0000000..6cca90e
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/persistence/JavaLangStringSeeding.java
@@ -0,0 +1,33 @@
+package demoapp.dom.types.javalang.strings.persistence;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
+
+import demoapp.dom._infra.seed.SeedServiceAbstract;
+import demoapp.dom._infra.values.ValueHolderRepository;
+
+@Service
+public class JavaLangStringSeeding
+extends SeedServiceAbstract {
+
+ protected JavaLangStringSeeding() {
+ super(JavaLangStringEntityFixture::new);
+ }
+
+ static class JavaLangStringEntityFixture extends FixtureScript {
+
+ @Override
+ protected void execute(final ExecutionContext executionContext) {
+ entities.seedSamples(domainObject->
+ executionContext.addResult(this, domainObject));
+ }
+
+ @Inject
+ ValueHolderRepository<String, ? extends JavaLangStringEntity> entities;
+
+ }
+
+}