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,