You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by gb...@apache.org on 2013/03/06 17:46:37 UTC
svn commit: r1453416 [3/16] - in /pdfbox/trunk/preflight: ./
src/main/java/org/apache/pdfbox/preflight/
src/main/java/org/apache/pdfbox/preflight/action/
src/main/java/org/apache/pdfbox/preflight/annotation/
src/main/java/org/apache/pdfbox/preflight/an...
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/PreflightPath.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/PreflightPath.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/PreflightPath.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/PreflightPath.java Wed Mar 6 16:46:35 2013
@@ -23,96 +23,109 @@ package org.apache.pdfbox.preflight;
import java.util.Stack;
-
/**
- * Contains a stack of objects to follow the validation path.
- * Ex :
- * - if the ValidationProcess computes a Type1Font object, this object
- * should contains a path like PDPage|PDResources|PDFont.
- * - if the ValidationProcess computes a XObject object, this object
- * could contains a path like PDPage|PDResources|PDFontType3|PDResource|PDXObject.
+ * Contains a stack of objects to follow the validation path. Ex : - if the ValidationProcess computes a Type1Font
+ * object, this object should contains a path like PDPage|PDResources|PDFont. - if the ValidationProcess computes a
+ * XObject object, this object could contains a path like PDPage|PDResources|PDFontType3|PDResource|PDXObject.
*/
-public class PreflightPath {
+public class PreflightPath
+{
- @SuppressWarnings("rawtypes")
- private Stack objectPath = new Stack();
+ @SuppressWarnings("rawtypes")
+ private Stack objectPath = new Stack();
- @SuppressWarnings("rawtypes")
- private Stack<Class> classObjPath = new Stack<Class>();
+ @SuppressWarnings("rawtypes")
+ private Stack<Class> classObjPath = new Stack<Class>();
- @SuppressWarnings("unchecked")
- public boolean pushObject(Object pathElement) {
- boolean pushed = false;
- if (pathElement != null) {
- this.objectPath.push(pathElement);
- this.classObjPath.push(pathElement.getClass());
- pushed = true;
- }
- return pushed;
- }
-
- /**
- * Return the object at the given position. The object must be an
- * instance of the given class.
- * @param position
- * @param expectedType
- * @return
- */
- @SuppressWarnings("unchecked")
- public <T> T getPathElement(int position, Class<T> expectedType) {
- if (position < 0 || position >= this.objectPath.size()) {
- return null;
- }
- return (T)this.objectPath.get(position);
- }
-
- /**
- * Return the index of the first object that have the given type.
- * @param type
- * @return the object position, -1 if the type doesn't exist in the stack.
- */
- public <T> int getClosestTypePosition(Class<T> type) {
- for (int i = this.objectPath.size(); i-->0;) {
- if (this.classObjPath.get(i).equals(type)) {
- return i;
- }
- }
- return -1;
- }
-
- public <T> T getClosestPathElement(Class<T> type) {
- return getPathElement(getClosestTypePosition(type), type);
- }
-
- /**
- * Looks at the object at the top of this stack without removing it from the stack.
- * @return
- */
- public Object peek() {
- return this.objectPath.peek();
- }
-
- public Object pop() {
- this.classObjPath.pop();
- return this.objectPath.pop();
- }
-
- public void clear() {
- this.classObjPath.clear();
- this.objectPath.clear();
- }
-
- public int size() {
- return this.objectPath.size();
- }
-
- public boolean isEmpty() {
- return this.objectPath.isEmpty();
- }
-
- public boolean isExpectedType(Class<?> type) {
- @SuppressWarnings("rawtypes")
- Class knownType = this.classObjPath.peek();
- return (knownType != null && (type.equals(knownType) || type.isAssignableFrom(knownType)));
- }
+ @SuppressWarnings("unchecked")
+ public boolean pushObject(Object pathElement)
+ {
+ boolean pushed = false;
+ if (pathElement != null)
+ {
+ this.objectPath.push(pathElement);
+ this.classObjPath.push(pathElement.getClass());
+ pushed = true;
+ }
+ return pushed;
+ }
+
+ /**
+ * Return the object at the given position. The object must be an instance of the given class.
+ *
+ * @param position
+ * @param expectedType
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ public <T> T getPathElement(int position, Class<T> expectedType)
+ {
+ if (position < 0 || position >= this.objectPath.size())
+ {
+ return null;
+ }
+ return (T) this.objectPath.get(position);
+ }
+
+ /**
+ * Return the index of the first object that have the given type.
+ *
+ * @param type
+ * @return the object position, -1 if the type doesn't exist in the stack.
+ */
+ public <T> int getClosestTypePosition(Class<T> type)
+ {
+ for (int i = this.objectPath.size(); i-- > 0;)
+ {
+ if (this.classObjPath.get(i).equals(type))
+ {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ public <T> T getClosestPathElement(Class<T> type)
+ {
+ return getPathElement(getClosestTypePosition(type), type);
+ }
+
+ /**
+ * Looks at the object at the top of this stack without removing it from the stack.
+ *
+ * @return
+ */
+ public Object peek()
+ {
+ return this.objectPath.peek();
+ }
+
+ public Object pop()
+ {
+ this.classObjPath.pop();
+ return this.objectPath.pop();
+ }
+
+ public void clear()
+ {
+ this.classObjPath.clear();
+ this.objectPath.clear();
+ }
+
+ public int size()
+ {
+ return this.objectPath.size();
+ }
+
+ public boolean isEmpty()
+ {
+ return this.objectPath.isEmpty();
+ }
+
+ public boolean isExpectedType(Class<?> type)
+ {
+ @SuppressWarnings("rawtypes")
+ Class knownType = this.classObjPath.peek();
+ return (knownType != null && (type.equals(knownType) || type.isAssignableFrom(knownType)));
+ }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/ValidationResult.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/ValidationResult.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/ValidationResult.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/ValidationResult.java Wed Mar 6 16:46:35 2013
@@ -27,253 +27,312 @@ import java.util.List;
import org.apache.xmpbox.XMPMetadata;
/**
- * Object returned by the validate method of the PDFValidator. This object
- * contains a boolean to know if the PDF is PDF/A-1<I>x</I> compliant. If the
- * document isn't PDF/A-1<I>x</I> a list of errors is provided.
+ * Object returned by the validate method of the PDFValidator. This object contains a boolean to know if the PDF is
+ * PDF/A-1<I>x</I> compliant. If the document isn't PDF/A-1<I>x</I> a list of errors is provided.
*/
-public class ValidationResult {
- /**
- * Boolean to know if the PDF is a valid PDF/A
- */
- private boolean isValid = false;
-
- /**
- * Errors to know why the PDF isn't valid. If the PDF is valid, this list is
- * empty.
- */
- private List<ValidationError> lErrors = new ArrayList<ValidationError>();
-
- /**
- * Object representation of the XMPMetaData contained by the pdf file
- * This attribute can be null if the Validation fails.
- */
- private XMPMetadata xmpMetaData = null;
-
- /**
- * Create a Validation result object
- *
- * @param isValid
- */
- public ValidationResult(boolean isValid) {
- this.isValid = isValid;
- }
-
- /**
- * Create a Validation Result object. This constructor force the isValid to
- * false and add the given error to the list or ValidationErrors.
- *
- * @param error
- * if error is null, no error is added to the list.
- */
- public ValidationResult(ValidationError error) {
- this.isValid = false;
- if (error != null) {
- this.lErrors.add(error);
- }
- }
-
- /**
- * Create a Validation Result object. This constructor force the isValid to
- * false and add all the given errors to the list or ValidationErrors.
- *
- * @param error
- * if error is null, no error is added to the list.
- */
- public ValidationResult(List<ValidationError> errors) {
- this.isValid = false;
- this.lErrors = errors;
- }
-
- /**
- * Add the ValidationError object of the otherResult in the Error list of the current object.
- * Apply a logical AND on the isValid boolean.
- * @param otherResult
- */
- public void mergeResult(ValidationResult otherResult) {
- if (otherResult != null) {
- this.lErrors.addAll(otherResult.getErrorsList());
- this.isValid &= otherResult.isValid();
- }
- }
-
- /**
- * @return the xmpMetaData
- */
- public XMPMetadata getXmpMetaData() {
- return xmpMetaData;
- }
-
- /**
- * @param xmpMetaData the xmpMetaData to set
- */
- void setXmpMetaData(XMPMetadata xmpMetaData) {
- this.xmpMetaData = xmpMetaData;
- }
-
- /**
- * @return true if the PDF is valid,false otherwise
- */
- public boolean isValid() {
- return isValid;
- }
-
- /**
- * Add error to the list of ValidationError.
- * If the given error is null, this method does nothing
- *
- * @param error
- */
- public void addError(ValidationError error) {
- if (error != null) {
- this.isValid &= error.isWarning();
- this.lErrors.add(error);
- }
- }
-
- /**
- * Add a set of errors to the list of ValidationError.
- * If the given list is null, this method does nothing.
- * @param errors
- */
- public void addErrors(List<ValidationError> errors) {
- if (errors != null) {
- for (ValidationError validationError : errors) {
- addError(validationError);
- }
- }
- }
-
- /**
- * @return the list of validation errors
- */
- public List<ValidationError> getErrorsList() {
- return this.lErrors;
- }
-
- /**
- * This Class represents an error of validation. It contains an error code and
- * an error explanation.
- */
- public static class ValidationError {
- /**
- * Error identifier. This error code can be used as identifier to
- * internationalize the logging message using i18n.
- */
- private String errorCode;
-
- /**
- * Error details
- */
- private String details;
-
- /**
- * false : this error can't be ignore
- * true : this error can be ignore
- */
- private boolean isWarning = false;
-
- // TODO Add here COSObject or the PDObject that is linked to the error may a automatic fix can be done.
-
- /**
- * Create a validation error with the given error code
- *
- * @param errorCode
- */
- public ValidationError(String errorCode) {
- this.errorCode = errorCode;
- if (errorCode.startsWith(PreflightConstants.ERROR_SYNTAX_COMMON)){
- this.details = "Syntax error";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_SYNTAX_HEADER)){
- this.details = "Body Syntax error";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_SYNTAX_BODY)){
- this.details = "Body Syntax error";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_SYNTAX_CROSS_REF)){
- this.details = "CrossRef Syntax error";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_SYNTAX_TRAILER)){
- this.details = "Trailer Syntax error";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_GRAPHIC_INVALID)){
- this.details = "Invalid Graphis object";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_GRAPHIC_TRANSPARENCY)){
- this.details = "Invalid Graphis transparency";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_GRAPHIC_UNEXPECTED_KEY)){
- this.details = "Unexpected key in Graphic object definition";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_GRAPHIC_INVALID_COLOR_SPACE)){
- this.details = "Invalid Color space";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_FONTS_INVALID_DATA)){
- this.details = "Invalid Font definition";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_FONTS_DAMAGED)){
- this.details = "Font damaged";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_FONTS_GLYPH)){
- this.details = "Glyph error";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_TRANSPARENCY_EXT_GRAPHICAL_STATE)){
- this.details = "Transparency error";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_ANNOT_MISSING_FIELDS)){
- this.details = "Missing field in an annotation definition";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_ANNOT_FORBIDDEN_ELEMENT)){
- this.details = "Forbidden field in an annotation definition";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_ANNOT_INVALID_ELEMENT)){
- this.details = "Invalid field value in an annotation definition";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_ACTION_INVALID_ACTIONS)){
- this.details = "Invalid action definition";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_ACTION_FORBIDDEN_ACTIONS)){
- this.details = "Action is forbidden";
- } else if (errorCode.startsWith(PreflightConstants.ERROR_METADATA_MAIN)){
- this.details = "Error on MetaData";
- } else {
- // default Unkown error
- this.details = "Unknown error";
- }
- }
-
- /**
- * Create a validation error with the given error code and the error
- * explanation.
- *
- * @param errorCode
- * the error code
- * @param details
- * the error explanation
- */
- public ValidationError(String errorCode, String details) {
- this(errorCode);
- if (details != null) {
- StringBuilder sb = new StringBuilder(this.details.length()+details.length()+2);
- sb.append(this.details).append(", ").append(details);
- this.details = sb.toString();
- }
- }
-
- /**
- * @return the error code
- */
- public String getErrorCode() {
- return errorCode;
- }
-
- /**
- * @return the error explanation
- */
- public String getDetails() {
- return details;
- }
-
- /**
- * Set the error explanation
- *
- * @param details
- */
- public void setDetails(String details) {
- this.details = details;
- }
-
- public boolean isWarning() {
- return isWarning;
- }
-
- public void setWarning(boolean isWarning) {
- this.isWarning = isWarning;
- }
-
-
- }
+public class ValidationResult
+{
+ /**
+ * Boolean to know if the PDF is a valid PDF/A
+ */
+ private boolean isValid = false;
+
+ /**
+ * Errors to know why the PDF isn't valid. If the PDF is valid, this list is empty.
+ */
+ private List<ValidationError> lErrors = new ArrayList<ValidationError>();
+
+ /**
+ * Object representation of the XMPMetaData contained by the pdf file This attribute can be null if the Validation
+ * fails.
+ */
+ private XMPMetadata xmpMetaData = null;
+
+ /**
+ * Create a Validation result object
+ *
+ * @param isValid
+ */
+ public ValidationResult(boolean isValid)
+ {
+ this.isValid = isValid;
+ }
+
+ /**
+ * Create a Validation Result object. This constructor force the isValid to false and add the given error to the
+ * list or ValidationErrors.
+ *
+ * @param error
+ * if error is null, no error is added to the list.
+ */
+ public ValidationResult(ValidationError error)
+ {
+ this.isValid = false;
+ if (error != null)
+ {
+ this.lErrors.add(error);
+ }
+ }
+
+ /**
+ * Create a Validation Result object. This constructor force the isValid to false and add all the given errors to
+ * the list or ValidationErrors.
+ *
+ * @param error
+ * if error is null, no error is added to the list.
+ */
+ public ValidationResult(List<ValidationError> errors)
+ {
+ this.isValid = false;
+ this.lErrors = errors;
+ }
+
+ /**
+ * Add the ValidationError object of the otherResult in the Error list of the current object. Apply a logical AND on
+ * the isValid boolean.
+ *
+ * @param otherResult
+ */
+ public void mergeResult(ValidationResult otherResult)
+ {
+ if (otherResult != null)
+ {
+ this.lErrors.addAll(otherResult.getErrorsList());
+ this.isValid &= otherResult.isValid();
+ }
+ }
+
+ /**
+ * @return the xmpMetaData
+ */
+ public XMPMetadata getXmpMetaData()
+ {
+ return xmpMetaData;
+ }
+
+ /**
+ * @param xmpMetaData
+ * the xmpMetaData to set
+ */
+ void setXmpMetaData(XMPMetadata xmpMetaData)
+ {
+ this.xmpMetaData = xmpMetaData;
+ }
+
+ /**
+ * @return true if the PDF is valid,false otherwise
+ */
+ public boolean isValid()
+ {
+ return isValid;
+ }
+
+ /**
+ * Add error to the list of ValidationError. If the given error is null, this method does nothing
+ *
+ * @param error
+ */
+ public void addError(ValidationError error)
+ {
+ if (error != null)
+ {
+ this.isValid &= error.isWarning();
+ this.lErrors.add(error);
+ }
+ }
+
+ /**
+ * Add a set of errors to the list of ValidationError. If the given list is null, this method does nothing.
+ *
+ * @param errors
+ */
+ public void addErrors(List<ValidationError> errors)
+ {
+ if (errors != null)
+ {
+ for (ValidationError validationError : errors)
+ {
+ addError(validationError);
+ }
+ }
+ }
+
+ /**
+ * @return the list of validation errors
+ */
+ public List<ValidationError> getErrorsList()
+ {
+ return this.lErrors;
+ }
+
+ /**
+ * This Class represents an error of validation. It contains an error code and an error explanation.
+ */
+ public static class ValidationError
+ {
+ /**
+ * Error identifier. This error code can be used as identifier to internationalize the logging message using
+ * i18n.
+ */
+ private String errorCode;
+
+ /**
+ * Error details
+ */
+ private String details;
+
+ /**
+ * false : this error can't be ignore true : this error can be ignore
+ */
+ private boolean isWarning = false;
+
+ // TODO Add here COSObject or the PDObject that is linked to the error may a automatic fix can be done.
+
+ /**
+ * Create a validation error with the given error code
+ *
+ * @param errorCode
+ */
+ public ValidationError(String errorCode)
+ {
+ this.errorCode = errorCode;
+ if (errorCode.startsWith(PreflightConstants.ERROR_SYNTAX_COMMON))
+ {
+ this.details = "Syntax error";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_SYNTAX_HEADER))
+ {
+ this.details = "Body Syntax error";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_SYNTAX_BODY))
+ {
+ this.details = "Body Syntax error";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_SYNTAX_CROSS_REF))
+ {
+ this.details = "CrossRef Syntax error";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_SYNTAX_TRAILER))
+ {
+ this.details = "Trailer Syntax error";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_GRAPHIC_INVALID))
+ {
+ this.details = "Invalid Graphis object";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_GRAPHIC_TRANSPARENCY))
+ {
+ this.details = "Invalid Graphis transparency";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_GRAPHIC_UNEXPECTED_KEY))
+ {
+ this.details = "Unexpected key in Graphic object definition";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_GRAPHIC_INVALID_COLOR_SPACE))
+ {
+ this.details = "Invalid Color space";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_FONTS_INVALID_DATA))
+ {
+ this.details = "Invalid Font definition";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_FONTS_DAMAGED))
+ {
+ this.details = "Font damaged";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_FONTS_GLYPH))
+ {
+ this.details = "Glyph error";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_TRANSPARENCY_EXT_GRAPHICAL_STATE))
+ {
+ this.details = "Transparency error";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_ANNOT_MISSING_FIELDS))
+ {
+ this.details = "Missing field in an annotation definition";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_ANNOT_FORBIDDEN_ELEMENT))
+ {
+ this.details = "Forbidden field in an annotation definition";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_ANNOT_INVALID_ELEMENT))
+ {
+ this.details = "Invalid field value in an annotation definition";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_ACTION_INVALID_ACTIONS))
+ {
+ this.details = "Invalid action definition";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_ACTION_FORBIDDEN_ACTIONS))
+ {
+ this.details = "Action is forbidden";
+ }
+ else if (errorCode.startsWith(PreflightConstants.ERROR_METADATA_MAIN))
+ {
+ this.details = "Error on MetaData";
+ }
+ else
+ {
+ // default Unkown error
+ this.details = "Unknown error";
+ }
+ }
+
+ /**
+ * Create a validation error with the given error code and the error explanation.
+ *
+ * @param errorCode
+ * the error code
+ * @param details
+ * the error explanation
+ */
+ public ValidationError(String errorCode, String details)
+ {
+ this(errorCode);
+ if (details != null)
+ {
+ StringBuilder sb = new StringBuilder(this.details.length() + details.length() + 2);
+ sb.append(this.details).append(", ").append(details);
+ this.details = sb.toString();
+ }
+ }
+
+ /**
+ * @return the error code
+ */
+ public String getErrorCode()
+ {
+ return errorCode;
+ }
+
+ /**
+ * @return the error explanation
+ */
+ public String getDetails()
+ {
+ return details;
+ }
+
+ /**
+ * Set the error explanation
+ *
+ * @param details
+ */
+ public void setDetails(String details)
+ {
+ this.details = details;
+ }
+
+ public boolean isWarning()
+ {
+ return isWarning;
+ }
+
+ public void setWarning(boolean isWarning)
+ {
+ this.isWarning = isWarning;
+ }
+
+ }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/Validator_A1b.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/Validator_A1b.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/Validator_A1b.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/Validator_A1b.java Wed Mar 6 16:46:35 2013
@@ -28,9 +28,6 @@ import org.apache.pdfbox.preflight.Valid
import org.apache.pdfbox.preflight.exception.SyntaxValidationException;
import org.apache.pdfbox.preflight.parser.PreflightParser;
-
-
-
/**
* This class is a simple main class used to check the validity of a pdf file.
*
@@ -39,39 +36,48 @@ import org.apache.pdfbox.preflight.parse
* @author gbailleul
*
*/
-public class Validator_A1b {
-
- public static void main(String[] args) throws Exception {
- if (args.length == 0) {
- System.out
- .println("Usage : java org.apache.pdfbox.preflight.Validator_A1b <file path>");
- System.out.println("Version : "+Version.getVersion());
- System.exit(1);
- }
-
- ValidationResult result = null;
- FileDataSource fd = new FileDataSource(args[0]);
- PreflightParser parser = new PreflightParser(fd);
- try {
- parser.parse();
- PreflightDocument document = parser.getPreflightDocument();
- document.validate();
- result = document.getResult();
- document.close();
- } catch (SyntaxValidationException e) {
- result = e.getResult();
- }
-
- if (result.isValid()) {
- System.out.println("The file " + args[0] + " is a valid PDF/A-1b file");
- System.exit(0);
- } else {
- System.out.println("The file" + args[0] + " is not valid, error(s) :");
- for (ValidationError error : result.getErrorsList()) {
- System.out.println(error.getErrorCode() + " : " + error.getDetails());
- }
+public class Validator_A1b
+{
- System.exit(-1);
- }
- }
+ public static void main(String[] args) throws Exception
+ {
+ if (args.length == 0)
+ {
+ System.out.println("Usage : java org.apache.pdfbox.preflight.Validator_A1b <file path>");
+ System.out.println("Version : " + Version.getVersion());
+ System.exit(1);
+ }
+
+ ValidationResult result = null;
+ FileDataSource fd = new FileDataSource(args[0]);
+ PreflightParser parser = new PreflightParser(fd);
+ try
+ {
+ parser.parse();
+ PreflightDocument document = parser.getPreflightDocument();
+ document.validate();
+ result = document.getResult();
+ document.close();
+ }
+ catch (SyntaxValidationException e)
+ {
+ result = e.getResult();
+ }
+
+ if (result.isValid())
+ {
+ System.out.println("The file " + args[0] + " is a valid PDF/A-1b file");
+ System.exit(0);
+ }
+ else
+ {
+ System.out.println("The file" + args[0] + " is not valid, error(s) :");
+ for (ValidationError error : result.getErrorsList())
+ {
+ System.out.println(error.getErrorCode() + " : " + error.getDetails());
+ }
+
+ System.exit(-1);
+ }
+ }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/AbstractActionManager.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/AbstractActionManager.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/AbstractActionManager.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/AbstractActionManager.java Wed Mar 6 16:46:35 2013
@@ -30,132 +30,138 @@ import org.apache.pdfbox.preflight.Prefl
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
import org.apache.pdfbox.preflight.exception.ValidationException;
-public abstract class AbstractActionManager {
- /**
- * ActionManager factory used to create new ActionManager
- */
- protected ActionManagerFactory actionFact = null;
- /**
- * Action name in a Additional Action dictionary
- */
- protected String aaKey = null;
- /**
- * The action dictionary checked by this class
- */
- protected COSDictionary actionDictionnary = null;
- /**
- * The validation context
- */
- protected PreflightContext context = null;
-
- /**
- *
- * @param amFact
- * Instance of ActionManagerFactory used to create ActionManager to
- * check Next actions.
- * @param adict
- * the COSDictionary of the action wrapped by this class.
- * @param ctx the validation context .
- * @param aaKey
- * The name of the key which identify the action in a additional
- * action dictionary.
- */
- AbstractActionManager(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey) {
- this.actionFact = amFact;
- this.actionDictionnary = adict;
- this.aaKey = aaKey;
- this.context = ctx;
- }
-
- /**
- * @return the isAdditionalAction
- */
- public boolean isAdditionalAction() {
- return this.aaKey != null;
- }
-
- /**
- * @return the actionDictionnary
- */
- public COSDictionary getActionDictionnary() {
- return actionDictionnary;
- }
-
- /**
- * @return the aaKey
- */
- public String getAdditionalActionKey() {
- return aaKey;
- }
-
- /**
- * This method create a list of Action Managers which represent actions in the
- * Next entry of the current action dictionary. For each Next Action, the
- * innerValid is called and the method returns false if a validation fails.
- *
- * @return True if all Next Action are valid, false otherwise.
- * @throws ValidationException
- */
- protected boolean validNextActions() throws ValidationException {
- List<AbstractActionManager> lActions = this.actionFact.getNextActions(this.context, this.actionDictionnary);
- for (AbstractActionManager nAction : lActions) {
- if (!nAction.innerValid()) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Call the valid(boolean, List) method with the additonalActionAuth set to
- * false.
- *
- * @param error
- * the validation error list to updated if the validation fails.
- * @return
- * @throws ValidationException
- */
- public boolean valid() throws ValidationException {
- return valid(false);
- }
-
- /**
- * Validate an Action dictionary.
- *
- * Return false if the dictionary is invalid (ex : missing key). If the
- * ActionManager represents an AdditionalAction, this method returns false and
- * updates the error list when the additonalActionAuth parameter is set to
- * false.
- *
- * This method call the innerValid method to process specific checks according
- * to the action type.
- *
- * If innerValid successes, all actions contained in the Next entry of the
- * Action dictionary are validated.
- *
- * @param additonalActionAuth
- * boolean to know if an additional action is authorized.
- * @return
- * @throws ValidationException
- */
- public boolean valid(boolean additonalActionAuth) throws ValidationException {
- if (isAdditionalAction() && !additonalActionAuth) {
- context.addValidationError(new ValidationError(ERROR_ACTION_FORBIDDEN_ADDITIONAL_ACTION, "Additional Action are forbidden" ));
- return false;
- }
-
- if (innerValid()) {
- return validNextActions();
- }
-
- return true;
- }
-
- /**
- * This method must be implemented by inherited classes to process specific
- * validation.
- *
- * @return True if the action is valid, false otherwise.
- */
- protected abstract boolean innerValid();
+public abstract class AbstractActionManager
+{
+ /**
+ * ActionManager factory used to create new ActionManager
+ */
+ protected ActionManagerFactory actionFact = null;
+ /**
+ * Action name in a Additional Action dictionary
+ */
+ protected String aaKey = null;
+ /**
+ * The action dictionary checked by this class
+ */
+ protected COSDictionary actionDictionnary = null;
+ /**
+ * The validation context
+ */
+ protected PreflightContext context = null;
+
+ /**
+ *
+ * @param amFact
+ * Instance of ActionManagerFactory used to create ActionManager to check Next actions.
+ * @param adict
+ * the COSDictionary of the action wrapped by this class.
+ * @param ctx
+ * the validation context .
+ * @param aaKey
+ * The name of the key which identify the action in a additional action dictionary.
+ */
+ AbstractActionManager(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey)
+ {
+ this.actionFact = amFact;
+ this.actionDictionnary = adict;
+ this.aaKey = aaKey;
+ this.context = ctx;
+ }
+
+ /**
+ * @return the isAdditionalAction
+ */
+ public boolean isAdditionalAction()
+ {
+ return this.aaKey != null;
+ }
+
+ /**
+ * @return the actionDictionnary
+ */
+ public COSDictionary getActionDictionnary()
+ {
+ return actionDictionnary;
+ }
+
+ /**
+ * @return the aaKey
+ */
+ public String getAdditionalActionKey()
+ {
+ return aaKey;
+ }
+
+ /**
+ * This method create a list of Action Managers which represent actions in the Next entry of the current action
+ * dictionary. For each Next Action, the innerValid is called and the method returns false if a validation fails.
+ *
+ * @return True if all Next Action are valid, false otherwise.
+ * @throws ValidationException
+ */
+ protected boolean validNextActions() throws ValidationException
+ {
+ List<AbstractActionManager> lActions = this.actionFact.getNextActions(this.context, this.actionDictionnary);
+ for (AbstractActionManager nAction : lActions)
+ {
+ if (!nAction.innerValid())
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Call the valid(boolean, List) method with the additonalActionAuth set to false.
+ *
+ * @param error
+ * the validation error list to updated if the validation fails.
+ * @return
+ * @throws ValidationException
+ */
+ public boolean valid() throws ValidationException
+ {
+ return valid(false);
+ }
+
+ /**
+ * Validate an Action dictionary.
+ *
+ * Return false if the dictionary is invalid (ex : missing key). If the ActionManager represents an
+ * AdditionalAction, this method returns false and updates the error list when the additonalActionAuth parameter is
+ * set to false.
+ *
+ * This method call the innerValid method to process specific checks according to the action type.
+ *
+ * If innerValid successes, all actions contained in the Next entry of the Action dictionary are validated.
+ *
+ * @param additonalActionAuth
+ * boolean to know if an additional action is authorized.
+ * @return
+ * @throws ValidationException
+ */
+ public boolean valid(boolean additonalActionAuth) throws ValidationException
+ {
+ if (isAdditionalAction() && !additonalActionAuth)
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_FORBIDDEN_ADDITIONAL_ACTION,
+ "Additional Action are forbidden"));
+ return false;
+ }
+
+ if (innerValid())
+ {
+ return validNextActions();
+ }
+
+ return true;
+ }
+
+ /**
+ * This method must be implemented by inherited classes to process specific validation.
+ *
+ * @return True if the action is valid, false otherwise.
+ */
+ protected abstract boolean innerValid();
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/ActionManagerFactory.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/ActionManagerFactory.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/ActionManagerFactory.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/ActionManagerFactory.java Wed Mar 6 16:46:35 2013
@@ -57,228 +57,249 @@ import org.apache.pdfbox.preflight.Prefl
import org.apache.pdfbox.preflight.exception.ValidationException;
import org.apache.pdfbox.preflight.utils.COSUtils;
-public class ActionManagerFactory {
- /**
- * This method extract actions from the given dictionary. An action is
- * identified by the following entries :
- * <UL>
- * <li>A (Action) : Available in Annotations, Outline items
- * <li>OpenAction (OpenAction) : Available in the Catalog dictionary
- * <li>AA (Additional Action) : Available in the Catalog dictionary,
- * Annotations, Pages
- * </UL>
- *
- * If there are no action, an empty list is returned.
- *
- * @param dictionary
- * @param cDoc
- * @return
- * @throws ValidationException
- */
- public final List<AbstractActionManager> getActionManagers(PreflightContext ctx, COSDictionary dictionary)
- throws ValidationException {
- List<AbstractActionManager> result = new ArrayList<AbstractActionManager>(0);
- Map<COSObjectKey, Boolean> alreadyCreated = new HashMap<COSObjectKey, Boolean>();
-
- COSBase aDict = dictionary.getDictionaryObject(COSName.A);
- if (aDict != null) {
- callCreateAction(aDict, ctx, result, alreadyCreated);
- }
-
- COSDocument cosDocument = ctx.getDocument().getDocument();
- COSBase oaDict = dictionary.getDictionaryObject(DICTIONARY_KEY_OPEN_ACTION);
- if (oaDict != null) {
- if (!COSUtils.isArray(oaDict, cosDocument)) {
- callCreateAction(oaDict, ctx, result, alreadyCreated);
- }
- // else Nothing to do because of an array contains a Destination not an
- // action.
- }
-
- COSBase aa = dictionary.getDictionaryObject(DICTIONARY_KEY_ADDITIONAL_ACTION);
- if (aa != null) {
- COSDictionary aaDict = COSUtils.getAsDictionary(aa, cosDocument);
- if (aaDict != null) {
- for (Object key : aaDict.keySet()) {
- COSName name = (COSName) key;
- callCreateAction(aaDict.getItem(name), ctx, result, name.getName(), alreadyCreated);
- }
- }
- }
- return result;
- }
-
- /**
- * Call the callCreateAction(COSBase, COSDocument, List<ActionManager>,
- * String) method with null as isAA parameter.
- *
- * @param aDict
- * a COSBase object (COSObject or COSDictionary) which represent the
- * action dictionary.
- * @param ctx
- * the preflight context.
- * @param result
- * the list of ActionManager to updated if the aDict parameter is
- * valid.
- * @param alreadyCreated This map is used to know if an Action has already been validated. It is
- * useful to avoid infinite loop in an action which has a Next entry.
- * @throws ValidationException
- */
- private void callCreateAction(COSBase aDict, PreflightContext ctx, List<AbstractActionManager> result, Map<COSObjectKey, Boolean> alreadyCreated) throws ValidationException {
- callCreateAction(aDict, ctx, result, null, alreadyCreated);
- }
-
- /**
- * Call the create action to add the ActionManager to the result list. If the
- * aDict parameter isn't an instance of COSDictionary, this method throws a
- * ValdiationException. If the aDict parameter is a reference to a
- * COSDicitonary, the action manager is create only if the linked COSObjectKey
- * is missing from the "alreadyCreated" map, in this case the action is added
- * to the map. If the aDict parameter is an instance of COSDIctionary, it is
- * impossible to check if the ActionManager already exists in the
- * "alreadyCreated" map.
- *
- * @param aDict
- * a COSBase object (COSObject or COSDictionary) which represent the
- * action dictionary.
- * @param ctx
- * the preflight validation context.
- * @param result
- * the list of ActionManager to updated if the aDict parameter is
- * valid.
- * @param additionActionKey
- * the Action identifier if it is an additional action
- * @param alreadyCreated This map is used to know if an Action has already been validated. It is
- * useful to avoid infinite loop in an action which has a Next entry.
- * @throws ValidationException
- */
- private void callCreateAction(COSBase aDict, PreflightContext ctx, List<AbstractActionManager> result, String additionActionKey, Map<COSObjectKey, Boolean> alreadyCreated)
- throws ValidationException {
- COSDocument cosDocument = ctx.getDocument().getDocument();
- if (COSUtils.isDictionary(aDict, cosDocument)) {
- if (aDict instanceof COSObject) {
- COSObjectKey cok = new COSObjectKey((COSObject) aDict);
- if (!alreadyCreated.containsKey(cok)) {
- result.add(createActionManager(ctx, COSUtils.getAsDictionary(aDict, cosDocument), additionActionKey));
- alreadyCreated.put(cok, true);
- }
- } else {
- result.add(createActionManager(ctx, COSUtils.getAsDictionary(aDict, cosDocument), additionActionKey));
- }
- } else {
- throw new ValidationException("Action entry isn't an instance of COSDictionary");
- }
- }
-
- /**
- * Returns all actions contained by the Next entry. If the action dictionary
- * doesn't have Next action, the result is an empty list.
- *
- * @param actionDictionary
- * the action dictionary which contains Next entry
- * @param cDoc
- * the COSDocument which contains actions.
- * @return
- * @throws ValidationException
- */
- public final List<AbstractActionManager> getNextActions(PreflightContext ctx, COSDictionary actionDictionary)
- throws ValidationException {
- List<AbstractActionManager> result = new ArrayList<AbstractActionManager>(0);
- Map<COSObjectKey, Boolean> alreadyCreated = new HashMap<COSObjectKey, Boolean>();
-
- COSBase nextDict = actionDictionary.getDictionaryObject(ACTION_DICTIONARY_KEY_NEXT);
- if (nextDict != null) {
- COSDocument cosDocument = ctx.getDocument().getDocument();
- if (COSUtils.isArray(nextDict, cosDocument)) {
- COSArray array = COSUtils.getAsArray(nextDict, cosDocument);
- // ---- Next may contains an array of Action dictionary
- for (int i = 0; i < array.size(); ++i) {
- callCreateAction(array.get(i), ctx, result, alreadyCreated);
- }
- } else {
- // ---- Next field contains a Dictionary or a reference to a Dictionary
- callCreateAction(nextDict, ctx, result, alreadyCreated);
- }
- }
- return result;
- }
-
- /**
- * Create an instance of ActionManager according to the value of the S entry.
- * If the type entry isn't Action, a ValidationException will be thrown.
- *
- * If the action type isn't authorized in a PDF/A file, an instance of
- * InvalidAction is returned.
- *
- * @param ctx
- * @param action
- * the action dictionary used to instantiate the ActionManager
- * @param isAA
- * the Action identifier if it is an additional action
- * @return
- * @throws ValidationException
- */
- protected AbstractActionManager createActionManager(PreflightContext ctx, COSDictionary action, String aaKey)
- throws ValidationException {
-
- String type = action.getNameAsString(COSName.TYPE);
- if (type != null && !ACTION_DICTIONARY_VALUE_TYPE.equals(type)) {
- throw new ValidationException("The given dictionary isn't the dictionary of an Action");
- }
-
- // ---- S is a mandatory fields. If S entry is missing, the return will
- // return the InvalidAction manager
- String s = action.getNameAsString(COSName.S);
-
- // --- Here is authorized actions
- if (ACTION_DICTIONARY_VALUE_ATYPE_GOTO.equals(s)) {
- return new GoToAction(this, action, ctx, aaKey);
- }
-
- if (ACTION_DICTIONARY_VALUE_ATYPE_GOTOR.equals(s)) {
- return new GoToRemoteAction(this, action, ctx, aaKey);
- }
-
- if (ACTION_DICTIONARY_VALUE_ATYPE_THREAD.equals(s)) {
- return new ThreadAction(this, action, ctx, aaKey);
- }
-
- if (ACTION_DICTIONARY_VALUE_ATYPE_URI.equals(s)) {
- return new UriAction(this, action, ctx, aaKey);
- }
-
- if (ACTION_DICTIONARY_VALUE_ATYPE_HIDE.equals(s)) {
- return new HideAction(this, action, ctx, aaKey);
- }
-
- if (ACTION_DICTIONARY_VALUE_ATYPE_NAMED.equals(s)) {
- return new NamedAction(this, action, ctx, aaKey);
- }
-
- if (ACTION_DICTIONARY_VALUE_ATYPE_SUBMIT.equals(s)) {
- return new SubmitAction(this, action, ctx, aaKey);
- }
-
- // --- Here is forbidden actions
- if (ACTION_DICTIONARY_VALUE_ATYPE_LAUNCH.equals(s) ||
- ACTION_DICTIONARY_VALUE_ATYPE_SOUND.equals(s) ||
- ACTION_DICTIONARY_VALUE_ATYPE_MOVIE.equals(s) ||
- ACTION_DICTIONARY_VALUE_ATYPE_RESET.equals(s) ||
- ACTION_DICTIONARY_VALUE_ATYPE_IMPORT.equals(s) ||
- ACTION_DICTIONARY_VALUE_ATYPE_JAVASCRIPT.equals(s) ||
- ACTION_DICTIONARY_VALUE_ATYPE_SETSTATE.equals(s) ||
- ACTION_DICTIONARY_VALUE_ATYPE_NOOP.equals(s)) {
- return new InvalidAction(this, action, ctx, aaKey,s);
- }
-
- // ---- The default ActionManager is the undefined one.
- // Actions defined in a PDF Reference greater than 1.4 will be considered as
- // Undefined actions, here the list of new actions until the PDF 1.6 :
- // #Â GoToE (1.6) : Not PDF/A, uses EmbeddedFiles.
- // # SetOCGState (1.5) : Not PDF/A, uses optional content.
- // # Rendition (1.5) : Not PDF/A, use multimedia content.
- // # Trans (1.5) : ??
- // # GoTo3DView (1.6) : ??
- return new UndefAction(this, action, ctx, aaKey, s);
- }
+public class ActionManagerFactory
+{
+ /**
+ * This method extract actions from the given dictionary. An action is identified by the following entries :
+ * <UL>
+ * <li>A (Action) : Available in Annotations, Outline items
+ * <li>OpenAction (OpenAction) : Available in the Catalog dictionary
+ * <li>AA (Additional Action) : Available in the Catalog dictionary, Annotations, Pages
+ * </UL>
+ *
+ * If there are no action, an empty list is returned.
+ *
+ * @param dictionary
+ * @param cDoc
+ * @return
+ * @throws ValidationException
+ */
+ public final List<AbstractActionManager> getActionManagers(PreflightContext ctx, COSDictionary dictionary)
+ throws ValidationException
+ {
+ List<AbstractActionManager> result = new ArrayList<AbstractActionManager>(0);
+ Map<COSObjectKey, Boolean> alreadyCreated = new HashMap<COSObjectKey, Boolean>();
+
+ COSBase aDict = dictionary.getDictionaryObject(COSName.A);
+ if (aDict != null)
+ {
+ callCreateAction(aDict, ctx, result, alreadyCreated);
+ }
+
+ COSDocument cosDocument = ctx.getDocument().getDocument();
+ COSBase oaDict = dictionary.getDictionaryObject(DICTIONARY_KEY_OPEN_ACTION);
+ if (oaDict != null)
+ {
+ if (!COSUtils.isArray(oaDict, cosDocument))
+ {
+ callCreateAction(oaDict, ctx, result, alreadyCreated);
+ }
+ // else Nothing to do because of an array contains a Destination not an
+ // action.
+ }
+
+ COSBase aa = dictionary.getDictionaryObject(DICTIONARY_KEY_ADDITIONAL_ACTION);
+ if (aa != null)
+ {
+ COSDictionary aaDict = COSUtils.getAsDictionary(aa, cosDocument);
+ if (aaDict != null)
+ {
+ for (Object key : aaDict.keySet())
+ {
+ COSName name = (COSName) key;
+ callCreateAction(aaDict.getItem(name), ctx, result, name.getName(), alreadyCreated);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Call the callCreateAction(COSBase, COSDocument, List<ActionManager>, String) method with null as isAA parameter.
+ *
+ * @param aDict
+ * a COSBase object (COSObject or COSDictionary) which represent the action dictionary.
+ * @param ctx
+ * the preflight context.
+ * @param result
+ * the list of ActionManager to updated if the aDict parameter is valid.
+ * @param alreadyCreated
+ * This map is used to know if an Action has already been validated. It is useful to avoid infinite loop
+ * in an action which has a Next entry.
+ * @throws ValidationException
+ */
+ private void callCreateAction(COSBase aDict, PreflightContext ctx, List<AbstractActionManager> result,
+ Map<COSObjectKey, Boolean> alreadyCreated) throws ValidationException
+ {
+ callCreateAction(aDict, ctx, result, null, alreadyCreated);
+ }
+
+ /**
+ * Call the create action to add the ActionManager to the result list. If the aDict parameter isn't an instance of
+ * COSDictionary, this method throws a ValdiationException. If the aDict parameter is a reference to a
+ * COSDicitonary, the action manager is create only if the linked COSObjectKey is missing from the "alreadyCreated"
+ * map, in this case the action is added to the map. If the aDict parameter is an instance of COSDIctionary, it is
+ * impossible to check if the ActionManager already exists in the "alreadyCreated" map.
+ *
+ * @param aDict
+ * a COSBase object (COSObject or COSDictionary) which represent the action dictionary.
+ * @param ctx
+ * the preflight validation context.
+ * @param result
+ * the list of ActionManager to updated if the aDict parameter is valid.
+ * @param additionActionKey
+ * the Action identifier if it is an additional action
+ * @param alreadyCreated
+ * This map is used to know if an Action has already been validated. It is useful to avoid infinite loop
+ * in an action which has a Next entry.
+ * @throws ValidationException
+ */
+ private void callCreateAction(COSBase aDict, PreflightContext ctx, List<AbstractActionManager> result,
+ String additionActionKey, Map<COSObjectKey, Boolean> alreadyCreated) throws ValidationException
+ {
+ COSDocument cosDocument = ctx.getDocument().getDocument();
+ if (COSUtils.isDictionary(aDict, cosDocument))
+ {
+ if (aDict instanceof COSObject)
+ {
+ COSObjectKey cok = new COSObjectKey((COSObject) aDict);
+ if (!alreadyCreated.containsKey(cok))
+ {
+ result.add(createActionManager(ctx, COSUtils.getAsDictionary(aDict, cosDocument), additionActionKey));
+ alreadyCreated.put(cok, true);
+ }
+ }
+ else
+ {
+ result.add(createActionManager(ctx, COSUtils.getAsDictionary(aDict, cosDocument), additionActionKey));
+ }
+ }
+ else
+ {
+ throw new ValidationException("Action entry isn't an instance of COSDictionary");
+ }
+ }
+
+ /**
+ * Returns all actions contained by the Next entry. If the action dictionary doesn't have Next action, the result is
+ * an empty list.
+ *
+ * @param actionDictionary
+ * the action dictionary which contains Next entry
+ * @param cDoc
+ * the COSDocument which contains actions.
+ * @return
+ * @throws ValidationException
+ */
+ public final List<AbstractActionManager> getNextActions(PreflightContext ctx, COSDictionary actionDictionary)
+ throws ValidationException
+ {
+ List<AbstractActionManager> result = new ArrayList<AbstractActionManager>(0);
+ Map<COSObjectKey, Boolean> alreadyCreated = new HashMap<COSObjectKey, Boolean>();
+
+ COSBase nextDict = actionDictionary.getDictionaryObject(ACTION_DICTIONARY_KEY_NEXT);
+ if (nextDict != null)
+ {
+ COSDocument cosDocument = ctx.getDocument().getDocument();
+ if (COSUtils.isArray(nextDict, cosDocument))
+ {
+ COSArray array = COSUtils.getAsArray(nextDict, cosDocument);
+ // ---- Next may contains an array of Action dictionary
+ for (int i = 0; i < array.size(); ++i)
+ {
+ callCreateAction(array.get(i), ctx, result, alreadyCreated);
+ }
+ }
+ else
+ {
+ // ---- Next field contains a Dictionary or a reference to a Dictionary
+ callCreateAction(nextDict, ctx, result, alreadyCreated);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Create an instance of ActionManager according to the value of the S entry. If the type entry isn't Action, a
+ * ValidationException will be thrown.
+ *
+ * If the action type isn't authorized in a PDF/A file, an instance of InvalidAction is returned.
+ *
+ * @param ctx
+ * @param action
+ * the action dictionary used to instantiate the ActionManager
+ * @param isAA
+ * the Action identifier if it is an additional action
+ * @return
+ * @throws ValidationException
+ */
+ protected AbstractActionManager createActionManager(PreflightContext ctx, COSDictionary action, String aaKey)
+ throws ValidationException
+ {
+
+ String type = action.getNameAsString(COSName.TYPE);
+ if (type != null && !ACTION_DICTIONARY_VALUE_TYPE.equals(type))
+ {
+ throw new ValidationException("The given dictionary isn't the dictionary of an Action");
+ }
+
+ // ---- S is a mandatory fields. If S entry is missing, the return will
+ // return the InvalidAction manager
+ String s = action.getNameAsString(COSName.S);
+
+ // --- Here is authorized actions
+ if (ACTION_DICTIONARY_VALUE_ATYPE_GOTO.equals(s))
+ {
+ return new GoToAction(this, action, ctx, aaKey);
+ }
+
+ if (ACTION_DICTIONARY_VALUE_ATYPE_GOTOR.equals(s))
+ {
+ return new GoToRemoteAction(this, action, ctx, aaKey);
+ }
+
+ if (ACTION_DICTIONARY_VALUE_ATYPE_THREAD.equals(s))
+ {
+ return new ThreadAction(this, action, ctx, aaKey);
+ }
+
+ if (ACTION_DICTIONARY_VALUE_ATYPE_URI.equals(s))
+ {
+ return new UriAction(this, action, ctx, aaKey);
+ }
+
+ if (ACTION_DICTIONARY_VALUE_ATYPE_HIDE.equals(s))
+ {
+ return new HideAction(this, action, ctx, aaKey);
+ }
+
+ if (ACTION_DICTIONARY_VALUE_ATYPE_NAMED.equals(s))
+ {
+ return new NamedAction(this, action, ctx, aaKey);
+ }
+
+ if (ACTION_DICTIONARY_VALUE_ATYPE_SUBMIT.equals(s))
+ {
+ return new SubmitAction(this, action, ctx, aaKey);
+ }
+
+ // --- Here is forbidden actions
+ if (ACTION_DICTIONARY_VALUE_ATYPE_LAUNCH.equals(s) || ACTION_DICTIONARY_VALUE_ATYPE_SOUND.equals(s)
+ || ACTION_DICTIONARY_VALUE_ATYPE_MOVIE.equals(s) || ACTION_DICTIONARY_VALUE_ATYPE_RESET.equals(s)
+ || ACTION_DICTIONARY_VALUE_ATYPE_IMPORT.equals(s) || ACTION_DICTIONARY_VALUE_ATYPE_JAVASCRIPT.equals(s)
+ || ACTION_DICTIONARY_VALUE_ATYPE_SETSTATE.equals(s) || ACTION_DICTIONARY_VALUE_ATYPE_NOOP.equals(s))
+ {
+ return new InvalidAction(this, action, ctx, aaKey, s);
+ }
+
+ // ---- The default ActionManager is the undefined one.
+ // Actions defined in a PDF Reference greater than 1.4 will be considered as
+ // Undefined actions, here the list of new actions until the PDF 1.6 :
+ // #Â GoToE (1.6) : Not PDF/A, uses EmbeddedFiles.
+ // # SetOCGState (1.5) : Not PDF/A, uses optional content.
+ // # Rendition (1.5) : Not PDF/A, use multimedia content.
+ // # Trans (1.5) : ??
+ // # GoTo3DView (1.6) : ??
+ return new UndefAction(this, action, ctx, aaKey, s);
+ }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/GoToAction.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/GoToAction.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/GoToAction.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/GoToAction.java Wed Mar 6 16:46:35 2013
@@ -33,54 +33,53 @@ import org.apache.pdfbox.preflight.Valid
import org.apache.pdfbox.preflight.utils.COSUtils;
/**
- * ActionManager for the GoTo action GoToAction is valid if the D entry is
- * present.
+ * ActionManager for the GoTo action GoToAction is valid if the D entry is present.
*/
-public class GoToAction extends AbstractActionManager {
+public class GoToAction extends AbstractActionManager
+{
- /**
- *
- * @param amFact
- * Instance of ActionManagerFactory used to create ActionManager to
- * check Next actions.
- * @param adict
- * the COSDictionary of the action wrapped by this class.
- * @param cDoc
- * the COSDocument from which the action comes from.
- * @param aa
- * The name of the key which identify the action in a additional
- * action dictionary.
- */
- public GoToAction(ActionManagerFactory amFact, COSDictionary adict,
- PreflightContext ctx, String aa) {
- super(amFact, adict, ctx, aa);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util
- * .List)
- */
- @Override
- protected boolean innerValid() {
- COSBase d = this.actionDictionnary.getItem(COSName.D);
-
- // ---- D entry is mandatory
- if (d == null) {
- context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
- "D entry is mandatory for the GoToActions"));
- return false;
+ /**
+ *
+ * @param amFact
+ * Instance of ActionManagerFactory used to create ActionManager to check Next actions.
+ * @param adict
+ * the COSDictionary of the action wrapped by this class.
+ * @param cDoc
+ * the COSDocument from which the action comes from.
+ * @param aa
+ * The name of the key which identify the action in a additional action dictionary.
+ */
+ public GoToAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aa)
+ {
+ super(amFact, adict, ctx, aa);
}
- COSDocument cosDocument = this.context.getDocument().getDocument();
- if (!(d instanceof COSName || COSUtils.isString(d, cosDocument) || COSUtils.isArray(d, cosDocument))) {
- context.addValidationError(new ValidationError(ERROR_ACTION_INVALID_TYPE, "Type of D entry is invalid"));
- return false;
- }
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util .List)
+ */
+ @Override
+ protected boolean innerValid()
+ {
+ COSBase d = this.actionDictionnary.getItem(COSName.D);
+
+ // ---- D entry is mandatory
+ if (d == null)
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
+ "D entry is mandatory for the GoToActions"));
+ return false;
+ }
+
+ COSDocument cosDocument = this.context.getDocument().getDocument();
+ if (!(d instanceof COSName || COSUtils.isString(d, cosDocument) || COSUtils.isArray(d, cosDocument)))
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_INVALID_TYPE, "Type of D entry is invalid"));
+ return false;
+ }
- return true;
- }
+ return true;
+ }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/GoToRemoteAction.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/GoToRemoteAction.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/GoToRemoteAction.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/GoToRemoteAction.java Wed Mar 6 16:46:35 2013
@@ -30,45 +30,45 @@ import org.apache.pdfbox.preflight.Prefl
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
/**
- * ActionManager for the GoToRemote action GoToRemoteAction is valid if the F
- * entry is present.
+ * ActionManager for the GoToRemote action GoToRemoteAction is valid if the F entry is present.
*/
-public class GoToRemoteAction extends GoToAction {
+public class GoToRemoteAction extends GoToAction
+{
- /**
- *
- * @param amFact
- * Instance of ActionManagerFactory used to create ActionManager to
- * check Next actions.
- * @param adict
- * the COSDictionary of the action wrapped by this class.
- * @param cDoc
- * the COSDocument from which the action comes from.
- * @param aaKey
- * The name of the key which identify the action in a additional
- * action dictionary.
- */
- public GoToRemoteAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey) {
- super(amFact, adict, ctx, aaKey);
- }
+ /**
+ *
+ * @param amFact
+ * Instance of ActionManagerFactory used to create ActionManager to check Next actions.
+ * @param adict
+ * the COSDictionary of the action wrapped by this class.
+ * @param cDoc
+ * the COSDocument from which the action comes from.
+ * @param aaKey
+ * The name of the key which identify the action in a additional action dictionary.
+ */
+ public GoToRemoteAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey)
+ {
+ super(amFact, adict, ctx, aaKey);
+ }
- /*
- * (non-Javadoc)
- *
- * @see
- * net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util
- * .List)
- */
- @Override
- protected boolean innerValid() {
- if (super.innerValid()) {
- COSBase f = this.actionDictionnary.getItem(COSName.F);
- if (f == null) {
- context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
- "F entry is mandatory for the GoToRemoteActions"));
- return false;
- }
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util .List)
+ */
+ @Override
+ protected boolean innerValid()
+ {
+ if (super.innerValid())
+ {
+ COSBase f = this.actionDictionnary.getItem(COSName.F);
+ if (f == null)
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
+ "F entry is mandatory for the GoToRemoteActions"));
+ return false;
+ }
+ }
+ return true;
}
- return true;
- }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/HideAction.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/HideAction.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/HideAction.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/HideAction.java Wed Mar 6 16:46:35 2013
@@ -34,76 +34,71 @@ import org.apache.pdfbox.preflight.Valid
import org.apache.pdfbox.preflight.utils.COSUtils;
/**
- * ActionManager for the Hide action. The Hide action isn't specifically
- * prohibited by PDF/A-1, but should have been. So this action manager isn't an
- * instance of InvalidAction but authorized only the H entry with the false
- * value.
+ * ActionManager for the Hide action. The Hide action isn't specifically prohibited by PDF/A-1, but should have been. So
+ * this action manager isn't an instance of InvalidAction but authorized only the H entry with the false value.
*/
-public class HideAction extends AbstractActionManager {
+public class HideAction extends AbstractActionManager
+{
- /**
- * @param amFact
- * Instance of ActionManagerFactory used to create ActionManager to
- * check Next actions.
- * @param adict
- * the COSDictionary of the action wrapped by this class.
- * @param ctx
- * the DocumentHandler from which the action comes from.
- * @param aaKey
- * The name of the key which identify the action in a additional
- * action dictionary.
- */
- public HideAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey) {
- super(amFact, adict, ctx, aaKey);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util
- * .List)
- */
- @Override
- protected boolean innerValid() {
- COSBase t = this.actionDictionnary.getItem(COSName.T);
- // ---- T entry is mandatory
- if (t == null) {
- context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
- "T entry is mandatory for the NamedActions"));
- return false;
- }
-
- COSDocument cosDocument = this.context.getDocument().getDocument();
- if (!(COSUtils.isDictionary(t, cosDocument) || COSUtils.isArray(t, cosDocument) || COSUtils.isString(t, cosDocument))) {
- context.addValidationError(new ValidationError(ERROR_ACTION_INVALID_TYPE,"T entry type is invalid"));
- return false;
+ /**
+ * @param amFact
+ * Instance of ActionManagerFactory used to create ActionManager to check Next actions.
+ * @param adict
+ * the COSDictionary of the action wrapped by this class.
+ * @param ctx
+ * the DocumentHandler from which the action comes from.
+ * @param aaKey
+ * The name of the key which identify the action in a additional action dictionary.
+ */
+ public HideAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey)
+ {
+ super(amFact, adict, ctx, aaKey);
}
/*
- * ---- H entry is optional but the default value is True (annotations of
- * the T entry will be hidden) according to the aim of a PDF/A it should be
- * false (annotations of the T entry will be shown).
+ * (non-Javadoc)
*
- * We check the H value and we throw an error if it is true because of the
- * PDF/A Application Notes sentence :
- *
- * The PDF Reference supports a concept whereby something will happen when
- * the user performs an explicit or implicit action in a PDF viewer - these
- * "things" are called Actions. PDF/A-1 permits a limited set of these
- * Actions, which are detailed in section 6.6.1. Specifically, any action
- * that could change the visual representation of the document or is not
- * documented in the PDF Reference is not permitted. This includes the /Hide
- * action which isn't specifically prohibited by PDF/A-1, but should have
- * been.
+ * @see net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util .List)
*/
- boolean h = this.actionDictionnary.getBoolean(COSName.H, true);
- if (h) {
- context.addValidationError(new ValidationError(ERROR_ACTION_HIDE_H_INVALID,
- "H entry is \"true\""));
- return false;
- }
+ @Override
+ protected boolean innerValid()
+ {
+ COSBase t = this.actionDictionnary.getItem(COSName.T);
+ // ---- T entry is mandatory
+ if (t == null)
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
+ "T entry is mandatory for the NamedActions"));
+ return false;
+ }
+
+ COSDocument cosDocument = this.context.getDocument().getDocument();
+ if (!(COSUtils.isDictionary(t, cosDocument) || COSUtils.isArray(t, cosDocument) || COSUtils.isString(t,
+ cosDocument)))
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_INVALID_TYPE, "T entry type is invalid"));
+ return false;
+ }
+
+ /*
+ * ---- H entry is optional but the default value is True (annotations of the T entry will be hidden) according
+ * to the aim of a PDF/A it should be false (annotations of the T entry will be shown).
+ *
+ * We check the H value and we throw an error if it is true because of the PDF/A Application Notes sentence :
+ *
+ * The PDF Reference supports a concept whereby something will happen when the user performs an explicit or
+ * implicit action in a PDF viewer - these "things" are called Actions. PDF/A-1 permits a limited set of these
+ * Actions, which are detailed in section 6.6.1. Specifically, any action that could change the visual
+ * representation of the document or is not documented in the PDF Reference is not permitted. This includes the
+ * /Hide action which isn't specifically prohibited by PDF/A-1, but should have been.
+ */
+ boolean h = this.actionDictionnary.getBoolean(COSName.H, true);
+ if (h)
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_HIDE_H_INVALID, "H entry is \"true\""));
+ return false;
+ }
- return true;
- }
+ return true;
+ }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/InvalidAction.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/InvalidAction.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/InvalidAction.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/InvalidAction.java Wed Mar 6 16:46:35 2013
@@ -28,43 +28,43 @@ import org.apache.pdfbox.preflight.Prefl
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
/**
- * ActionManager for InvalidAction. An invalid action is an action which isn't
- * authorized in a PDF/A file but should be valid in a standard PDF file.
+ * ActionManager for InvalidAction. An invalid action is an action which isn't authorized in a PDF/A file but should be
+ * valid in a standard PDF file.
*/
-public class InvalidAction extends AbstractActionManager {
- private String actionName = null;
+public class InvalidAction extends AbstractActionManager
+{
+ private String actionName = null;
- /**
- *
- * @param amFact
- * Instance of ActionManagerFactory used to create ActionManager to
- * check Next actions.
- * @param adict
- * the COSDictionary of the action wrapped by this class.
- * @param ctx
- * the DocumentHandler from which the action comes from.
- * @param aaKey
- * The name of the key which identify the action in a additional
- * action dictionary.
- * @param name
- * the action type
- */
- public InvalidAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey, String name) {
- super(amFact, adict, ctx, aaKey);
- this.actionName = name;
- }
+ /**
+ *
+ * @param amFact
+ * Instance of ActionManagerFactory used to create ActionManager to check Next actions.
+ * @param adict
+ * the COSDictionary of the action wrapped by this class.
+ * @param ctx
+ * the DocumentHandler from which the action comes from.
+ * @param aaKey
+ * The name of the key which identify the action in a additional action dictionary.
+ * @param name
+ * the action type
+ */
+ public InvalidAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey,
+ String name)
+ {
+ super(amFact, adict, ctx, aaKey);
+ this.actionName = name;
+ }
- /*
- * (non-Javadoc)
- *
- * @see
- * net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util
- * .List)
- */
- @Override
- protected boolean innerValid() {
- context.addValidationError(new ValidationError(ERROR_ACTION_FORBIDDEN_ACTIONS_EXPLICITLY_FORBIDDEN, "The action "
- + actionName + " is forbidden"));
- return false;
- }
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util .List)
+ */
+ @Override
+ protected boolean innerValid()
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_FORBIDDEN_ACTIONS_EXPLICITLY_FORBIDDEN,
+ "The action " + actionName + " is forbidden"));
+ return false;
+ }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/NamedAction.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/NamedAction.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/NamedAction.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/NamedAction.java Wed Mar 6 16:46:35 2013
@@ -34,8 +34,7 @@ import org.apache.pdfbox.preflight.Prefl
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
/**
- * ActionManager for the Named action. Named action is valid if N entry is
- * present with one of the four values :
+ * ActionManager for the Named action. Named action is valid if N entry is present with one of the four values :
* <UL>
* <li>NextPage
* <li>PrevPage
@@ -43,50 +42,52 @@ import org.apache.pdfbox.preflight.Valid
* <li>LastPage
* </UL>
*/
-public class NamedAction extends AbstractActionManager {
+public class NamedAction extends AbstractActionManager
+{
- /**
- * @param amFact
- * Instance of ActionManagerFactory used to create ActionManager to
- * check Next actions.
- * @param adict
- * the COSDictionary of the action wrapped by this class.
- * @param cDoc
- * the COSDocument from which the action comes from.
- * @param aaKey
- * The name of the key which identify the action in a additional
- * action dictionary.
- */
- public NamedAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey) {
- super(amFact, adict, ctx, aaKey);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util
- * .List)
- */
- @Override
- protected boolean innerValid() {
- String n = this.actionDictionnary.getNameAsString(COSName.N);
-
- // ---- N entry is mandatory
- if (n == null || "".equals(n)) {
- context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY, "N entry is mandatory for the NamedActions"));
- return false;
+ /**
+ * @param amFact
+ * Instance of ActionManagerFactory used to create ActionManager to check Next actions.
+ * @param adict
+ * the COSDictionary of the action wrapped by this class.
+ * @param cDoc
+ * the COSDocument from which the action comes from.
+ * @param aaKey
+ * The name of the key which identify the action in a additional action dictionary.
+ */
+ public NamedAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey)
+ {
+ super(amFact, adict, ctx, aaKey);
}
- // ---- Only Predefine name actions are authorized
- if (!(ACTION_DICTIONARY_VALUE_ATYPE_NAMED_FIRST.equals(n)
- || ACTION_DICTIONARY_VALUE_ATYPE_NAMED_LAST.equals(n)
- || ACTION_DICTIONARY_VALUE_ATYPE_NAMED_NEXT.equals(n) || ACTION_DICTIONARY_VALUE_ATYPE_NAMED_PREV
- .equals(n))) {
- context.addValidationError(new ValidationError(ERROR_ACTION_FORBIDDEN_ACTIONS_NAMED, n + " isn't authorized as named action"));
- return false;
- }
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util .List)
+ */
+ @Override
+ protected boolean innerValid()
+ {
+ String n = this.actionDictionnary.getNameAsString(COSName.N);
+
+ // ---- N entry is mandatory
+ if (n == null || "".equals(n))
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
+ "N entry is mandatory for the NamedActions"));
+ return false;
+ }
+
+ // ---- Only Predefine name actions are authorized
+ if (!(ACTION_DICTIONARY_VALUE_ATYPE_NAMED_FIRST.equals(n) || ACTION_DICTIONARY_VALUE_ATYPE_NAMED_LAST.equals(n)
+ || ACTION_DICTIONARY_VALUE_ATYPE_NAMED_NEXT.equals(n) || ACTION_DICTIONARY_VALUE_ATYPE_NAMED_PREV
+ .equals(n)))
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_FORBIDDEN_ACTIONS_NAMED, n
+ + " isn't authorized as named action"));
+ return false;
+ }
- return true;
- }
+ return true;
+ }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/SubmitAction.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/SubmitAction.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/SubmitAction.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/SubmitAction.java Wed Mar 6 16:46:35 2013
@@ -30,43 +30,42 @@ import org.apache.pdfbox.preflight.Prefl
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
/**
- * ActionManager for the Submit action SubmitAction is valid if the F entry is
- * present.
+ * ActionManager for the Submit action SubmitAction is valid if the F entry is present.
*/
-public class SubmitAction extends AbstractActionManager {
+public class SubmitAction extends AbstractActionManager
+{
- /**
- * @param amFact
- * Instance of ActionManagerFactory used to create ActionManager to
- * check Next actions.
- * @param adict
- * the COSDictionary of the action wrapped by this class.
- * @param cDoc
- * the COSDocument from which the action comes from.
- * @param aaKey
- * The name of the key which identify the action in a additional
- * action dictionary.
- */
- public SubmitAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey) {
- super(amFact, adict, ctx, aaKey);
- }
+ /**
+ * @param amFact
+ * Instance of ActionManagerFactory used to create ActionManager to check Next actions.
+ * @param adict
+ * the COSDictionary of the action wrapped by this class.
+ * @param cDoc
+ * the COSDocument from which the action comes from.
+ * @param aaKey
+ * The name of the key which identify the action in a additional action dictionary.
+ */
+ public SubmitAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey)
+ {
+ super(amFact, adict, ctx, aaKey);
+ }
- /*
- * (non-Javadoc)
- *
- * @see
- * net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util
- * .List)
- */
- @Override
- protected boolean innerValid() {
- COSBase f = this.actionDictionnary.getItem(COSName.F);
- if (f == null) {
- context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
- "F entry is mandatory for the SubmitActions"));
- return false;
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util .List)
+ */
+ @Override
+ protected boolean innerValid()
+ {
+ COSBase f = this.actionDictionnary.getItem(COSName.F);
+ if (f == null)
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
+ "F entry is mandatory for the SubmitActions"));
+ return false;
+ }
+ return true;
}
- return true;
- }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/ThreadAction.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/ThreadAction.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/ThreadAction.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/ThreadAction.java Wed Mar 6 16:46:35 2013
@@ -33,52 +33,53 @@ import org.apache.pdfbox.preflight.Valid
import org.apache.pdfbox.preflight.utils.COSUtils;
/**
- * ActionManager for the Thread action ThreadAction is valid if the D entry is
- * present.
+ * ActionManager for the Thread action ThreadAction is valid if the D entry is present.
*/
-public class ThreadAction extends AbstractActionManager {
+public class ThreadAction extends AbstractActionManager
+{
- /**
- * @param amFact
- * Instance of ActionManagerFactory used to create ActionManager to
- * check Next actions.
- * @param adict
- * the COSDictionary of the action wrapped by this class.
- * @param cDoc
- * the COSDocument from which the action comes from.
- * @param aaKey
- * The name of the key which identify the action in a additional
- * action dictionary.
- */
- public ThreadAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey) {
- super(amFact, adict, ctx, aaKey);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util
- * .List)
- */
- @Override
- protected boolean innerValid() {
- COSBase d = this.actionDictionnary.getItem(COSName.D);
-
- // ---- D entry is mandatory
- if (d == null) {
- context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
- "D entry is mandatory for the ThreadAction"));
- return false;
+ /**
+ * @param amFact
+ * Instance of ActionManagerFactory used to create ActionManager to check Next actions.
+ * @param adict
+ * the COSDictionary of the action wrapped by this class.
+ * @param cDoc
+ * the COSDocument from which the action comes from.
+ * @param aaKey
+ * The name of the key which identify the action in a additional action dictionary.
+ */
+ public ThreadAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey)
+ {
+ super(amFact, adict, ctx, aaKey);
}
- COSDocument cosDocument = this.context.getDocument().getDocument();
- if (!(COSUtils.isInteger(d, cosDocument) || COSUtils.isString(d, cosDocument) || COSUtils.isDictionary(d, cosDocument))) {
- context.addValidationError(new ValidationError(ERROR_ACTION_INVALID_TYPE, "D entry type is invalid"));
- return false;
- }
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util .List)
+ */
+ @Override
+ protected boolean innerValid()
+ {
+ COSBase d = this.actionDictionnary.getItem(COSName.D);
+
+ // ---- D entry is mandatory
+ if (d == null)
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_MISING_KEY,
+ "D entry is mandatory for the ThreadAction"));
+ return false;
+ }
+
+ COSDocument cosDocument = this.context.getDocument().getDocument();
+ if (!(COSUtils.isInteger(d, cosDocument) || COSUtils.isString(d, cosDocument) || COSUtils.isDictionary(d,
+ cosDocument)))
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_INVALID_TYPE, "D entry type is invalid"));
+ return false;
+ }
- return true;
- }
+ return true;
+ }
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/UndefAction.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/UndefAction.java?rev=1453416&r1=1453415&r2=1453416&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/UndefAction.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/action/UndefAction.java Wed Mar 6 16:46:35 2013
@@ -28,45 +28,43 @@ import org.apache.pdfbox.preflight.Prefl
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
/**
- * ActionManager for Undefined Actions. An undefined action is an action which isn't
- * declared in the PDF Reference Third Edition. This kind of actions are forbidden to
- * avoid wrong result due to new features which can't be consistent with the PDF/A-1 format
+ * ActionManager for Undefined Actions. An undefined action is an action which isn't declared in the PDF Reference Third
+ * Edition. This kind of actions are forbidden to avoid wrong result due to new features which can't be consistent with
+ * the PDF/A-1 format
*/
-public class UndefAction extends AbstractActionManager {
- private String actionName = null;
+public class UndefAction extends AbstractActionManager
+{
+ private String actionName = null;
- /**
- *
- * @param amFact
- * Instance of ActionManagerFactory used to create ActionManager to
- * check Next actions.
- * @param adict
- * the COSDictionary of the action wrapped by this class.
- * @param ctx
- * the COSDocument from which the action comes from.
- * @param aaKey
- * The name of the key which identify the action in a additional
- * action dictionary.
- * @param name
- * the action type
- */
- public UndefAction(ActionManagerFactory amFact, COSDictionary adict,
- PreflightContext ctx, String aaKey, String name) {
- super(amFact, adict, ctx, aaKey);
- this.actionName = name;
- }
+ /**
+ *
+ * @param amFact
+ * Instance of ActionManagerFactory used to create ActionManager to check Next actions.
+ * @param adict
+ * the COSDictionary of the action wrapped by this class.
+ * @param ctx
+ * the COSDocument from which the action comes from.
+ * @param aaKey
+ * The name of the key which identify the action in a additional action dictionary.
+ * @param name
+ * the action type
+ */
+ public UndefAction(ActionManagerFactory amFact, COSDictionary adict, PreflightContext ctx, String aaKey, String name)
+ {
+ super(amFact, adict, ctx, aaKey);
+ this.actionName = name;
+ }
- /*
- * (non-Javadoc)
- *
- * @see
- * net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util
- * .List)
- */
- @Override
- protected boolean innerValid() {
- context.addValidationError(new ValidationError(ERROR_ACTION_FORBIDDEN_ACTIONS_UNDEF, "The action "
- + actionName + " is undefined"));
- return false;
- }
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.awl.edoc.pdfa.validation.actions.AbstractActionManager#valid(java.util .List)
+ */
+ @Override
+ protected boolean innerValid()
+ {
+ context.addValidationError(new ValidationError(ERROR_ACTION_FORBIDDEN_ACTIONS_UNDEF, "The action " + actionName
+ + " is undefined"));
+ return false;
+ }
}