From baea85928868090da0c0ccb4f6cf11aa3849d349 Mon Sep 17 00:00:00 2001 From: Sven Ruppert Date: Tue, 19 Nov 2019 15:52:21 +1100 Subject: [PATCH] init --- .gitignore | 28 ++++++ 10_component/pom.xml | 22 +++++ .../vaadin/component/pdfviewer/PdfViewer.java | 92 ++++++++++++++++++ 20_component_test/pom.xml | 44 +++++++++ 30_demo/pom.xml | 56 +++++++++++ 30_demo/src/main/java/demo/WebUIRunner.java | 12 +++ .../main/java/org/rapidpm/demo/VaadinApp.java | 48 +++++++++ demo.pdf | Bin 0 -> 50054 bytes deploy.sh | 19 ++++ docker-compose.yml | 35 +++++++ pom.xml | 59 +++++++++++ 11 files changed, 415 insertions(+) create mode 100644 .gitignore create mode 100644 10_component/pom.xml create mode 100644 10_component/src/main/java/org/rapidpm/vaadin/component/pdfviewer/PdfViewer.java create mode 100644 20_component_test/pom.xml create mode 100644 30_demo/pom.xml create mode 100644 30_demo/src/main/java/demo/WebUIRunner.java create mode 100644 30_demo/src/main/java/org/rapidpm/demo/VaadinApp.java create mode 100644 demo.pdf create mode 100755 deploy.sh create mode 100644 docker-compose.yml create mode 100644 pom.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..11b6d4f --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +_data/webdrivers/* +node/* +node_modules/* + + + +.DS_Store +.classpath +.project +.settings +.idea +*.iml +*/target/ +vaadin-testbench-standalone/dependency-reduced-pom.xml +vaadin-testbench-recorder/selenium-extensions/core/user-extensions.js +vaadin-testbench-recorder/chrome/content/selenium/scripts/selenium-api.js +vaadin-testbench-recorder/chrome/content/selenium/scripts/selenium-browserbot.js +vaadin-testbench-recorder/chrome/testbench-recorder.jar +vaadin-testbench-recorder/extension/ +vaadin-testbench-recorder/install.rdf +vaadin-testbench-playground +vaadin-testbench-integration-tests/error-screenshots/ +vaadin-testbench-integration-tests/config/testbench.properties +chromedriver.log +phantomjsdriver.log + +test/temp/ + diff --git a/10_component/pom.xml b/10_component/pom.xml new file mode 100644 index 0000000..1cfab28 --- /dev/null +++ b/10_component/pom.xml @@ -0,0 +1,22 @@ + + + + pdfviewer-for-flow-parent + org.rapidpm.vaadin + 1.0.0-RPM + + 4.0.0 + + pdfviewer-for-flow + + + + javax.servlet + javax.servlet-api + provided + + + + \ No newline at end of file diff --git a/10_component/src/main/java/org/rapidpm/vaadin/component/pdfviewer/PdfViewer.java b/10_component/src/main/java/org/rapidpm/vaadin/component/pdfviewer/PdfViewer.java new file mode 100644 index 0000000..f15a4d6 --- /dev/null +++ b/10_component/src/main/java/org/rapidpm/vaadin/component/pdfviewer/PdfViewer.java @@ -0,0 +1,92 @@ +package org.rapidpm.vaadin.component.pdfviewer; + + +import com.vaadin.flow.component.Component; +import com.vaadin.flow.component.DetachEvent; +import com.vaadin.flow.component.Tag; +import com.vaadin.flow.component.dependency.JsModule; +import com.vaadin.flow.component.dependency.NpmPackage; +import com.vaadin.flow.server.StreamRegistration; +import com.vaadin.flow.server.StreamResource; +import com.vaadin.flow.server.StreamResourceRegistry; +import com.vaadin.flow.server.VaadinSession; + +import java.net.URI; + +@Tag("pdf-browser-viewer") +@JsModule("@lrnwebcomponents/pdf-browser-viewer/pdf-browser-viewer.js") +@NpmPackage(value = "@lrnwebcomponents/pdf-browser-viewer", version = "2.2.0") +public class PdfViewer + extends Component { + + public static final String NOT_SUPPORTED_MESSAGE = "not-supported-message"; + public static final String NOT_SUPPORTED_LINK_MESSAGE = "not-supported-link-message"; + public static final String CARD = "card"; + public static final String DOWNLOAD_LABEL = "downloadLabel"; + public static final String ELEVATION = "elevation"; + public static final String HEIGHT = "height"; + public static final String WIDTH = "width"; + public static final String FILE = "file"; + private StreamRegistration streamRegistration; + + public PdfViewer() { } + + public void setStreamResource(StreamResource streamResource) { + unregister(); + streamRegistration = VaadinSession.getCurrent() + .getResourceRegistry() + .registerResource(streamResource); + URI uri = StreamResourceRegistry.getURI(streamResource); + final String file = uri.toASCIIString(); + setFile(file); + } + + public void setFile(String file) { + getElement().setAttribute(FILE, file); + } + + public void setNotSupportedMessage(String message) { + getElement().setAttribute(NOT_SUPPORTED_MESSAGE, message); + } + + public void setNotSupportedLinkMessage(String message) { + getElement().setAttribute(NOT_SUPPORTED_LINK_MESSAGE, message); + } + + public void setCard(boolean card) { + getElement().setAttribute(CARD, card); + } + + public void setDownloadLabel(String label) { + getElement().setAttribute(DOWNLOAD_LABEL, label); + } + + public void setElevation(String elevation) { + getElement().setAttribute(ELEVATION, elevation); + } + + public void setHeight(String height) { + getElement().setAttribute(HEIGHT, height); + getElement().getStyle() + .set(HEIGHT, height); + } + + public void setWidth(String width) { + getElement().setAttribute(WIDTH, width); + getElement().getStyle() + .set(WIDTH, width); + } + + @Override + protected void onDetach(DetachEvent detachEvent) { + super.onDetach(detachEvent); + unregister(); + } + + private void unregister() { + if (streamRegistration != null) { + streamRegistration.unregister(); + streamRegistration = null; + } + } +} \ No newline at end of file diff --git a/20_component_test/pom.xml b/20_component_test/pom.xml new file mode 100644 index 0000000..a54e006 --- /dev/null +++ b/20_component_test/pom.xml @@ -0,0 +1,44 @@ + + + + + pdfviewer-for-flow-parent + org.rapidpm.vaadin + 1.0.0-RPM + + 4.0.0 + + pdfviewer-for-flow-test + + + + + localhost + file://${basedir}/target/repo/ + + + localhost + file://${basedir}/target/snapshot-repo/ + + + + + \ No newline at end of file diff --git a/30_demo/pom.xml b/30_demo/pom.xml new file mode 100644 index 0000000..116245a --- /dev/null +++ b/30_demo/pom.xml @@ -0,0 +1,56 @@ + + + + pdfviewer-for-flow-parent + org.rapidpm.vaadin + 1.0.0-RPM + + 4.0.0 + + pdfviewer-for-flow-demo + + + + + localhost + file://${basedir}/target/repo/ + + + localhost + file://${basedir}/target/snapshot-repo/ + + + + + + + org.rapidpm.vaadin + pdfviewer-for-flow + + + + org.rapidpm.vaadin + nano-vaadin-undertow + + + + com.vaadin + vaadin-lumo-theme + + + com.vaadin + vaadin-ordered-layout-flow + + + com.vaadin + vaadin-upload-flow + + + com.vaadin + vaadin-button-flow + + + + \ No newline at end of file diff --git a/30_demo/src/main/java/demo/WebUIRunner.java b/30_demo/src/main/java/demo/WebUIRunner.java new file mode 100644 index 0000000..0b72e70 --- /dev/null +++ b/30_demo/src/main/java/demo/WebUIRunner.java @@ -0,0 +1,12 @@ +package demo; + +import org.rapidpm.vaadin.nano.CoreUIServiceJava; + +public class WebUIRunner + extends CoreUIServiceJava { + + public static void main(String[] args) { + new WebUIRunner().startup(); + } + +} diff --git a/30_demo/src/main/java/org/rapidpm/demo/VaadinApp.java b/30_demo/src/main/java/org/rapidpm/demo/VaadinApp.java new file mode 100644 index 0000000..adcac3f --- /dev/null +++ b/30_demo/src/main/java/org/rapidpm/demo/VaadinApp.java @@ -0,0 +1,48 @@ +package org.rapidpm.demo; + +import com.vaadin.flow.component.Composite; +import com.vaadin.flow.component.button.Button; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.component.upload.Upload; +import com.vaadin.flow.component.upload.receivers.MultiFileMemoryBuffer; +import com.vaadin.flow.router.Route; +import com.vaadin.flow.server.PWA; +import com.vaadin.flow.server.StreamResource; +import com.vaadin.flow.theme.Theme; +import com.vaadin.flow.theme.lumo.Lumo; +import org.rapidpm.vaadin.component.pdfviewer.PdfViewer; + +import java.io.InputStream; + +@Route("") +@PWA(name = "PDFViewer for Flow", shortName = "PDFViewer for Flow") +@Theme(value = Lumo.class, variant = Lumo.LIGHT) +public class VaadinApp + extends Composite { + + // private final PdfViewer pdfViewer = new PdfViewer(); + private final VerticalLayout pdfFiles = new VerticalLayout(); + private final MultiFileMemoryBuffer buffer = new MultiFileMemoryBuffer(); + private final Upload upload = new Upload(buffer); + + public VaadinApp() { + getContent().setHeight("100%"); +// pdfViewer.setHeight("100%"); + final Button btnUpload = new Button(); + btnUpload.addClickListener(e -> pdfFiles.removeAll()); + btnUpload.setText("start Uploading"); + upload.setUploadButton(btnUpload); + upload.addSucceededListener(event -> { + final InputStream inputStream = buffer.getInputStream(event.getFileName()); + final StreamResource streamResource = new StreamResource(event.getFileName(), () -> inputStream); + + final PdfViewer pdfViewer = new PdfViewer(); + pdfViewer.setStreamResource(streamResource); + pdfViewer.setCard(false); + pdfFiles.add(pdfViewer); + }); + upload.setAcceptedFileTypes(".pdf"); + getContent().add(upload); + getContent().add(pdfFiles); + } +} diff --git a/demo.pdf b/demo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..688d00ccc1554ed011cb67be8c242d4483738f43 GIT binary patch literal 50054 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%0AE%8Zp9e|@p8GEv@XdAF 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 ISCGK^AJc$oR{#J2 literal 0 HcmV?d00001 diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..7e18b69 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# +# Copyright © 2013 Sven Ruppert (sven.ruppert@gmail.com) +# +# Licensed 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. +# + +docker rm deploy-pdfviewer-for-flow +docker-compose up diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4c7a519 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +# +# Copyright © 2013 Sven Ruppert (sven.ruppert@gmail.com) +# +# Licensed 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. +# + +version: '3.5' + +services: + deploy: + image: svenruppert/maven-3.6.2-adopt:1.8.212-04 + container_name: deploy-pdfviewer-for-flow + hostname: deploy-pdfviewer-for-flow + volumes: + - /var/run/docker.sock:/tmp/docker.sock:ro + - $PWD/:/usr/src/mymaven + - ~/.m2/settings.xml:/root/.m2/settings.xml + - ~/.gnupg/:/root/.gnupg/ + working_dir: /usr/src/mymaven + # command: 'mvn help:active-profiles + command: 'mvn license:format clean deploy + -P_release_prepare + -P_release_sign-artifacts + -Pvaadin-install-nodejs + -Dmaven.test.skip=true ' \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d3c23c4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,59 @@ + + + + 4.0.0 + pom + + 10_component + + + 30_demo + + + + org.rapidpm + rapidpm-vaadin-dependencies-v14 + 04.05.00-RPM + + + + org.rapidpm.vaadin + pdfviewer-for-flow-parent + 1.0.0-RPM + + + + + org.rapidpm.vaadin + pdfviewer-for-flow + 1.0.0-RPM + + + org.rapidpm.vaadin + nano-vaadin-undertow + 01.00.02-RPM + + + + + + + \ No newline at end of file