diff options
author | tkellner <tkellner@174cde9d-5d70-4d2a-aa98-46368bc2aaf7> | 2013-04-10 18:49:01 +0000 |
---|---|---|
committer | tkellner <tkellner@174cde9d-5d70-4d2a-aa98-46368bc2aaf7> | 2013-04-10 18:49:01 +0000 |
commit | 3f5eda3adbea29aa8ad2cca5d300cef3f3a444a5 (patch) | |
tree | bf4948a55beed5a9ab64bc59caa1898703ce5e2b /pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator | |
parent | 93d4e1db036224b937fc03fdb3ef0ea7bbaa25a2 (diff) | |
download | mocca-3f5eda3adbea29aa8ad2cca5d300cef3f3a444a5.tar.gz mocca-3f5eda3adbea29aa8ad2cca5d300cef3f3a444a5.tar.bz2 mocca-3f5eda3adbea29aa8ad2cca5d300cef3f3a444a5.zip |
Added Maven project for PDF-OVER 4.0 (Includes Spezification Diagramms)
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-over/trunk@2 174cde9d-5d70-4d2a-aa98-46368bc2aaf7
Diffstat (limited to 'pdf-over/pdf-signer-interface/src/main/java/at/asit/pdfover/pdfsignator')
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 + } +} |