summaryrefslogtreecommitdiff
path: root/pdf-over/pdf-signer-interface/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'pdf-over/pdf-signer-interface/src/main/java')
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/DocumentSource.java5
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/InvalidPropertyTypeException.java16
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/InvalidPropertyValueException.java16
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/PDFSignator.java77
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignParameter.java118
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignResult.java71
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignatureDimension.java59
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignaturePosition.java100
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignatureProfile.java81
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/DateProfileProperty.java36
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/FileProfileProperty.java33
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/FloatProfileProperty.java30
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/IntegerProfileProperty.java31
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/ProfileProperty.java112
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/StringProfileProperty.java24
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/FloatRangeValidator.java57
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/IntegerRangeValidator.java58
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/PropertyValidator.java41
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/PropertyValidatorComparer.java16
-rw-r--r--pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/RegExValidator.java37
20 files changed, 1018 insertions, 0 deletions
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/DocumentSource.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/DocumentSource.java
new file mode 100644
index 00000000..9343a981
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/DocumentSource.java
@@ -0,0 +1,5 @@
+package at.asit.pdfover.pdfsignator;
+
+public class DocumentSource {
+
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/InvalidPropertyTypeException.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/InvalidPropertyTypeException.java
new file mode 100644
index 00000000..8f9d54a9
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/InvalidPropertyTypeException.java
@@ -0,0 +1,16 @@
+package at.asit.pdfover.pdfsignator;
+
+import at.asit.pdfover.pdfsignator.profileproperties.ProfileProperty;
+import at.asit.pdfover.pdfsignator.profileproperties.validators.PropertyValidator;
+
+public class InvalidPropertyTypeException extends Exception {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 6174277563400848906L;
+
+ public InvalidPropertyTypeException(ProfileProperty property, PropertyValidator validator) {
+ super(String.format("Cannot add validator: %s to Property: %s (incompatible)",
+ validator.getClass().getName(), property.getClass().getName()));
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/InvalidPropertyValueException.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/InvalidPropertyValueException.java
new file mode 100644
index 00000000..3b3d96e9
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/InvalidPropertyValueException.java
@@ -0,0 +1,16 @@
+package at.asit.pdfover.pdfsignator;
+
+import at.asit.pdfover.pdfsignator.profileproperties.ProfileProperty;
+
+
+public class InvalidPropertyValueException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3823266882732616374L;
+
+ public InvalidPropertyValueException(ProfileProperty property, String message) {
+ super(String.format("Invalid value for: %s: %s", property.GetKey(), message));
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/PDFSignator.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/PDFSignator.java
new file mode 100644
index 00000000..1801e608
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/PDFSignator.java
@@ -0,0 +1,77 @@
+package at.asit.pdfover.pdfsignator;
+
+import java.util.HashMap;
+
+/**
+ * PDF Signator base Class
+ * This class should be extended to support PDF-AS and PADES.
+ */
+public abstract class PDFSignator {
+
+ /**
+ * Map to store profiles
+ */
+ protected HashMap<String, SignatureProfile> profiles = new HashMap<String, SignatureProfile>();
+
+ /**
+ * Perfom signature creation
+ * @param parameter The signature parameters
+ * @return The signing result
+ */
+ public abstract SignResult Sign(SignParameter parameter);
+
+ /**
+ * Creates new signing profile
+ * @param base The profile id of the base profile
+ * @param profileID The id of the new profile
+ * @return The new Profile
+ */
+ public abstract SignatureProfile CreateNewProfile(String base, String profileID);
+
+ /**
+ * Creates new signing profile
+ * @param base The base profile
+ * @param profileID The id of the new profile
+ * @return The new Profile
+ */
+ public abstract SignatureProfile CreateNewProfile(SignatureProfile base, String profileID);
+
+ /**
+ * Creates new signing profile
+ * @param profileID The id of the new profile
+ * @return The new Profile
+ */
+ public abstract SignatureProfile CreateNewProfile(String profileID);
+
+ /**
+ * Returns Profile object for given profile id
+ * @param profileID The profile id
+ * @return The requested Profile
+ */
+ public SignatureProfile GetProfile(String profileID) {
+ if(this.profiles.containsKey(profileID)) {
+ // TODO: Think about handing out a copy of the profile to keep default values ...
+ return this.profiles.get(profileID);
+ }
+
+ // TODO: throw Exception
+ return null;
+ }
+
+ /**
+ * Get all available profiles
+ * @return Array containing all knwon profiles
+ */
+ public SignatureProfile[] GetAvailableProfiles() {
+ // TODO: Think about handing out a copy of the profile to keep default values ...
+ return this.profiles.values().toArray(new SignatureProfile[0]);
+ }
+
+ /**
+ * Gets all available profile ids
+ * @return Array containing all known profile ids
+ */
+ public String[] GetAvailableProfileIDs() {
+ return this.profiles.keySet().toArray(new String[0]);
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignParameter.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignParameter.java
new file mode 100644
index 00000000..3f0f2b6f
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignParameter.java
@@ -0,0 +1,118 @@
+package at.asit.pdfover.pdfsignator;
+
+/**
+ * The Signature Parameter
+ */
+public class SignParameter {
+
+ /**
+ * The Signature Position
+ * @uml.property name="signaturePosition"
+ * @uml.associationEnd multiplicity="(1 1)" aggregation="shared" inverse="signParameter:at.asit.pdfover.pdfsignator.SignaturePosition"
+ */
+ protected SignaturePosition signaturePosition = null;
+
+ /**
+ * Getter of the property <tt>signaturePosition</tt>
+ * @return Returns the signaturePosition.
+ */
+ public SignaturePosition GetSignaturePosition() {
+ return signaturePosition;
+ }
+
+ /**
+ * Setter of the property <tt>signaturePosition</tt>
+ * @param signaturePosition The signaturePosition to set.
+ */
+ public void SetSignaturePosition(SignaturePosition signaturePosition) {
+ this.signaturePosition = signaturePosition;
+ }
+
+ /**
+ * The Signature Profile
+ * @uml.property name="signatureProfile"
+ * @uml.associationEnd multiplicity="(1 1)" aggregation="shared" inverse="signParameter:at.asit.pdfover.pdfsignator.SignatureProfile"
+ */
+ protected SignatureProfile signatureProfile = null;
+
+ /**
+ * Getter of the property <tt>signatureProfile</tt>
+ * @return Returns the signatureProfile.
+ */
+ public SignatureProfile GetSignatureProfile() {
+ return signatureProfile;
+ }
+
+ /**
+ * Setter of the property <tt>signatureProfile</tt>
+ * @param signatureProfile The signatureProfile to set.
+ */
+ public void SetSignatureProfile(SignatureProfile signatureProfile) {
+ this.signatureProfile = signatureProfile;
+ }
+
+ /**
+ * The signature Device
+ */
+ protected String signatureDevice = null;
+
+ /**
+ * Getter of the property <tt>signatureDevice</tt>
+ * @return Returns the signatureDevice.
+ */
+ public String GetSignatureDevice() {
+ return signatureDevice;
+ }
+
+ /**
+ * Setter of the property <tt>signatureDevice</tt>
+ * @param value The signatureDevice to set.
+ */
+ public void SetSignatureDevice(String value) {
+ this.signatureDevice = value;
+ }
+
+ /**
+ * The signature Device
+ */
+ protected String KeyIdentifier = null;
+
+ /**
+ * Getter of the property <tt>KeyIdentifier</tt>
+ * @return Returns the KeyIdentifier.
+ */
+ public String GetKeyIdentifier() {
+ return KeyIdentifier;
+ }
+
+ /**
+ * Setter of the property <tt>KeyIdentifier</tt>
+ * @param value The KeyIdentifier to set.
+ */
+ public void SetKeyIdentifier(String value) {
+ this.KeyIdentifier = value;
+ }
+
+ /**
+ * The signature Device
+ *
+ * @uml.associationEnd multiplicity="(1 1)" aggregation="shared" inverse="signParameter:at.asit.pdfover.pdfsignator.DocumentSource"
+ */
+ protected DocumentSource documentSource = null;
+
+ /**
+ * Getter of the property <tt>documentSource</tt>
+ * @return Returns the documentSource.
+ */
+ public DocumentSource GetDocumentSource() {
+ return documentSource;
+ }
+
+ /**
+ * Setter of the property <tt>documentSource</tt>
+ * @param value The documentSource to set.
+ */
+ public void SetDocumentSource(DocumentSource value) {
+ this.documentSource = value;
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignResult.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignResult.java
new file mode 100644
index 00000000..56d98952
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignResult.java
@@ -0,0 +1,71 @@
+package at.asit.pdfover.pdfsignator;
+
+import javax.security.cert.Certificate;
+
+public class SignResult {
+
+ /**
+ * The position of the signatur
+ * @uml.associationEnd multiplicity="(1 1)" aggregation="composite" inverse="signResult:at.asit.pdfover.pdfsignator.SignaturePosition"
+ */
+ protected SignaturePosition signaturePosition = null;
+
+ /**
+ * Getter of the property <tt>signaturePosition</tt>
+ * @return Returns the signaturePosition.
+ */
+ public SignaturePosition GetSignaturePosition() {
+ return signaturePosition;
+ }
+
+ /**
+ * Setter of the property <tt>signaturePosition</tt>
+ * @param signaturePosition The signaturePosition to set.
+ */
+ public void SetSignaturePosition(SignaturePosition signaturePosition) {
+ this.signaturePosition = signaturePosition;
+ }
+
+ /**
+ * The signed Document
+ * @uml.associationEnd multiplicity="(1 1)" aggregation="shared" inverse="signResult:at.asit.pdfover.pdfsignator.DocumentSource"
+ */
+ protected DocumentSource documentSource = null;
+
+ /**
+ * Gets the signed Document
+ * @return Returns the documentSource.
+ */
+ public DocumentSource GetDocumentSource() {
+ return documentSource;
+ }
+
+ /**
+ * Setter of the property <tt>documentSource</tt>
+ * @param documentSource The documentSource to set.
+ */
+ public void SetDocumentSource(DocumentSource documentSource) {
+ this.documentSource = documentSource;
+ }
+
+ /**
+ * The signer certificate
+ */
+ protected Certificate signerCertificate;
+
+ /**
+ * Sets the signer certificate
+ * @param cert The signer certificate
+ */
+ public void SetSignerCertificate(Certificate cert) {
+ this.signerCertificate = cert;
+ }
+
+ /**
+ * Gets the signer certificate
+ * @return The signer x509 certificate
+ */
+ public Certificate SetSignerCertificate() {
+ return this.signerCertificate;
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignatureDimension.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignatureDimension.java
new file mode 100644
index 00000000..133f4f74
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignatureDimension.java
@@ -0,0 +1,59 @@
+package at.asit.pdfover.pdfsignator;
+
+/**
+ * The Dimensions of the visible signature block
+ */
+public class SignatureDimension {
+
+ /**
+ * The visible Signature block width
+ */
+ protected int width;
+
+ /**
+ * The visible Signature block height
+ */
+ protected int height;
+
+ /**
+ * Sets the width for the dimension
+ * @param value
+ */
+ public void SetWidth(int value) {
+ this.width = value;
+ }
+
+ /**
+ * Constructor
+ * @param width The width of the signature block
+ * @param height The height of the signature block
+ */
+ public SignatureDimension(int width, int height) {
+ this.width = width;
+ this.height = height;
+ }
+
+ /**
+ * Gets the width of the visible Signature block
+ * @return
+ */
+ public int GetWidth() {
+ return this.width;
+ }
+
+ /**
+ * Sets the height for the dimension
+ * @param value
+ */
+ public void SetHeight(int value) {
+ this.height = value;
+ }
+
+ /**
+ * Gets the height of the visible Signature block
+ * @return
+ */
+ public int GetHeight() {
+ return this.height;
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignaturePosition.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignaturePosition.java
new file mode 100644
index 00000000..48b320b3
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignaturePosition.java
@@ -0,0 +1,100 @@
+package at.asit.pdfover.pdfsignator;
+
+
+/**
+ * Represents the position of a visible signature block
+ * @author afitzek
+ */
+public class SignaturePosition {
+ /**
+ * The x value of the position
+ */
+ protected int x = 0;
+
+ /**
+ * The y value of the position
+ */
+ protected int y = 0;
+
+ /**
+ * The page value of the position
+ */
+ protected int page = 1;
+
+ /**
+ * Default constructor
+ */
+ public SignaturePosition() {
+ }
+
+ /**
+ * X - Y Constructor Page = 1
+ * @param x The x value of the position
+ * @param y The y value of the position
+ */
+ public SignaturePosition(int x, int y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ /**
+ * Constructor
+ * @param x The x value of the position
+ * @param y The y value of the position
+ * @param page The page value of the position
+ */
+ public SignaturePosition(int x, int y, int page) {
+ this.x = x;
+ this.y = y;
+ this.page = page;
+ }
+
+ /**
+ * Sets X value of position
+ * @param value the new x value
+ */
+ public void SetX(int value) {
+ this.x = value;
+ }
+
+ /**
+ * Gets the X value of the position
+ * @return int the x value of the position
+ */
+ public int GetX() {
+ return this.x;
+ }
+
+ /**
+ * Sets Y value of position
+ * @param value the new y value
+ */
+ public void SetY(int value) {
+ this.y = value;
+ }
+
+ /**
+ * Gets the Y value of the position
+ * @return int the y value of the position
+ */
+ public int GetY() {
+ return this.y;
+ }
+
+ /**
+ * Sets Page value of position
+ * @param value the new page value
+ */
+ public void SetPage(int value) {
+ this.page = value;
+ }
+
+ /**
+ * Gets the Page value of the position
+ * @return int the page value of the position
+ */
+ public int GetPage() {
+ return this.page;
+ }
+
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignatureProfile.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignatureProfile.java
new file mode 100644
index 00000000..84c1023d
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/SignatureProfile.java
@@ -0,0 +1,81 @@
+package at.asit.pdfover.pdfsignator;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import at.asit.pdfover.pdfsignator.profileproperties.ProfileProperty;
+
+/**
+ * Represents a Signature profile
+ * @author afitzek
+ */
+public abstract class SignatureProfile {
+
+ /**
+ * The profile ID
+ */
+ protected String profileID;
+
+ /**
+ * The Profile properties
+ * @uml.property name="profileProperty"
+ * @uml.associationEnd multiplicity="(0 -1)" ordering="true" aggregation="shared" inverse="signatureProfile:at.asit.pdfover.pdfsignator.profileproperties.ProfileProperty"
+ *
+ */
+ protected List<ProfileProperty> properties = new ArrayList<ProfileProperty>();
+
+ /**
+ * Gets the profile ID
+ * @return Returns the profileID.
+ */
+ public String GetProfileID() {
+ return profileID;
+ }
+
+ /**
+ * Adds a property to this profile
+ * @param property
+ */
+ public void AddProperty(ProfileProperty property) {
+
+ ProfileProperty replace = this.GetProperty(property.GetKey());
+
+ if(replace != null)
+ {
+ this.properties.remove(replace);
+ replace = null;
+ }
+
+ this.properties.add(property);
+ }
+
+ /**
+ * Gets a property by its key
+ * @param key The property key
+ * @return The ProfileProperty or null if not available
+ */
+ public ProfileProperty GetProperty(String key) {
+ ProfileProperty find = null;
+ for(ProfileProperty available : this.properties) {
+ find = available;
+ if(find.GetKey().equals(key)) {
+ return find;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets the Signature Dimension
+ * @return
+ */
+ public abstract SignatureDimension GetSignatureDimension();
+
+ /**
+ * Gets available Properties for this Profile
+ * @return
+ */
+ public ProfileProperty[] GetAvailableProperties() {
+ return this.properties.toArray(new ProfileProperty[0]);
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/DateProfileProperty.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/DateProfileProperty.java
new file mode 100644
index 00000000..ac5df52a
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/DateProfileProperty.java
@@ -0,0 +1,36 @@
+package at.asit.pdfover.pdfsignator.profileproperties;
+
+import java.util.Date;
+
+import at.asit.pdfover.pdfsignator.InvalidPropertyTypeException;
+import at.asit.pdfover.pdfsignator.InvalidPropertyValueException;
+
+/**
+ * A Date Property
+ */
+public class DateProfileProperty extends ProfileProperty {
+
+ /**
+ * Date value of property
+ */
+ protected Date dvalue = null;
+
+ /**
+ * Sets the date value of the Property
+ * @param value The date value
+ * @throws InvalidPropertyValueException
+ * @throws InvalidPropertyTypeException
+ */
+ public void SetValue(Date value) throws InvalidPropertyValueException, InvalidPropertyTypeException {
+ this.SetTextValue(value.toString());
+ this.dvalue = value;
+ }
+
+ /**
+ * Gets the date value
+ * @return the date value of the property
+ */
+ public Date GetValue() {
+ return this.dvalue;
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/FileProfileProperty.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/FileProfileProperty.java
new file mode 100644
index 00000000..46c5cd12
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/FileProfileProperty.java
@@ -0,0 +1,33 @@
+package at.asit.pdfover.pdfsignator.profileproperties;
+
+import java.io.File;
+
+import at.asit.pdfover.pdfsignator.InvalidPropertyTypeException;
+import at.asit.pdfover.pdfsignator.InvalidPropertyValueException;
+
+public class FileProfileProperty extends ProfileProperty {
+
+ /**
+ * File value of property
+ */
+ protected File fvalue = null;
+
+ /**
+ * Sets the file value of the Property
+ * @param value The file value
+ * @throws InvalidPropertyValueException
+ * @throws InvalidPropertyTypeException
+ */
+ public void SetValue(File value) throws InvalidPropertyValueException, InvalidPropertyTypeException {
+ this.SetTextValue(value.getAbsolutePath());
+ this.fvalue = value;
+ }
+
+ /**
+ * Gets the file value
+ * @return the file value of the property
+ */
+ public File GetValue() {
+ return this.fvalue;
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/FloatProfileProperty.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/FloatProfileProperty.java
new file mode 100644
index 00000000..51c4089e
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/FloatProfileProperty.java
@@ -0,0 +1,30 @@
+package at.asit.pdfover.pdfsignator.profileproperties;
+
+import at.asit.pdfover.pdfsignator.InvalidPropertyTypeException;
+import at.asit.pdfover.pdfsignator.InvalidPropertyValueException;
+
+public class FloatProfileProperty extends ProfileProperty {
+ /**
+ * Float value of property
+ */
+ protected Float fvalue = null;
+
+ /**
+ * Sets the float value of the Property
+ * @param value The float value
+ * @throws InvalidPropertyValueException
+ * @throws InvalidPropertyTypeException
+ */
+ public void SetValue(float value) throws InvalidPropertyValueException, InvalidPropertyTypeException {
+ this.SetTextValue(Float.toString(value));
+ this.fvalue = value;
+ }
+
+ /**
+ * Gets the float value
+ * @return the float value of the property
+ */
+ public Float GetValue() {
+ return this.fvalue;
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/IntegerProfileProperty.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/IntegerProfileProperty.java
new file mode 100644
index 00000000..7bb91226
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/IntegerProfileProperty.java
@@ -0,0 +1,31 @@
+package at.asit.pdfover.pdfsignator.profileproperties;
+
+import at.asit.pdfover.pdfsignator.InvalidPropertyTypeException;
+import at.asit.pdfover.pdfsignator.InvalidPropertyValueException;
+
+public class IntegerProfileProperty extends ProfileProperty {
+
+ /**
+ * Integer value of property
+ */
+ protected Integer ivalue = null;
+
+ /**
+ * Sets the integer value of the Property
+ * @param value The integer value
+ * @throws InvalidPropertyValueException
+ * @throws InvalidPropertyTypeException
+ */
+ public void SetValue(int value) throws InvalidPropertyValueException, InvalidPropertyTypeException {
+ this.SetTextValue(Integer.toString(value));
+ this.ivalue = value;
+ }
+
+ /**
+ * Gets the integer value
+ * @return the integer value of the property
+ */
+ public Integer GetValue() {
+ return this.ivalue;
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/ProfileProperty.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/ProfileProperty.java
new file mode 100644
index 00000000..ebd247d6
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/ProfileProperty.java
@@ -0,0 +1,112 @@
+package at.asit.pdfover.pdfsignator.profileproperties;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import at.asit.pdfover.pdfsignator.InvalidPropertyTypeException;
+import at.asit.pdfover.pdfsignator.InvalidPropertyValueException;
+import at.asit.pdfover.pdfsignator.profileproperties.validators.PropertyValidator;
+import at.asit.pdfover.pdfsignator.profileproperties.validators.PropertyValidatorComparer;
+
+/**
+ * Defines a Profile Property
+ */
+public abstract class ProfileProperty {
+
+ /**
+ * Is this property optional
+ */
+ protected boolean optional;
+
+ /**
+ * The value of the property
+ */
+ private String value;
+
+ /**
+ * The key of the property
+ */
+ private String key;
+
+ /**
+ * The list of PropertyValidator
+ * @uml.property name="propertyValidator"
+ * @uml.associationEnd multiplicity="(0 -1)" ordering="true" aggregation="shared" inverse="profileProperty:at.asit.pdfover.pdfsignator.profileproperties.validators.PropertyValidator"
+ */
+ protected List<PropertyValidator> validators = new ArrayList<PropertyValidator>();
+
+ /**
+ * Validates the ProfileProperty
+ * @throws InvalidPropertyValueException
+ * @throws InvalidPropertyTypeException
+ */
+ protected void Validate() throws InvalidPropertyValueException, InvalidPropertyTypeException {
+ for(PropertyValidator validator : validators) {
+ validator.validate(this);
+ }
+ }
+
+ /**
+ * Adds a new PropertyValidator to this Property and sorts the validators according to their priority
+ * @param validator
+ * @throws InvalidPropertyTypeException
+ */
+ public void AddValidator(PropertyValidator validator) throws InvalidPropertyTypeException {
+ validator.CheckPropertyType(this);
+ validators.add(validator);
+ Collections.sort(validators, new PropertyValidatorComparer());
+ }
+
+ /**
+ * Sets if the property is optional
+ * @param value The new optional value
+ */
+ public void SetOptional(boolean value) {
+ this.optional = value;
+ }
+
+ /**
+ * Gets if the Property is Optional
+ * @return Is the property optional
+ */
+ public boolean GetOptional() {
+ return this.optional;
+ }
+
+ /**
+ * Sets the string value of the property and validates the Property
+ * (All subclasses should set the value via this method!)
+ * @param value The new value
+ * @throws InvalidPropertyValueException
+ * @throws InvalidPropertyTypeException
+ */
+ public void SetTextValue(String value) throws InvalidPropertyValueException, InvalidPropertyTypeException {
+ this.value = value;
+ this.Validate();
+ }
+
+ /**
+ * Gets the property text value
+ * @return The property text value
+ */
+ public String GetTextValue() {
+ return this.value;
+ }
+
+ /**
+ * Sets the propety key
+ * @param value The new property key
+ */
+ public void SetKey(String value) {
+ this.key = value;
+ }
+
+ /**
+ * Gets the property Key
+ * @return The property key
+ */
+ public String GetKey() {
+ return this.key;
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/StringProfileProperty.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/StringProfileProperty.java
new file mode 100644
index 00000000..35d903af
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/StringProfileProperty.java
@@ -0,0 +1,24 @@
+package at.asit.pdfover.pdfsignator.profileproperties;
+
+import at.asit.pdfover.pdfsignator.InvalidPropertyTypeException;
+import at.asit.pdfover.pdfsignator.InvalidPropertyValueException;
+
+public class StringProfileProperty extends ProfileProperty {
+ /**
+ * Sets the string value of the Property
+ * @param value The string value
+ * @throws InvalidPropertyValueException
+ * @throws InvalidPropertyTypeException
+ */
+ public void SetValue(String value) throws InvalidPropertyValueException, InvalidPropertyTypeException {
+ this.SetTextValue(value);
+ }
+
+ /**
+ * Gets the string value
+ * @return the string value of the property
+ */
+ public String GetValue() {
+ return this.GetTextValue();
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/FloatRangeValidator.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/FloatRangeValidator.java
new file mode 100644
index 00000000..8cca9230
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/FloatRangeValidator.java
@@ -0,0 +1,57 @@
+package at.asit.pdfover.pdfsignator.profileproperties.validators;
+
+import at.asit.pdfover.pdfsignator.InvalidPropertyTypeException;
+import at.asit.pdfover.pdfsignator.InvalidPropertyValueException;
+import at.asit.pdfover.pdfsignator.profileproperties.FloatProfileProperty;
+import at.asit.pdfover.pdfsignator.profileproperties.ProfileProperty;
+
+public class FloatRangeValidator extends PropertyValidator {
+
+ /**
+ * The maximum value
+ */
+ protected float max;
+
+ /**
+ * The minimum value
+ */
+ protected float min;
+
+ /**
+ * Constructor
+ * @param min The minimum allowed value
+ * @param max The maximum allowed value
+ */
+ public FloatRangeValidator(float min, float max) {
+ this.max = max;
+ this.min = min;
+ }
+
+ @Override
+ public void validate(ProfileProperty property)
+ throws InvalidPropertyValueException, InvalidPropertyTypeException {
+ this.CheckPropertyType(property);
+
+ FloatProfileProperty prop = (FloatProfileProperty) property;
+
+ if (prop.GetValue() == null) {
+ throw new InvalidPropertyValueException(property,
+ "Value is not set!");
+ }
+
+ float value = prop.GetValue();
+
+ if (value < min || value > max) {
+ throw new InvalidPropertyValueException(property, String.format(
+ "Value has to be between %f and %f", min, max));
+ }
+ }
+
+ @Override
+ public void CheckPropertyType(ProfileProperty property)
+ throws InvalidPropertyTypeException {
+ if (!(property instanceof FloatProfileProperty)) {
+ throw new InvalidPropertyTypeException(property, this);
+ }
+ }
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/IntegerRangeValidator.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/IntegerRangeValidator.java
new file mode 100644
index 00000000..504cb482
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/IntegerRangeValidator.java
@@ -0,0 +1,58 @@
+package at.asit.pdfover.pdfsignator.profileproperties.validators;
+
+import at.asit.pdfover.pdfsignator.InvalidPropertyTypeException;
+import at.asit.pdfover.pdfsignator.InvalidPropertyValueException;
+import at.asit.pdfover.pdfsignator.profileproperties.IntegerProfileProperty;
+import at.asit.pdfover.pdfsignator.profileproperties.ProfileProperty;
+
+public class IntegerRangeValidator extends PropertyValidator {
+
+ /**
+ * Maximum value of property
+ */
+ protected int max;
+
+ /**
+ * Minimum value of property
+ */
+ protected int min;
+
+ /**
+ * Constructor
+ * @param min The minimum allowed value
+ * @param max The maximum allowed value
+ */
+ public IntegerRangeValidator(int min, int max) {
+ this.max = max;
+ this.min = min;
+ }
+
+ @Override
+ public void validate(ProfileProperty property)
+ throws InvalidPropertyValueException, InvalidPropertyTypeException {
+ this.CheckPropertyType(property);
+
+ IntegerProfileProperty prop = (IntegerProfileProperty) property;
+
+ if(prop.GetValue() == null)
+ {
+ throw new InvalidPropertyValueException(property, "Value is not set!");
+ }
+
+ int value = prop.GetValue();
+
+ if(value < min || value > max) {
+ throw new InvalidPropertyValueException(property,
+ String.format("Value has to be between %d and %d", min, max));
+ }
+ }
+
+ @Override
+ public void CheckPropertyType(ProfileProperty property)
+ throws InvalidPropertyTypeException {
+ if(!(property instanceof IntegerProfileProperty)) {
+ throw new InvalidPropertyTypeException(property, this);
+ }
+ }
+
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/PropertyValidator.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/PropertyValidator.java
new file mode 100644
index 00000000..8da9babc
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/PropertyValidator.java
@@ -0,0 +1,41 @@
+package at.asit.pdfover.pdfsignator.profileproperties.validators;
+
+import at.asit.pdfover.pdfsignator.InvalidPropertyTypeException;
+import at.asit.pdfover.pdfsignator.InvalidPropertyValueException;
+import at.asit.pdfover.pdfsignator.profileproperties.ProfileProperty;
+
+/**
+ * Validates the value of a property
+ */
+public abstract class PropertyValidator {
+
+ /**
+ * The priority of this property should determine the order of validations
+ */
+ protected int priority = 1;
+
+ /**
+ * Called to validate the value of the given property and throws an InvalidPropertyValueException if value is invalid
+ * @param propety
+ * @throws InvalidPropertyValueException
+ */
+ public abstract void validate(ProfileProperty property) throws InvalidPropertyValueException, InvalidPropertyTypeException;
+
+ /**
+ * Sets the priority of this validator
+ * @param value The new priority
+ */
+ public void SetPriority(int value) {
+ this.priority = value;
+ }
+
+ /**
+ * Gets the priority of this validator
+ * @return The priority of this validator
+ */
+ public int GetPriority() {
+ return this.priority;
+ }
+
+ public abstract void CheckPropertyType(ProfileProperty property) throws InvalidPropertyTypeException;
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/PropertyValidatorComparer.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/PropertyValidatorComparer.java
new file mode 100644
index 00000000..76c7f0e2
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/PropertyValidatorComparer.java
@@ -0,0 +1,16 @@
+package at.asit.pdfover.pdfsignator.profileproperties.validators;
+
+import java.util.Comparator;
+
+/**
+ * Compares the Priority of two PropertyValidators
+ * @author afitzek
+ *
+ */
+public class PropertyValidatorComparer implements Comparator<PropertyValidator> {
+
+ public int compare(PropertyValidator o1, PropertyValidator o2) {
+ return o1.GetPriority() - o2.GetPriority();
+ }
+
+}
diff --git a/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/RegExValidator.java b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/RegExValidator.java
new file mode 100644
index 00000000..9ca8d113
--- /dev/null
+++ b/pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator/profileproperties/validators/RegExValidator.java
@@ -0,0 +1,37 @@
+package at.asit.pdfover.pdfsignator.profileproperties.validators;
+
+import at.asit.pdfover.pdfsignator.InvalidPropertyTypeException;
+import at.asit.pdfover.pdfsignator.InvalidPropertyValueException;
+import at.asit.pdfover.pdfsignator.profileproperties.ProfileProperty;
+
+public class RegExValidator extends PropertyValidator {
+
+ /**
+ * The regex value
+ */
+ protected String regex;
+
+ /**
+ * Constructor
+ * @param regex The regex to check
+ */
+ public RegExValidator(String regex) {
+ this.regex = regex;
+ }
+
+ @Override
+ public void validate(ProfileProperty property)
+ throws InvalidPropertyValueException, InvalidPropertyTypeException {
+
+ if(!property.GetTextValue().matches(this.regex)) {
+ throw new InvalidPropertyValueException(property, String.format(
+ "Value is invalid!"));
+ }
+ }
+
+ @Override
+ public void CheckPropertyType(ProfileProperty property)
+ throws InvalidPropertyTypeException {
+ // Is valid on all Property Types
+ }
+}