aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2013-09-26 15:49:26 +0200
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2013-09-26 15:49:26 +0200
commitd85cbb74b8fe9c2bcc31a4b55ad17ae889d6b578 (patch)
tree216c51de424c24fdf7821d9047fdc266ce042b94 /pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java
parentfc44d4bcad00192f0df8f6086737b9b126094dcd (diff)
downloadpdf-as-4-d85cbb74b8fe9c2bcc31a4b55ad17ae889d6b578.tar.gz
pdf-as-4-d85cbb74b8fe9c2bcc31a4b55ad17ae889d6b578.tar.bz2
pdf-as-4-d85cbb74b8fe9c2bcc31a4b55ad17ae889d6b578.zip
forgotten changes for initial code commit
Diffstat (limited to 'pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java')
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java163
1 files changed, 130 insertions, 33 deletions
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java
index d7ed5f3a..e4132e91 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java
@@ -1,9 +1,18 @@
package at.gv.egiz.pdfas.lib.impl;
+import java.io.ByteArrayInputStream;
+import java.io.File;
import java.util.List;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
+import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsException;
import at.gv.egiz.pdfas.common.settings.ISettings;
+import at.gv.egiz.pdfas.common.settings.Settings;
+import at.gv.egiz.pdfas.common.settings.SignatureProfileSettings;
import at.gv.egiz.pdfas.lib.api.Configuration;
import at.gv.egiz.pdfas.lib.api.IConfigurationConstants;
import at.gv.egiz.pdfas.lib.api.PdfAs;
@@ -13,48 +22,136 @@ import at.gv.egiz.pdfas.lib.api.verify.VerifyParameter;
import at.gv.egiz.pdfas.lib.api.verify.VerifyResult;
import at.gv.egiz.pdfas.lib.impl.configuration.ConfigurationImpl;
import at.gv.egiz.pdfas.lib.impl.configuration.PlaceholderConfiguration;
+import at.gv.egiz.pdfas.lib.impl.configuration.SignatureProfileConfiguration;
+import at.gv.egiz.pdfas.lib.impl.positioning.Positioning;
+import at.gv.egiz.pdfas.lib.impl.stamping.IPDFStamper;
+import at.gv.egiz.pdfas.lib.impl.stamping.IPDFVisualObject;
+import at.gv.egiz.pdfas.lib.impl.stamping.StamperFactory;
+import at.gv.egiz.pdfas.lib.impl.stamping.TableFactory;
import at.gv.egiz.pdfas.lib.impl.status.OperationStatus;
import at.gv.egiz.pdfas.lib.impl.status.RequestedSignature;
+import at.knowcenter.wag.egov.egiz.pdf.PositioningInstruction;
+import at.knowcenter.wag.egov.egiz.pdf.TablePos;
+import at.knowcenter.wag.egov.egiz.table.Table;
public class PdfAsImpl implements PdfAs, IConfigurationConstants {
+ private static final Logger logger = LoggerFactory.getLogger(PdfAsImpl.class);
+
+ private Settings settings;
+
+ public PdfAsImpl(File cfgFile) {
+ logger.info("Initializing PDF-AS with config: " + cfgFile.getPath());
+ this.settings = new Settings(cfgFile);
+ }
+
public SignResult sign(SignParameter parameter) throws PdfAsException {
- // TODO: verify signParameter
+
+ logger.trace("sign started");
- // Status initialization
- if(!(parameter.getConfiguration() instanceof ISettings)) {
+ // TODO: verify signParameter
+
+ try {
+ // Status initialization
+ if (!(parameter.getConfiguration() instanceof ISettings)) {
+ throw new PdfAsSettingsException("Invalid settings object!");
+ }
+
+ ISettings settings = (ISettings) parameter.getConfiguration();
+ OperationStatus status = new OperationStatus(settings, parameter);
+ PlaceholderConfiguration placeholderConfiguration = status
+ .getPlaceholderConfiguration();
+
+ RequestedSignature requestedSignature = new RequestedSignature(
+ status);
+ // Only use this profileID because validation was done in
+ // RequestedSignature
+ String signatureProfileID = requestedSignature
+ .getSignatureProfileID();
+
+ logger.info("Selected signature Profile: " + signatureProfileID);
- }
- ISettings settings = (ISettings) parameter.getConfiguration();
- OperationStatus status = new OperationStatus(settings, parameter);
- PlaceholderConfiguration placeholderConfiguration = status.getPlaceholderConfiguration();
- // set Original PDF Document Data
- status.getPdfObject().setOriginalDocument(parameter.getDataSource().getByteData());
-
-
- // Placeholder search?
- if(placeholderConfiguration.isGlobalPlaceholderEnabled()) {
- // TODO: Do placeholder search
- }
-
- RequestedSignature requestedSignature = new RequestedSignature(status);
-
- // TODO get Certificate
-
- if(requestedSignature.isVisual()) {
- // TODO: SignBlockCreationStage (visual) -> create visual signature block (logicaly)
+ SignatureProfileConfiguration signatureProfileConfiguration = status
+ .getSignatureProfileConfiguration(signatureProfileID);
+
+ // set Original PDF Document Data
+ status.getPdfObject().setOriginalDocument(
+ parameter.getDataSource().getByteData());
- // TODO: PositioningStage (visual) -> find position or use fixed position
+ // Placeholder search?
+ if (placeholderConfiguration.isGlobalPlaceholderEnabled()) {
+ // TODO: Do placeholder search
+ }
- // TODO: StampingStage (visual) -> stamp logical signature block to location (itext)
- } else {
- // Stamped Object is equal to original
- status.getPdfObject().setStampedDocument(status.getPdfObject().getOriginalDocument());
+ // TODO get Certificate
+
+ if (requestedSignature.isVisual()) {
+ logger.info("Creating visual siganture block");
+ // ================================================================
+ // SignBlockCreationStage (visual) -> create visual signature
+ // block (logicaly)
+ SignatureProfileSettings signatureProfileSettings = TableFactory
+ .createProfile(signatureProfileID, settings);
+
+ Table main = TableFactory.createSigTable(
+ signatureProfileSettings, MAIN, settings);
+
+ IPDFStamper stamper = StamperFactory.createDefaultStamper(settings);
+ IPDFVisualObject visualObject = stamper.createVisualPDFObject(
+ status.getPdfObject(), main);
+
+ // ================================================================
+ // PositioningStage (visual) -> find position or use fixed
+ // position
+
+ String posString = status.getSignParamter()
+ .getSignaturePosition();
+
+ if (posString == null) {
+ posString = signatureProfileConfiguration
+ .getDefaultPositioning();
+ }
+
+ TablePos tablePos = null;
+
+ if (posString == null) {
+ tablePos = new TablePos();
+ } else {
+ tablePos = new TablePos(posString);
+ }
+
+ PDDocument originalDocument = PDDocument
+ .load(new ByteArrayInputStream(status.getPdfObject()
+ .getOriginalDocument()));
+
+ PositioningInstruction positioningInstruction = Positioning
+ .determineTablePositioning(tablePos, "",
+ originalDocument, visualObject);
+
+ // ================================================================
+ // StampingStage (visual) -> stamp logical signature block to
+ // location (itext)
+
+ byte[] incrementalUpdate = stamper.writeVisualObject(
+ visualObject, positioningInstruction, status
+ .getPdfObject().getOriginalDocument());
+ status.getPdfObject().setStampedDocument(incrementalUpdate);
+ } else {
+ logger.info("No visual siganture block");
+ // Stamped Object is equal to original
+ status.getPdfObject().setStampedDocument(
+ status.getPdfObject().getOriginalDocument());
+ }
+
+ // TODO: Create signature
+
+ return null;
+ } catch (Throwable e) {
+ logger.error("sign failed " + e.getMessage(), e);
+ throw new PdfAsException("sign Failed", e);
+ } finally {
+ logger.trace("sign done");
}
-
- // TODO: Create signature
-
- return null;
}
public List<VerifyResult> verify(VerifyParameter parameter) {
@@ -63,7 +160,7 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
}
public Configuration getConfiguration() {
- return new ConfigurationImpl();
+ return new ConfigurationImpl(this.settings);
}
-
+
}