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/11/30 13:38:50 UTC

[isis] branch master updated: ISIS-2903: adds reg. test for Jaxb viewmodel w/ JPA entities embedded

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 5d73a3e  ISIS-2903: adds reg. test for Jaxb viewmodel w/ JPA entities embedded
5d73a3e is described below

commit 5d73a3e79e232ec473fbb50504d14e18daa8b524
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Nov 30 14:38:40 2021 +0100

    ISIS-2903: adds reg. test for Jaxb viewmodel w/ JPA entities embedded
---
 .../applib/jaxb/PersistentEntitiesAdapter.java     |  2 -
 .../isis/applib/jaxb/PersistentEntityAdapter.java  |  2 -
 .../testdomain/persistence/jpa/JpaJaxbTest.java    | 94 ++++++++++++++++++++++
 .../isis/testdomain/jpa/JpaInventoryJaxbVm.java    | 77 ++++++++++++++++++
 4 files changed, 171 insertions(+), 4 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java
index 5f58816..d12aec4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java
@@ -42,7 +42,6 @@ public class PersistentEntitiesAdapter extends XmlAdapter<OidsDto, Iterable<Obje
 
     @Override
     public List<Object> unmarshal(final OidsDto oidsDto) {
-        System.err.printf("unmarshal[] %s%n", oidsDto);
         List<Object> domainObjects = new ArrayList<>();
         for (val oidDto : oidsDto.getOid()) {
             val bookmark = Bookmark.forOidDto(oidDto);
@@ -54,7 +53,6 @@ public class PersistentEntitiesAdapter extends XmlAdapter<OidsDto, Iterable<Obje
 
     @Override
     public OidsDto marshal(final Iterable<Object> domainObjects) {
-        System.err.printf("marshal[] %s%n", domainObjects);
         if(domainObjects == null) {
             return null;
         }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java
index 602453e..6cca8f4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java
@@ -34,14 +34,12 @@ public class PersistentEntityAdapter extends XmlAdapter<OidDto, Object> {
 
     @Override
     public Object unmarshal(final OidDto oidDto) throws Exception {
-        System.err.printf("unmarshal %s%n", oidDto);
         val bookmark = Bookmark.forOidDto(oidDto);
         return bookmarkService.lookup(bookmark).orElse(null);
     }
 
     @Override
     public OidDto marshal(final Object domainObject) throws Exception {
-        System.err.printf("marshal %s%n", domainObject);
         if(domainObject == null) {
             return null;
         }
diff --git a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaJaxbTest.java b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaJaxbTest.java
new file mode 100644
index 0000000..454c399
--- /dev/null
+++ b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaJaxbTest.java
@@ -0,0 +1,94 @@
+/*
+ *  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 org.apache.isis.testdomain.persistence.jpa;
+
+import java.sql.SQLException;
+
+import javax.inject.Inject;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.transaction.annotation.Transactional;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.core.config.presets.IsisPresets;
+import org.apache.isis.testdomain.conf.Configuration_usingJpa;
+import org.apache.isis.testdomain.jpa.JpaInventoryJaxbVm;
+import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
+
+import static org.apache.isis.testdomain.persistence.jpa._TestFixtures.setUp3Books;
+
+import lombok.val;
+
+@SpringBootTest(
+        classes = {
+                Configuration_usingJpa.class,
+        })
+@TestPropertySource(IsisPresets.UseLog4j2Test)
+@Transactional
+class JpaJaxbTest extends IsisIntegrationTestAbstract {
+
+    @Inject private JaxbService jaxbService;
+    @Inject private BookmarkService bookmarkService;
+
+    private JpaInventoryJaxbVm inventoryJaxbVm;
+
+    @BeforeEach
+    void setUp() throws SQLException {
+        setUp3Books(repositoryService);
+        inventoryJaxbVm = factoryService.viewModel(new JpaInventoryJaxbVm());
+    }
+
+    @Test
+    void inventoryJaxbVm_shouldRoundtripProperly() {
+
+        // assert injection worked initially
+        assertEquals("JpaInventoryJaxbVm; 3 products", inventoryJaxbVm.title());
+
+        val books = inventoryJaxbVm.listBooks();
+        val favoriteBook = books.get(0);
+        assertEquals(3, books.size());
+        inventoryJaxbVm.setName("bookstore");
+        inventoryJaxbVm.setBooks(books);
+        inventoryJaxbVm.setFavoriteBook(favoriteBook);
+
+        // round-trip
+        val xml = jaxbService.toXml(inventoryJaxbVm);
+        System.err.printf("%s%n", xml);
+        val recoveredVm =
+                serviceInjector.injectServicesInto(
+                jaxbService.fromXml(JpaInventoryJaxbVm.class, xml));
+
+        assertEquals("JpaInventoryJaxbVm; 3 products", recoveredVm.title());
+        assertEquals("bookstore", recoveredVm.getName());
+        assertEquals(3, recoveredVm.getBooks().size());
+        assertEquals(favoriteBook.getName(), recoveredVm.getFavoriteBook().getName());
+
+        assertEquals(
+                bookmarkService.bookmarkFor(favoriteBook),
+                bookmarkService.bookmarkFor(recoveredVm.getFavoriteBook()));
+
+    }
+
+}
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/JpaInventoryJaxbVm.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/JpaInventoryJaxbVm.java
new file mode 100644
index 0000000..d4225b0
--- /dev/null
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/JpaInventoryJaxbVm.java
@@ -0,0 +1,77 @@
+package org.apache.isis.testdomain.jpa;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.ObjectSupport;
+import org.apache.isis.applib.annotation.Optionality;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.jaxb.PersistentEntitiesAdapter;
+import org.apache.isis.applib.jaxb.PersistentEntityAdapter;
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.testdomain.jpa.entities.JpaBook;
+import org.apache.isis.testdomain.jpa.entities.JpaProduct;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@XmlRootElement(name = "root")
+@XmlType(
+        propOrder = {"name", "favoriteBook", "books"}
+)
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL
+        , logicalTypeName = "testdomain.jdo.JpaInventoryJaxbVm"
+)
+public class JpaInventoryJaxbVm {
+
+    @XmlTransient @Inject
+    private RepositoryService repository;
+
+    @ObjectSupport public String title() {
+        return String.format("JpaInventoryJaxbVm; %d products", listProducts().size());
+    }
+
+    @Property(editing = Editing.ENABLED)
+    @Getter @Setter
+    @XmlElement
+    private String name;
+
+    @Action
+    public List<JpaProduct> listProducts() {
+        return repository.allInstances(JpaProduct.class);
+    }
+
+    @Action
+    public List<JpaBook> listBooks() {
+        return repository.allInstances(JpaBook.class);
+    }
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED, optionality = Optionality.OPTIONAL)
+    @XmlElement(required = false)
+    @XmlJavaTypeAdapter(PersistentEntityAdapter.class)
+    private JpaBook favoriteBook = null;
+
+    @Getter @Setter
+    @Collection
+    @XmlElement(name = "book")
+    @XmlJavaTypeAdapter(PersistentEntitiesAdapter.class)
+    private java.util.Collection<JpaBook> books = new ArrayList<>();
+
+}
\ No newline at end of file