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/24 07:41:00 UTC

[isis] branch master updated: ISIS-2513: Demo: add JPA support for WrapperFactory

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 9113b98  ISIS-2513: Demo: add JPA support for WrapperFactory
9113b98 is described below

commit 9113b98e306f59dd929fc2be281340339a7dd698
Author: andi-huber <ah...@apache.org>
AuthorDate: Mon May 24 09:40:51 2021 +0200

    ISIS-2513: Demo: add JPA support for WrapperFactory
---
 .../src/main/java/demoapp/dom/DemoModuleJpa.java   |  2 ++
 .../demoapp/dom/services/core/ServicesMenu.java    | 10 +++---
 .../WrapperFactoryJdo-description.adoc}            |  4 +++
 .../core/wrapperFactory/jdo/WrapperFactoryJdo.java |  2 +-
 .../WrapperFactoryJpa-description.adoc}            |  5 +++
 .../WrapperFactoryJpa.java}                        | 42 ++++++++++++++--------
 .../jpa/WrapperFactoryJpaEntities.java             | 40 +++++++++++++++++++++
 7 files changed, 84 insertions(+), 21 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
index c2abcfc..9f1b90e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
@@ -26,6 +26,7 @@ import org.springframework.context.annotation.Profile;
 import org.apache.isis.extensions.commandlog.jpa.IsisModuleExtCommandLogJpa;
 import org.apache.isis.persistence.jpa.eclipselink.IsisModuleJpaEclipselink;
 
+import demoapp.dom.services.core.wrapperFactory.jpa.WrapperFactoryJpa;
 import demoapp.dom.services.extensions.secman.apptenancy.jpa.TenantedJpa;
 import demoapp.dom.types.isis.blobs.jpa.IsisBlobJpa;
 import demoapp.dom.types.isis.clobs.jpa.IsisClobJpa;
@@ -118,6 +119,7 @@ import demoapp.dom.types.primitive.shorts.jpa.PrimitiveShortJpa;
         WrapperByteJpa.class,
 
         TenantedJpa.class,
+        WrapperFactoryJpa.class,
 
 })
 public class DemoModuleJpa {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/ServicesMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/ServicesMenu.java
index e51bf86..c5e4bf9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/ServicesMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/ServicesMenu.java
@@ -27,11 +27,11 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.factory.FactoryService;
 
+import demoapp.dom._infra.values.ValueHolderRepository;
 import demoapp.dom.services.core.errorreportingservice.ErrorReportingServiceDemoVm;
 import demoapp.dom.services.core.eventbusservice.EventBusServiceDemoVm;
 import demoapp.dom.services.core.messageservice.MessageServiceDemoVm;
-import demoapp.dom.services.core.wrapperFactory.jdo.WrapperFactoryJdo;
-import demoapp.dom.services.core.wrapperFactory.jdo.WrapperFactoryJdoEntities;
+import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity;
 import demoapp.dom.services.core.xmlSnapshotService.XmlSnapshotParentVm;
 import demoapp.dom.services.core.xmlSnapshotService.peer.XmlSnapshotPeerVm;
 import lombok.RequiredArgsConstructor;
@@ -42,7 +42,7 @@ import lombok.val;
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class ServicesMenu {
 
-    final WrapperFactoryJdoEntities wrapperFactoryJdoEntities;
+    final ValueHolderRepository<String, ? extends WrapperFactoryEntity> wrapperFactoryEntities;
     final FactoryService factoryService;
 
 
@@ -66,8 +66,8 @@ public class ServicesMenu {
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-gift", describedAs = "Formal object interactions + async")
-    public WrapperFactoryJdo wrapperFactory(){
-        return wrapperFactoryJdoEntities.first().orElse(null);
+    public WrapperFactoryEntity wrapperFactory(){
+        return wrapperFactoryEntities.first().orElse(null);
     }
 
     @Action(semantics = SemanticsOf.SAFE)
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo-description.adoc
similarity index 92%
copy from examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc
copy to examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo-description.adoc
index c93da7c..32dc53a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo-description.adoc
@@ -2,3 +2,7 @@
 
 CAUTION: TODO - to document
 
+[source,java]
+----
+include::WrapperFactoryJdo.java[tags=class]
+----
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
index 461d645..4842bb4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
@@ -50,7 +50,7 @@ import lombok.val;
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         nature=Nature.ENTITY
-        , objectType = "demo.WrapperFactoryJdo"
+        , objectType = "demo.WrapperFactoryEntity"
         , editing = Editing.DISABLED
 )
 public class WrapperFactoryJdo
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa-description.adoc
similarity index 91%
rename from examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa-description.adoc
index c93da7c..66a65fd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa-description.adoc
@@ -2,3 +2,8 @@
 
 CAUTION: TODO - to document
 
+[source,java]
+----
+include::WrapperFactoryJpa.java[tags=class]
+----
+
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa.java
similarity index 79%
copy from examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
copy to examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa.java
index 461d645..40d9586 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa.java
@@ -16,13 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.services.core.wrapperFactory.jdo;
+package demoapp.dom.services.core.wrapperFactory.jpa;
 
 import javax.inject.Inject;
-import javax.jdo.annotations.DatastoreIdentity;
-import javax.jdo.annotations.IdGeneratorStrategy;
-import javax.jdo.annotations.IdentityType;
-import javax.jdo.annotations.PersistenceCapable;
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
 
 import org.springframework.context.annotation.Profile;
 
@@ -37,23 +38,30 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.applib.services.wrapper.control.AsyncControl;
+import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPointResolver;
 
 import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity;
 import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity_updatePropertyAsyncMixin;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 import lombok.val;
 
-@Profile("demo-jdo")
+@Profile("demo-jpa")
 //tag::class[]
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Entity
+@Table(
+  schema = "demo",
+  name = "WrapperFactoryJpa"
+)
+@EntityListeners(JpaEntityInjectionPointResolver.class)
 @DomainObject(
         nature=Nature.ENTITY
-        , objectType = "demo.WrapperFactoryJdo"
+        , objectType = "demo.WrapperFactoryEntity"
         , editing = Editing.DISABLED
 )
-public class WrapperFactoryJdo
+@NoArgsConstructor
+public class WrapperFactoryJpa
         extends WrapperFactoryEntity {
 
     @Inject transient WrapperFactory wrapperFactory;
@@ -62,7 +70,7 @@ public class WrapperFactoryJdo
     // ...
 //end::class[]
 
-    public WrapperFactoryJdo(String initialValue) {
+    public WrapperFactoryJpa(String initialValue) {
         this.propertyAsync = initialValue;
         this.propertyAsyncMixin = initialValue;
     }
@@ -71,6 +79,10 @@ public class WrapperFactoryJdo
         return "WrapperFactory";
     }
 
+    @Id
+    @GeneratedValue
+    private Long id;
+
 //tag::property[]
     @Property()
     @PropertyLayout(fieldSetId = "async", sequence = "1")
@@ -92,7 +104,7 @@ public class WrapperFactoryJdo
         , associateWith = "propertyAsync"
         , sequence = "1"
     )
-    public WrapperFactoryJdo updatePropertyAsync(final String value) {
+    public WrapperFactoryJpa updatePropertyAsync(final String value) {
         val control = AsyncControl.returningVoid().withSkipRules();
         val wrapperFactoryJdo = this.wrapperFactory.asyncWrap(this, control);
         wrapperFactoryJdo.setPropertyAsync(value);
@@ -115,10 +127,10 @@ public class WrapperFactoryJdo
         , associateWith = "propertyAsyncMixin"
         , sequence = "1"
     )
-    public WrapperFactoryJdo updatePropertyUsingAsyncWrapMixin(final String value) {
-        val control = AsyncControl.returning(WrapperFactoryJdo.class).withSkipRules();
+    public WrapperFactoryJpa updatePropertyUsingAsyncWrapMixin(final String value) {
+        val control = AsyncControl.returning(WrapperFactoryJpa.class).withSkipRules();
         val mixin = this.wrapperFactory.asyncWrapMixin(WrapperFactoryEntity_updatePropertyAsyncMixin.class, this, control);
-        WrapperFactoryJdo act = (WrapperFactoryJdo) mixin.act(value);
+        WrapperFactoryJpa act = (WrapperFactoryJpa) mixin.act(value);
         return this;
     }
     public String default0UpdatePropertyUsingAsyncWrapMixin() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpaEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpaEntities.java
new file mode 100644
index 0000000..573a98a
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpaEntities.java
@@ -0,0 +1,40 @@
+/*
+ *  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.services.core.wrapperFactory.jpa;
+
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Service;
+
+import demoapp.dom._infra.values.ValueHolderRepository;
+
+@Profile("demo-jpa")
+@Service
+public class WrapperFactoryJpaEntities
+extends ValueHolderRepository<String, WrapperFactoryJpa> {
+
+    protected WrapperFactoryJpaEntities() {
+        super(WrapperFactoryJpa.class);
+    }
+
+    @Override
+    protected WrapperFactoryJpa newDetachedEntity(String value) {
+        return new WrapperFactoryJpa(value);
+    }
+
+}