summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Kellner <tobias.kellner@iaik.tugraz.at>2014-11-27 21:02:02 +0100
committerTobias Kellner <tobias.kellner@iaik.tugraz.at>2014-11-27 21:02:02 +0100
commit93c95e60f52cb9b37c8cc3d5ceaa37417cf71001 (patch)
tree407e5348703762e2f86ff1c196ac7ae4182dc393
parentc5601292f85bc02ca277c04ef6bbae938d07a335 (diff)
downloadpdf-over-93c95e60f52cb9b37c8cc3d5ceaa37417cf71001.tar.gz
pdf-over-93c95e60f52cb9b37c8cc3d5ceaa37417cf71001.tar.bz2
pdf-over-93c95e60f52cb9b37c8cc3d5ceaa37417cf71001.zip
Cache the signature placeholder
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/Constants.java6
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java8
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SignaturePlaceholderCache.java112
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java3
4 files changed, 123 insertions, 6 deletions
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Constants.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Constants.java
index 67d30f01..d2d285c1 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Constants.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Constants.java
@@ -62,6 +62,12 @@ public class Constants {
/** The configuration version file name */
public static final String CONFIG_VERSION_FILENAME = ".version"; //$NON-NLS-1$
+ /** The signature placeholder cache file name */
+ public static final String PLACEHOLDER_CACHE_FILENAME = ".placeholder"; //$NON-NLS-1$
+
+ /** The signature placeholder cache properties file name */
+ public static final String PLACEHOLDER_CACHE_PROPS_FILENAME = ".placeholder.properties"; //$NON-NLS-1$
+
/** The minimum PDF-AS configuration version (older ones will be backed up and updated */
public static final String MIN_PDF_AS_CONFIG_VERSION = "4.1.0"; //$NON-NLS-1$
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java
index eccda66c..a5e0461e 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java
@@ -65,6 +65,7 @@ import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
import at.asit.pdfover.gui.exceptions.InvalidNumberException;
import at.asit.pdfover.gui.utils.ImageConverter;
import at.asit.pdfover.gui.utils.Messages;
+import at.asit.pdfover.gui.utils.SignaturePlaceholderCache;
import at.asit.pdfover.gui.workflow.config.ConfigurationContainer;
import at.asit.pdfover.gui.workflow.states.State;
import at.asit.pdfover.signator.FileNameEmblem;
@@ -673,9 +674,7 @@ public class SimpleConfigurationComposite extends BaseConfigurationComposite {
param.setSignatureLanguage(this.configurationContainer.getSignLocale().getLanguage());
- img = ImageConverter
- .convertToSWT((BufferedImage) param
- .getPlaceholder());
+ img = SignaturePlaceholderCache.getSWTPlaceholder(param);
}
} else {
if (this.signer != null) {
@@ -687,8 +686,7 @@ public class SimpleConfigurationComposite extends BaseConfigurationComposite {
param.setSignatureLanguage(this.configurationContainer.getSignLocale().getLanguage());
param.setEmblem(new FileNameEmblem(image));
- img = ImageConverter.convertToSWT((BufferedImage) param
- .getPlaceholder());
+ img = SignaturePlaceholderCache.getSWTPlaceholder(param);
} else {
img = new ImageData(image);
}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SignaturePlaceholderCache.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SignaturePlaceholderCache.java
new file mode 100644
index 00000000..769c477b
--- /dev/null
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SignaturePlaceholderCache.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://joinup.ec.europa.eu/software/page/eupl
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ */
+package at.asit.pdfover.gui.utils;
+
+// Imports
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Properties;
+
+import javax.imageio.ImageIO;
+
+import org.eclipse.swt.graphics.ImageData;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.asit.pdfover.gui.Constants;
+import at.asit.pdfover.signator.SignatureParameter;
+
+/**
+ *
+ */
+public class SignaturePlaceholderCache {
+ /**
+ * SLF4J Logger instance
+ **/
+ private static final Logger log = LoggerFactory
+ .getLogger(SignaturePlaceholderCache.class);
+
+ private static void saveImage(BufferedImage image, String fileDir, String fileName, String fileExt) throws IOException {
+ File file = new File(fileDir, fileName + "." + fileExt); //$NON-NLS-1$
+ ImageIO.write(image, fileExt, file); // ignore returned boolean
+ }
+
+ private static Image loadImage(String fileDir, String fileName, String fileExt) throws IOException {
+ return ImageIO.read(new File(fileDir, fileName + "." + fileExt)); //$NON-NLS-1$
+ }
+
+ /**
+ * Get placeholder as AWT Image
+ * @param param SignatureParameter
+ * @return the placeholder AWT Image
+ */
+ public static Image getPlaceholder(SignatureParameter param) {
+ final String fileDir = Constants.CONFIG_DIRECTORY;
+ final String imgFileName = Constants.PLACEHOLDER_CACHE_FILENAME;
+ final String imgFileExt = "png"; //$NON-NLS-1$
+ final String propFileName = Constants.PLACEHOLDER_CACHE_PROPS_FILENAME;
+
+ final String sigLangProp = "LANG"; //$NON-NLS-1$
+ final String sigEmblProp = "EMBL"; //$NON-NLS-1$
+ final String sigNoteProp = "NOTE"; //$NON-NLS-1$
+ String sigLang = param.getSignatureLanguage();
+ String sigEmbl = (param.getEmblem() == null ? "" : param.getEmblem().getFileName()); //$NON-NLS-1$
+ String sigNote = param.getProperty("SIG_NOTE"); //$NON-NLS-1$
+
+ Properties sigProps = new Properties();
+ // compare cache, try to load if match
+ try {
+ InputStream in = new FileInputStream(new File(fileDir, propFileName));
+ sigProps.load(in);
+ if (sigProps.getProperty(sigLangProp).equals(sigLang) &&
+ sigProps.getProperty(sigEmblProp).equals(sigEmbl) &&
+ sigProps.getProperty(sigNoteProp).equals(sigNote))
+ return loadImage(fileDir, imgFileName, imgFileExt);
+ } catch (Exception e) {
+ log.debug("Can't load signature Placeholder", e); //$NON-NLS-1$
+ }
+
+ // create new cache
+ try {
+ sigProps.setProperty(sigLangProp, sigLang);
+ sigProps.setProperty(sigEmblProp, sigEmbl);
+ sigProps.setProperty(sigNoteProp, sigNote);
+ OutputStream out = new FileOutputStream(new File(fileDir, propFileName));
+ sigProps.store(out, null);
+ Image img = param.getPlaceholder();
+ saveImage((BufferedImage) img, fileDir, imgFileName, imgFileExt);
+ return img;
+ } catch (IOException e) {
+ log.error("Can't save signature Placeholder", e); //$NON-NLS-1$
+ return param.getPlaceholder();
+ }
+ }
+
+ /**
+ * Get placeholder as SWT ImageData
+ * @param param SignatureParameter
+ * @return the placeholder SWT ImageData
+ */
+ public static ImageData getSWTPlaceholder(SignatureParameter param) {
+ return ImageConverter.convertToSWT((BufferedImage) getPlaceholder(param));
+ }
+}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java
index fed293fc..6c3d11a8 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java
@@ -32,6 +32,7 @@ import at.asit.pdfover.gui.composites.PositioningComposite;
import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
import at.asit.pdfover.gui.controls.ErrorDialog;
import at.asit.pdfover.gui.utils.Messages;
+import at.asit.pdfover.gui.utils.SignaturePlaceholderCache;
import at.asit.pdfover.gui.workflow.StateMachine;
import at.asit.pdfover.gui.workflow.Status;
import at.asit.pdfover.signator.Emblem;
@@ -109,7 +110,7 @@ public class PositioningState extends State {
param.setSignatureLanguage(getStateMachine().getConfigProvider().getSignLocale().getLanguage());
this.positionComposite.setPlaceholder(
- param.getPlaceholder(),
+ SignaturePlaceholderCache.getPlaceholder(param),
param.getPlaceholderDimension().getWidth(),
param.getPlaceholderDimension().getHeight(),
getStateMachine().getConfigProvider().getPlaceholderTransparency());