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 2012/10/28 12:47:36 UTC

svn commit: r1402980 - in /pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight: font/descriptor/ metadata/ process/

Author: gbailleul
Date: Sun Oct 28 11:47:36 2012
New Revision: 1402980

URL: http://svn.apache.org/viewvc?rev=1402980&view=rev
Log:
PDFBOX-1377: patch preflight

Modified:
    pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/FontDescriptorHelper.java
    pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/PDFAIdentificationValidation.java
    pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/RDFAboutAttributeConcordanceValidation.java
    pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java
    pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/FontDescriptorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/FontDescriptorHelper.java?rev=1402980&r1=1402979&r2=1402980&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/FontDescriptorHelper.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/FontDescriptorHelper.java Sun Oct 28 11:47:36 2012
@@ -23,12 +23,10 @@ package org.apache.pdfbox.preflight.font
 
 import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_DESCRIPTOR_INVALID;
 import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_FONT_FILEX_INVALID;
-import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_METADATA_CATEGORY_PROPERTY_INVALID;
 import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_METADATA_FORMAT;
 import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_METADATA_FORMAT_STREAM;
 import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_METADATA_FORMAT_UNKOWN;
 import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_METADATA_FORMAT_XPACKET;
-import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_METADATA_RDF_ABOUT_ATTRIBUTE_MISSING;
 import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_METADATA_UNKNOWN_VALUETYPE;
 import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_SYNTAX_STREAM_INVALID_FILTER;
 import static org.apache.pdfbox.preflight.PreflightConstants.FONT_DICTIONARY_KEY_ASCENT;
@@ -48,13 +46,9 @@ import java.util.List;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.padaf.xmpbox.XMPMetadata;
-import org.apache.padaf.xmpbox.parser.XMPDocumentBuilder;
-import org.apache.padaf.xmpbox.parser.XmpExpectedRdfAboutAttribute;
-import org.apache.padaf.xmpbox.parser.XmpParsingException;
-import org.apache.padaf.xmpbox.parser.XmpSchemaException;
-import org.apache.padaf.xmpbox.parser.XmpUnknownValueTypeException;
-import org.apache.padaf.xmpbox.parser.XmpXpacketEndException;
-import org.apache.padaf.xmpbox.type.BadFieldValueException;
+import org.apache.padaf.xmpbox.xml.DomXmpParser;
+import org.apache.padaf.xmpbox.xml.XmpParsingException;
+import org.apache.padaf.xmpbox.xml.XmpParsingException.ErrorType;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.common.PDMetadata;
@@ -160,7 +154,7 @@ public abstract class FontDescriptorHelp
 
 				try {
 
-					XMPDocumentBuilder xmpBuilder = new XMPDocumentBuilder();
+					DomXmpParser xmpBuilder = new DomXmpParser();
 					XMPMetadata xmpMeta = xmpBuilder.parse(mdAsBytes);
 
 					FontMetaDataValidation fontMDval = new FontMetaDataValidation();
@@ -169,18 +163,14 @@ public abstract class FontDescriptorHelp
 					fontMDval.analyseRights(xmpMeta, fontDescriptor, ve);
 					this.fContainer.push(ve);
 
-				} catch (XmpUnknownValueTypeException e) {
-					this.fContainer.push(new ValidationError(ERROR_METADATA_UNKNOWN_VALUETYPE, e.getMessage()));
 				} catch (XmpParsingException e) {
-					this.fContainer.push(new ValidationError(ERROR_METADATA_FORMAT, e.getMessage()));
-				} catch (XmpSchemaException e) {
-					this.fContainer.push(new ValidationError(ERROR_METADATA_FORMAT, e.getMessage()));
-				} catch (XmpExpectedRdfAboutAttribute e) {
-					this.fContainer.push(new ValidationError(ERROR_METADATA_RDF_ABOUT_ATTRIBUTE_MISSING,e.getMessage()));
-				} catch (BadFieldValueException e) {
-					this.fContainer.push(new ValidationError(ERROR_METADATA_CATEGORY_PROPERTY_INVALID,e.getMessage()));
-				} catch (XmpXpacketEndException e) {
-					this.fContainer.push(new ValidationError(ERROR_METADATA_FORMAT_XPACKET, "Unable to parse font metadata due to : "  + e.getMessage()));
+					if (e.getErrorType()==ErrorType.NoValueType) {
+						this.fContainer.push(new ValidationError(ERROR_METADATA_UNKNOWN_VALUETYPE, e.getMessage()));
+					} else if (e.getErrorType()==ErrorType.XpacketBadEnd) {
+						this.fContainer.push(new ValidationError(ERROR_METADATA_FORMAT_XPACKET, "Unable to parse font metadata due to : "  + e.getMessage()));
+					} else {
+						this.fContainer.push(new ValidationError(ERROR_METADATA_FORMAT, e.getMessage()));
+					}
 				}
 			}
 		} catch (IllegalStateException e) {

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/PDFAIdentificationValidation.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/PDFAIdentificationValidation.java?rev=1402980&r1=1402979&r2=1402980&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/PDFAIdentificationValidation.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/PDFAIdentificationValidation.java Sun Oct 28 11:47:36 2012
@@ -32,6 +32,7 @@ import java.util.List;
 import org.apache.padaf.xmpbox.XMPMetadata;
 import org.apache.padaf.xmpbox.schema.PDFAIdentificationSchema;
 import org.apache.padaf.xmpbox.schema.XMPBasicSchema;
+import org.apache.padaf.xmpbox.type.StructuredType;
 import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
 import org.apache.pdfbox.preflight.exception.ValidationException;
 
@@ -62,13 +63,15 @@ public class PDFAIdentificationValidatio
     }
 
     // According to the PDF/A specification, the prefix must be pdfaid for this schema.
-    if (!id.getPrefix().equals(PDFAIdentificationSchema.IDPREFIX)) {
-      if (metadata.getSchema(PDFAIdentificationSchema.IDPREFIX, XMPBasicSchema.XMPBASICURI) == null) {
+    StructuredType stBasic = XMPBasicSchema.class.getAnnotation(StructuredType.class);
+    StructuredType stPdfaIdent = PDFAIdentificationSchema.class.getAnnotation(StructuredType.class);
+    if (!id.getPrefix().equals(stPdfaIdent.preferedPrefix())) {
+      if (metadata.getSchema(stPdfaIdent.preferedPrefix(), stBasic.namespace()) == null) {
         ve.add(unexpectedPrefixFoundError(id.getPrefix(),
-            PDFAIdentificationSchema.IDPREFIX, PDFAIdentificationSchema.class.getName()));
+                        stPdfaIdent.preferedPrefix(), PDFAIdentificationSchema.class.getName()));
       } else {
         id = (PDFAIdentificationSchema) metadata.getSchema(
-            PDFAIdentificationSchema.IDPREFIX, PDFAIdentificationSchema.IDURI);
+            stPdfaIdent.preferedPrefix(), stPdfaIdent.namespace());
       }
     }
     checkConformanceLevel(ve, id.getConformance());

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/RDFAboutAttributeConcordanceValidation.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/RDFAboutAttributeConcordanceValidation.java?rev=1402980&r1=1402979&r2=1402980&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/RDFAboutAttributeConcordanceValidation.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/RDFAboutAttributeConcordanceValidation.java Sun Oct 28 11:47:36 2012
@@ -27,8 +27,6 @@ import java.util.List;
 import org.apache.padaf.xmpbox.XMPMetadata;
 import org.apache.padaf.xmpbox.schema.XMPSchema;
 import org.apache.pdfbox.preflight.exception.ValidationException;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
 
 /**
  * Class which all elements within an rdf:RDF have the same value for their
@@ -55,35 +53,18 @@ public class RDFAboutAttributeConcordanc
           "Schemas not found in the given metadata representation");
     }
     String about = schemas.get(0).getAboutValue();
-    // rdf:description must have an about attribute, it has been checked during
-    // parsing
-    Element e;
+    // rdf:description must have an rdf:about attribute
     for (XMPSchema xmpSchema : schemas) {
-      e = xmpSchema.getElement();
-      checkRdfAbout(about, e);
+      checkRdfAbout(about, xmpSchema);
     }
 
   }
 
-  private void checkRdfAbout(String about, Element e)
+  private void checkRdfAbout(String about, XMPSchema xmpSchema)
       throws DifferentRDFAboutException {
-    // System.out.println(e.getTagName());
-    // TODO check if it need to test the 2 possibilities
-    if (!e.getAttribute("rdf:about").equals(about)) {
+    if (!about.equals(xmpSchema.getAboutValue())) {
       throw new DifferentRDFAboutException();
     }
-    if (!e.getAttribute("about").equals(about)) {
-      throw new DifferentRDFAboutException();
-    }
-    if (e.hasChildNodes()) {
-      NodeList children = e.getChildNodes();
-      int size = children.getLength();
-      for (int i = 0; i < size; i++) {
-        if (children.item(i) instanceof Element) {
-          checkRdfAbout(about, (Element) children.item(i));
-        }
-      }
-    }
   }
 
   public static class DifferentRDFAboutException extends Exception {

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java?rev=1402980&r1=1402979&r2=1402980&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/metadata/SynchronizedMetaDataValidation.java Sun Oct 28 11:47:36 2012
@@ -29,7 +29,7 @@ import java.util.List;
 
 
 import org.apache.padaf.xmpbox.XMPMetadata;
-import org.apache.padaf.xmpbox.parser.DateConverter;
+import org.apache.padaf.xmpbox.DateConverter;
 import org.apache.padaf.xmpbox.schema.AdobePDFSchema;
 import org.apache.padaf.xmpbox.schema.DublinCoreSchema;
 import org.apache.padaf.xmpbox.schema.XMPBasicSchema;

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java?rev=1402980&r1=1402979&r2=1402980&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java Sun Oct 28 11:47:36 2012
@@ -28,20 +28,9 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.padaf.xmpbox.XMPMetadata;
-import org.apache.padaf.xmpbox.parser.PDFAExtentionSchemaPreprocessor;
-import org.apache.padaf.xmpbox.parser.XMPDocumentBuilder;
-import org.apache.padaf.xmpbox.parser.XmpExpectedRdfAboutAttribute;
-import org.apache.padaf.xmpbox.parser.XmpParsingException;
-import org.apache.padaf.xmpbox.parser.XmpPropertyFormatException;
-import org.apache.padaf.xmpbox.parser.XmpRequiredPropertyException;
-import org.apache.padaf.xmpbox.parser.XmpSchemaException;
-import org.apache.padaf.xmpbox.parser.XmpUnexpectedNamespacePrefixException;
-import org.apache.padaf.xmpbox.parser.XmpUnexpectedNamespaceURIException;
-import org.apache.padaf.xmpbox.parser.XmpUnknownPropertyException;
-import org.apache.padaf.xmpbox.parser.XmpUnknownSchemaException;
-import org.apache.padaf.xmpbox.parser.XmpUnknownValueTypeException;
-import org.apache.padaf.xmpbox.parser.XmpXpacketEndException;
-import org.apache.padaf.xmpbox.type.BadFieldValueException;
+import org.apache.padaf.xmpbox.xml.DomXmpParser;
+import org.apache.padaf.xmpbox.xml.XmpParsingException;
+import org.apache.padaf.xmpbox.xml.XmpParsingException.ErrorType;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSDocument;
@@ -70,24 +59,11 @@ public class MetadataValidationProcess e
 			PDDocument document = ctx.getDocument();
 
 			byte[] tmp = getXpacket(document.getDocument());
-			XMPDocumentBuilder builder;
-			try {
-				builder = new XMPDocumentBuilder();
-				builder.addPreprocessor(new PDFAExtentionSchemaPreprocessor());
-			} catch (XmpSchemaException e1) {
-				throw new ValidationException(e1.getMessage(), e1);
-			}
+			DomXmpParser builder;
+			builder = new DomXmpParser();
 			XMPMetadata metadata;
-			try {
-				metadata = builder.parse(tmp);
-				ctx.setMetadata(metadata);
-			} catch (XmpSchemaException e) {
-				throw new ValidationException(
-						"Parser: Internal Problem (failed to instanciate Schema object)", e);
-			} catch (XmpXpacketEndException e) {
-				throw new ValidationException("Unable to parse font metadata due to : "
-						+ e.getMessage(), e);
-			}
+			metadata = builder.parse(tmp);
+			ctx.setMetadata(metadata);
 
 			// 6.7.5 no deprecated attribute in xpacket processing instruction
 			if (metadata.getXpacketBytes() != null) {
@@ -125,42 +101,36 @@ public class MetadataValidationProcess e
 				addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_MAIN,
 						"Unexpected error"));
 			}
-		} catch (XmpPropertyFormatException e) {
-			addValidationError(ctx, new ValidationError(
-					PreflightConstants.ERROR_METADATA_PROPERTY_FORMAT, e.getMessage()));
-		} catch (BadFieldValueException e) {
-			addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_CATEGORY_PROPERTY_INVALID ,e.getMessage()));
-		}
-		catch (XmpExpectedRdfAboutAttribute e) {
-			addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_RDF_ABOUT_ATTRIBUTE_MISSING ,e.getMessage()));
-		} catch (XmpUnknownPropertyException e) {
-			addValidationError(ctx, new ValidationError(
-					PreflightConstants.ERROR_METADATA_PROPERTY_UNKNOWN, e.getMessage()));
-		} catch (XmpUnknownSchemaException e) {
-			addValidationError(ctx, new ValidationError(
-					PreflightConstants.ERROR_METADATA_ABSENT_DESCRIPTION_SCHEMA, e
-					.getMessage()));
-		} catch (XmpUnexpectedNamespaceURIException e) {
-			addValidationError(ctx, new ValidationError(
-					PreflightConstants.ERROR_METADATA_WRONG_NS_URI, e.getMessage()));
-		} catch (XmpUnexpectedNamespacePrefixException e) {
-			addValidationError(ctx, new ValidationError(
-					PreflightConstants.ERROR_METADATA_ABSENT_DESCRIPTION_SCHEMA, e
-					.getMessage()));
-		} catch (XmpRequiredPropertyException e) {
-			addValidationError(ctx, new ValidationError(
-					PreflightConstants.ERROR_METADATA_PROPERTY_MISSING, e.getMessage()));
-		} catch (XmpUnknownValueTypeException e) {
-			addValidationError(ctx, new ValidationError(
-					PreflightConstants.ERROR_METADATA_UNKNOWN_VALUETYPE, e
-					.getMessage()));
 		} catch (XmpParsingException e) {
-			
-			addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_FORMAT, e
-					.getMessage()));
-		}
-
-		catch (IOException e) {
+			if (e.getErrorType()==ErrorType.NoValueType) {
+				addValidationError(ctx, new ValidationError(
+						PreflightConstants.ERROR_METADATA_UNKNOWN_VALUETYPE, e
+						.getMessage()));
+			} else if (e.getErrorType()==ErrorType.RequiredProperty) {
+				addValidationError(ctx, new ValidationError(
+						PreflightConstants.ERROR_METADATA_PROPERTY_MISSING, e.getMessage()));
+			} else if (e.getErrorType()==ErrorType.InvalidPrefix) {
+				addValidationError(ctx, new ValidationError(
+						PreflightConstants.ERROR_METADATA_ABSENT_DESCRIPTION_SCHEMA, e
+						.getMessage()));
+			} else if (e.getErrorType()==ErrorType.InvalidType) {
+				addValidationError(ctx, new ValidationError(
+						PreflightConstants.ERROR_METADATA_PROPERTY_UNKNOWN, e.getMessage()));
+			} else if (e.getErrorType()==ErrorType.XpacketBadEnd) {
+				throw new ValidationException("Unable to parse font metadata due to : "
+						+ e.getMessage(), e);
+			} else if (e.getErrorType()==ErrorType.NoSchema) {
+				addValidationError(ctx, new ValidationError(
+						PreflightConstants.ERROR_METADATA_ABSENT_DESCRIPTION_SCHEMA, e
+						.getMessage()));
+			} else if (e.getErrorType()==ErrorType.InvalidPdfaSchema) {
+				addValidationError(ctx, new ValidationError(
+						PreflightConstants.ERROR_METADATA_WRONG_NS_URI, e.getMessage()));
+			} else {
+				addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_FORMAT, e
+						.getMessage()));
+			}
+		} catch (IOException e) {
 			throw new ValidationException("Failed while validating", e);
 		}
 	}