This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch jpa-SNAPSHOT
in repository https://gitbox.apache.org/repos/asf/isis-app-simpleapp.git


The following commit(s) were added to refs/heads/jpa-SNAPSHOT by this push:
     new d28c6e7  extends to include pdf viewer and excel download
d28c6e7 is described below

commit d28c6e7e72fae0f0664acad7afd46ac0e69a7c7e
Author: Dan Haywood <d...@haywood-associates.co.uk>
AuthorDate: Mon Aug 29 19:47:10 2022 +0100

    extends to include pdf viewer and excel download
---
 module-simple/pom.xml                              |   7 +++-
 .../domainapp/modules/simple/SimpleModule.java     |   7 ++++
 .../modules/simple/dom/so/SimpleObject.java        |  42 ++++++++++++++++++++-
 .../modules/simple/dom/so/SimpleObject.layout.xml  |   5 +++
 .../simple/fixture/SimpleObjectBuilder.java        |  34 ++++++++++++++++-
 .../simple/fixture/SimpleObject_persona.java       |  23 +++++------
 .../domainapp/modules/simple/fixture/Bang.docx     | Bin 0 -> 13071 bytes
 .../domainapp/modules/simple/fixture/Bang.pdf      | Bin 0 -> 48548 bytes
 .../domainapp/modules/simple/fixture/Bar.docx      | Bin 0 -> 12936 bytes
 .../domainapp/modules/simple/fixture/Bar.pdf       | Bin 0 -> 47488 bytes
 .../domainapp/modules/simple/fixture/Fizz.docx     | Bin 0 -> 12869 bytes
 .../domainapp/modules/simple/fixture/Fizz.pdf      | Bin 0 -> 46833 bytes
 .../domainapp/modules/simple/fixture/Foo.docx      | Bin 0 -> 13069 bytes
 .../domainapp/modules/simple/fixture/Foo.pdf       | Bin 0 -> 47185 bytes
 .../domainapp/modules/simple/fixture/Frodo.docx    | Bin 0 -> 12969 bytes
 .../domainapp/modules/simple/fixture/Frodo.pdf     | Bin 0 -> 47587 bytes
 webapp/pom.xml                                     |  10 +++++
 .../main/java/domainapp/webapp/AppManifest.java    |   6 ++-
 18 files changed, 119 insertions(+), 15 deletions(-)

diff --git a/module-simple/pom.xml b/module-simple/pom.xml
index 76fbb98..aeb7cb5 100644
--- a/module-simple/pom.xml
+++ b/module-simple/pom.xml
@@ -40,9 +40,14 @@
             <artifactId>isis-applib</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.isis.extensions</groupId>
+            <artifactId>isis-extensions-pdfjs-applib</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.isis.persistence</groupId>
-            <artifactId>isis-persistence-jpa-eclipselink</artifactId>
+            <artifactId>isis-persistence-jpa-applib</artifactId>
         </dependency>
 
         <dependency>
diff --git 
a/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java 
b/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java
index 5b85205..8379b42 100644
--- a/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java
+++ b/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java
@@ -3,8 +3,11 @@ package domainapp.modules.simple;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 
+import org.apache.isis.extensions.pdfjs.applib.IsisModuleExtPdfjsApplibModel;
+import org.apache.isis.persistence.jpa.applib.IsisModulePersistenceJpaApplib;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 import org.apache.isis.testing.fixtures.applib.modules.ModuleWithFixtures;
 import 
org.apache.isis.testing.fixtures.applib.teardown.jpa.TeardownFixtureJpaAbstract;
@@ -12,6 +15,10 @@ import 
org.apache.isis.testing.fixtures.applib.teardown.jpa.TeardownFixtureJpaAb
 import domainapp.modules.simple.dom.so.SimpleObject;
 
 @Configuration
+@Import({
+        IsisModuleExtPdfjsApplibModel.class,
+        IsisModulePersistenceJpaApplib.class
+})
 @ComponentScan
 @EnableJpaRepositories
 @EntityScan(basePackageClasses = {SimpleModule.class})
diff --git 
a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java 
b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java
index 098a63d..bda401d 100644
--- 
a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java
+++ 
b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.java
@@ -4,7 +4,10 @@ import java.util.Comparator;
 
 import javax.inject.Inject;
 import javax.inject.Named;
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
 import javax.persistence.Column;
+import javax.persistence.Embedded;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -18,11 +21,13 @@ import javax.persistence.UniqueConstraint;
 import javax.persistence.Version;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import org.springframework.lang.Nullable;
+
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.Domain;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Property;
@@ -34,7 +39,10 @@ import org.apache.isis.applib.layout.LayoutConstants;
 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.value.Blob;
+import org.apache.isis.extensions.pdfjs.applib.annotations.PdfJsViewer;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
+import org.apache.isis.persistence.jpa.applib.types.BlobJpaEmbeddable;
 
 import static org.apache.isis.applib.annotation.SemanticsOf.IDEMPOTENT;
 import static 
org.apache.isis.applib.annotation.SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE;
@@ -114,6 +122,25 @@ public class SimpleObject implements 
Comparable<SimpleObject> {
     @PropertyLayout(fieldSetId = LayoutConstants.FieldSetId.DETAILS, sequence 
= "2")
     private String notes;
 
+    private org.apache.isis.applib.value.Blob attachment;
+
+    @AttributeOverrides({
+            @AttributeOverride(name="name",    
column=@Column(name="readOnlyProperty_name")),
+            
@AttributeOverride(name="mimeType",column=@Column(name="readOnlyProperty_mimeType")),
+            @AttributeOverride(name="bytes",   
column=@Column(name="readOnlyProperty_bytes"))
+    })
+    @Embedded
+    private BlobJpaEmbeddable attachmentEmbedded;
+
+    @PdfJsViewer
+    @Property()
+    @PropertyLayout(fieldSetId = "content", sequence = "1")
+    public Blob getAttachment() {
+        return BlobJpaEmbeddable.toBlob(attachmentEmbedded);
+    }
+    public void setAttachment(final Blob attachment) {
+        this.attachmentEmbedded = BlobJpaEmbeddable.fromBlob(attachment);
+    }
 
     @Action(semantics = IDEMPOTENT, commandPublishing = Publishing.ENABLED, 
executionPublishing = Publishing.ENABLED)
     @ActionLayout(
@@ -139,6 +166,19 @@ public class SimpleObject implements 
Comparable<SimpleObject> {
 
 
 
+    @Action(semantics = IDEMPOTENT, commandPublishing = Publishing.ENABLED, 
executionPublishing = Publishing.ENABLED)
+    @ActionLayout(associateWith = "attachment", position = 
ActionLayout.Position.PANEL)
+    public SimpleObject updateAttachment(
+            @Nullable final Blob attachment) {
+        setAttachment(attachment);
+        return this;
+    }
+    @MemberSupport public Blob default0UpdateAttachment() {
+        return getAttachment();
+    }
+
+
+
     @Action(semantics = NON_IDEMPOTENT_ARE_YOU_SURE)
     @ActionLayout(
             fieldSetId = LayoutConstants.FieldSetId.IDENTITY,
diff --git 
a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.layout.xml
 
b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.layout.xml
index deaca8e..7ce987a 100644
--- 
a/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.layout.xml
+++ 
b/module-simple/src/main/java/domainapp/modules/simple/dom/so/SimpleObject.layout.xml
@@ -40,6 +40,11 @@
             </bs3:row>
         </bs3:col>
         <bs3:col span="6">
+            <bs3:row>
+                <bs3:col span="12">
+                    <c:fieldSet name="Content" id="content"/>
+                </bs3:col>
+            </bs3:row>
             <bs3:tabGroup  unreferencedCollections="true">
             </bs3:tabGroup>
         </bs3:col>
diff --git 
a/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
 
b/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
index 80223be..b54ea84 100644
--- 
a/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
+++ 
b/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObjectBuilder.java
@@ -1,13 +1,21 @@
 package domainapp.modules.simple.fixture;
 
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
 import javax.inject.Inject;
 
+import org.springframework.core.io.ClassPathResource;
+
+import org.apache.isis.applib.value.Blob;
 import 
org.apache.isis.testing.fixtures.applib.personas.BuilderScriptWithResult;
 
 import domainapp.modules.simple.dom.so.SimpleObject;
 import domainapp.modules.simple.dom.so.SimpleObjects;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.SneakyThrows;
+import lombok.val;
 import lombok.experimental.Accessors;
 
 @Accessors(chain = true)
@@ -15,13 +23,37 @@ public class SimpleObjectBuilder extends 
BuilderScriptWithResult<SimpleObject> {
 
     @Getter @Setter
     private String name;
+    @Getter @Setter
+    private String contentFileName;
 
     @Override
     protected SimpleObject buildResult(final ExecutionContext ec) {
 
         checkParam("name", ec, String.class);
 
-        return wrap(simpleObjects).create(name);
+        SimpleObject simpleObject = wrap(simpleObjects).create(name);
+
+        if (contentFileName != null) {
+            val bytes = toBytes(contentFileName);
+            val attachment = new Blob(contentFileName, "application/pdf", 
bytes);
+            simpleObject.updateAttachment(attachment);
+        }
+        return simpleObject;
+    }
+
+    @SneakyThrows
+    private byte[] toBytes(String fileName){
+        InputStream inputStream = new ClassPathResource(fileName, 
getClass()).getInputStream();
+        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+
+        int nRead;
+        byte[] data = new byte[16384];
+
+        while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
+            buffer.write(data, 0, nRead);
+        }
+
+        return buffer.toByteArray();
     }
 
     // -- DEPENDENCIES
diff --git 
a/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObject_persona.java
 
b/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObject_persona.java
index fc79e2f..525206d 100644
--- 
a/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObject_persona.java
+++ 
b/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleObject_persona.java
@@ -13,22 +13,23 @@ import domainapp.modules.simple.dom.so.SimpleObjects;
 public enum SimpleObject_persona
 implements Persona<SimpleObject, SimpleObjectBuilder> {
 
-    FOO("Foo"),
-    BAR("Bar"),
-    BAZ("Baz"),
-    FRODO("Frodo"),
-    FROYO("Froyo"),
-    FIZZ("Fizz"),
-    BIP("Bip"),
-    BOP("Bop"),
-    BANG("Bang"),
-    BOO("Boo");
+    FOO("Foo", "Foo.pdf"),
+    BAR("Bar", "Bar.pdf"),
+    BAZ("Baz", null),
+    FRODO("Frodo", "Frodo.pdf"),
+    FROYO("Froyo", null),
+    FIZZ("Fizz", "Fizz.pdf"),
+    BIP("Bip", null),
+    BOP("Bop", null),
+    BANG("Bang", "Bang.pdf"),
+    BOO("Boo", null);
 
     private final String name;
+    private final String contentFileName;
 
     @Override
     public SimpleObjectBuilder builder() {
-        return new SimpleObjectBuilder().setName(name);
+        return new 
SimpleObjectBuilder().setName(name).setContentFileName(contentFileName);
     }
 
     @Override
diff --git 
a/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bang.docx 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bang.docx
new file mode 100644
index 0000000..d9a0df3
Binary files /dev/null and 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bang.docx 
differ
diff --git 
a/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bang.pdf 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bang.pdf
new file mode 100644
index 0000000..d1b6052
Binary files /dev/null and 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bang.pdf 
differ
diff --git 
a/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bar.docx 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bar.docx
new file mode 100644
index 0000000..017b363
Binary files /dev/null and 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bar.docx 
differ
diff --git 
a/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bar.pdf 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bar.pdf
new file mode 100644
index 0000000..a50b5c7
Binary files /dev/null and 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Bar.pdf 
differ
diff --git 
a/module-simple/src/main/resources/domainapp/modules/simple/fixture/Fizz.docx 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Fizz.docx
new file mode 100644
index 0000000..840a4a1
Binary files /dev/null and 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Fizz.docx 
differ
diff --git 
a/module-simple/src/main/resources/domainapp/modules/simple/fixture/Fizz.pdf 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Fizz.pdf
new file mode 100644
index 0000000..f95c8a7
Binary files /dev/null and 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Fizz.pdf 
differ
diff --git 
a/module-simple/src/main/resources/domainapp/modules/simple/fixture/Foo.docx 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Foo.docx
new file mode 100644
index 0000000..c527689
Binary files /dev/null and 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Foo.docx 
differ
diff --git 
a/module-simple/src/main/resources/domainapp/modules/simple/fixture/Foo.pdf 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Foo.pdf
new file mode 100644
index 0000000..7451793
Binary files /dev/null and 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Foo.pdf 
differ
diff --git 
a/module-simple/src/main/resources/domainapp/modules/simple/fixture/Frodo.docx 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Frodo.docx
new file mode 100644
index 0000000..27e9031
Binary files /dev/null and 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Frodo.docx 
differ
diff --git 
a/module-simple/src/main/resources/domainapp/modules/simple/fixture/Frodo.pdf 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Frodo.pdf
new file mode 100644
index 0000000..4021c2c
Binary files /dev/null and 
b/module-simple/src/main/resources/domainapp/modules/simple/fixture/Frodo.pdf 
differ
diff --git a/webapp/pom.xml b/webapp/pom.xml
index 40f59b1..b8d6923 100644
--- a/webapp/pom.xml
+++ b/webapp/pom.xml
@@ -100,6 +100,16 @@
             <artifactId>isis-valuetypes-asciidoc-ui-wkt</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.isis.extensions</groupId>
+            <artifactId>isis-extensions-exceldownload-wicket-ui</artifactId> 
<!--.-->
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.isis.extensions</groupId>
+            <artifactId>isis-extensions-pdfjs-wicket-ui</artifactId> <!--.-->
+        </dependency>
+
         <dependency>
             <groupId>org.apache.isis.extensions</groupId>
             <artifactId>isis-extensions-secman-encryption-jbcrypt</artifactId> 
<!--.-->
diff --git a/webapp/src/main/java/domainapp/webapp/AppManifest.java 
b/webapp/src/main/java/domainapp/webapp/AppManifest.java
index 440e6a6..f5892e4 100644
--- a/webapp/src/main/java/domainapp/webapp/AppManifest.java
+++ b/webapp/src/main/java/domainapp/webapp/AppManifest.java
@@ -14,9 +14,11 @@ import 
org.apache.isis.extensions.commandlog.jpa.IsisModuleExtCommandLogPersiste
 import 
org.apache.isis.extensions.executionlog.jpa.IsisModuleExtExecutionLogPersistenceJpa;
 import 
org.apache.isis.extensions.executionoutbox.jpa.IsisModuleExtExecutionOutboxPersistenceJpa;
 import org.apache.isis.extensions.flyway.impl.IsisModuleExtFlywayImpl;
+import org.apache.isis.extensions.pdfjs.wkt.ui.IsisModuleExtPdfjsWicketUi;
 import 
org.apache.isis.extensions.secman.encryption.jbcrypt.IsisModuleExtSecmanEncryptionJbcrypt;
 import org.apache.isis.extensions.secman.jpa.IsisModuleExtSecmanPersistenceJpa;
 import 
org.apache.isis.extensions.sessionlog.jpa.IsisModuleExtSessionLogPersistenceJpa;
+import 
org.apache.isis.extensions.viewer.wicket.exceldownload.ui.IsisModuleExtExcelDownloadWicketUi;
 import 
org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink;
 import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
 import org.apache.isis.testing.h2console.ui.IsisModuleTestingH2ConsoleUi;
@@ -55,10 +57,12 @@ import domainapp.webapp.quartz.QuartzModule;
         IsisModuleExtExecutionLogPersistenceJpa.class,
         IsisModuleExtExecutionOutboxPersistenceJpa.class,
 
+        IsisModuleExtExcelDownloadWicketUi.class,
+        IsisModuleExtPdfjsWicketUi.class,
+
         IsisModuleValAsciidocMetaModel.class, // for pretty rendering of DTO 
objects such as CommandDto, InteractionDto
         IsisModuleValAsciidocUiWkt.class,
 
-
         ApplicationModule.class,
         CustomModule.class,
         QuartzModule.class,

Reply via email to