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