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 <[email protected]>
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,