pdfbox-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gbaill...@apache.org
Subject svn commit: r1379181 - in /pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox: XMPMetadata.java parser/XMPDocumentBuilder.java schema/NSMapping.java schema/SchemaMapping.java type/TypeMapping.java
Date Thu, 30 Aug 2012 21:58:28 GMT
Author: gbailleul
Date: Thu Aug 30 21:58:28 2012
New Revision: 1379181

URL: http://svn.apache.org/viewvc?rev=1379181&view=rev
Log:
PDFBOX-1343: reduced complexity in type handling helpers

Removed:
    pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/schema/NSMapping.java
    pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/schema/SchemaMapping.java
Modified:
    pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/XMPMetadata.java
    pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/parser/XMPDocumentBuilder.java
    pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/type/TypeMapping.java

Modified: pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/XMPMetadata.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/XMPMetadata.java?rev=1379181&r1=1379180&r2=1379181&view=diff
==============================================================================
--- pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/XMPMetadata.java
(original)
+++ pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/XMPMetadata.java
Thu Aug 30 21:58:28 2012
@@ -28,11 +28,9 @@ import java.util.Map;
 import org.apache.padaf.xmpbox.parser.CreateXMPMetadataException;
 import org.apache.padaf.xmpbox.schema.AdobePDFSchema;
 import org.apache.padaf.xmpbox.schema.DublinCoreSchema;
-import org.apache.padaf.xmpbox.schema.NSMapping;
 import org.apache.padaf.xmpbox.schema.PDFAExtensionSchema;
 import org.apache.padaf.xmpbox.schema.PDFAIdentificationSchema;
 import org.apache.padaf.xmpbox.schema.PhotoshopSchema;
-import org.apache.padaf.xmpbox.schema.SchemaMapping;
 import org.apache.padaf.xmpbox.schema.XMPBasicJobTicketSchema;
 import org.apache.padaf.xmpbox.schema.XMPBasicSchema;
 import org.apache.padaf.xmpbox.schema.XMPMediaManagementSchema;
@@ -66,20 +64,14 @@ public class XMPMetadata {
 
 	private List<XMPSchema> schemas;
 
-
 	private TypeMapping typeMapping;
 
-	private NSMapping nsMapping;
-
-	private SchemaMapping schemaMapping;
-
 	/**
 	 * Contructor of an empty default XMPMetaData
 	 * 
 	 * @throws CreateXMPMetadataException
 	 *             If DOM Document associated could not be created
 	 */
-	// TODO GBL GBA make protected
 	protected XMPMetadata() {
 		this (
 				XmpConstants.DEFAULT_XPACKET_BEGIN,
@@ -108,8 +100,6 @@ public class XMPMetadata {
 			String xpacketBytes, String xpacketEncoding) {
 		this.schemas = new ArrayList<XMPSchema>();
 		this.typeMapping = new TypeMapping(this);
-		this.nsMapping = new NSMapping(this);
-		this.schemaMapping = new SchemaMapping(this);
 
 		this.xpacketBegin = xpacketBegin;
 		this.xpacketId = xpacketId;
@@ -130,18 +120,6 @@ public class XMPMetadata {
 		return this.typeMapping;
 	}
 
-	public NSMapping getNsMapping () {
-		return this.nsMapping;
-	}
-
-	public SchemaMapping getSchemaMapping () {
-		return this.schemaMapping;
-	}
-
-	public void setSchemaMapping (SchemaMapping sm) {
-		this.schemaMapping = sm;
-	}
-
 	/**
 	 * Get xpacketBytes
 	 * 

Modified: pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/parser/XMPDocumentBuilder.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/parser/XMPDocumentBuilder.java?rev=1379181&r1=1379180&r2=1379181&view=diff
==============================================================================
--- pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/parser/XMPDocumentBuilder.java
(original)
+++ pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/parser/XMPDocumentBuilder.java
Thu Aug 30 21:58:28 2012
@@ -40,7 +40,6 @@ import javax.xml.stream.XMLStreamReader;
 
 import org.apache.padaf.xmpbox.XMPMetadata;
 import org.apache.padaf.xmpbox.XmpConstants;
-import org.apache.padaf.xmpbox.schema.NSMapping;
 import org.apache.padaf.xmpbox.schema.PDFAExtensionSchema;
 import org.apache.padaf.xmpbox.schema.XMPSchema;
 import org.apache.padaf.xmpbox.schema.XMPSchemaFactory;
@@ -153,20 +152,6 @@ public class XMPDocumentBuilder {
 					"Did not find initial rdf:RDF");
 			expectName(XmpConstants.RDF_NAMESPACE, "RDF");
 
-			// TODO GBL GBA maybe not remove
-			metadata.getNsMapping().resetComplexBasicTypesDeclarationInEntireXMPLevel();
-			// add all namespaces which could declare nsURI of a basicValueType
-			// all others declarations are ignored
-			int nsCount = reader.get().getNamespaceCount();
-			// TODO MUTUALIZE namespace list loading
-			for (int i = 0; i < nsCount; i++) {
-				if (metadata.getTypeMapping().isStructuredTypeNamespace(reader.get().getNamespaceURI(i)))
{
-					metadata.getNsMapping().setComplexBasicTypesDeclarationForLevelXMP(
-							reader.get().getNamespaceURI(i), 
-							reader.get().getNamespacePrefix(i));
-				}
-			}
-
 			// now work on each rdf:Description
 			int type = reader.get().nextTag();
 			while (type == XMLStreamReader.START_ELEMENT) {
@@ -224,12 +209,12 @@ public class XMPDocumentBuilder {
 						String prefix = st.getPrefix();
 						ArrayProperty properties = st.getProperty();
 						ArrayProperty valueTypes = st.getValueType();
-						XMPSchemaFactory xsf = meta.getSchemaMapping().getSchemaFactory(namespaceUri);
+						XMPSchemaFactory xsf = meta.getTypeMapping().getSchemaFactory(namespaceUri);
 						// retrieve namespaces
 						if (xsf==null) {
 							// create namespace with no field
-							meta.getSchemaMapping().addNewNameSpace(namespaceUri,prefix);
-							xsf = meta.getSchemaMapping().getSchemaFactory(namespaceUri);
+							meta.getTypeMapping().addNewNameSpace(namespaceUri,prefix);
+							xsf = meta.getTypeMapping().getSchemaFactory(namespaceUri);
 						}
 						// populate value type
 						if (valueTypes!=null) {
@@ -598,8 +583,8 @@ public class XMPDocumentBuilder {
 	private boolean addAttributeAsProperty(XMPMetadata metadata, XMPSchema schema, Attribute
attr) {
 		boolean added = false;
 		String schemaNamespace = schema.getNamespace();
-		String prefix = /*attr.getPrefix() != null ? attr.getPrefix() :*/ schema.getPrefix();
-		String type = metadata.getNsMapping().getSpecifiedPropertyType(schemaNamespace, new QName(schemaNamespace,
attr.getLocalName()));
+		String prefix = schema.getPrefix();
+		String type = metadata.getTypeMapping().getSpecifiedPropertyType(schemaNamespace, new QName(schemaNamespace,
attr.getLocalName()));
 
 		if (type != null) {
 			AbstractSimpleProperty prop = metadata.getTypeMapping().instanciateSimpleProperty(null,
prefix, attr.getLocalName(), attr.getValue(), type);
@@ -634,30 +619,23 @@ public class XMPDocumentBuilder {
 			throws XmpParsingException, XMLStreamException, XmpSchemaException,
 			XmpUnknownValueTypeException, XmpExpectedRdfAboutAttribute,
 			BadFieldValueException {
-		NSMapping nsMap = metadata.getNsMapping();
-		nsMap.resetComplexBasicTypesDeclarationInSchemaLevel();
+		TypeMapping sm = metadata.getTypeMapping();
 		int cptNS = reader.get().getNamespaceCount();
 		HashMap<String, String> namespaces = new HashMap<String, String>();
-		// TODO MUTUALIZE namespace list loading
 		for (int i = 0; i < cptNS; i++) {
 			namespaces.put(reader.get().getNamespacePrefix(i), reader.get()
 					.getNamespaceURI(i));
-			if (metadata.getTypeMapping().isStructuredTypeNamespace(reader.get().getNamespaceURI(i)))
{
-				nsMap.setComplexBasicTypesDeclarationForLevelSchema(reader
-						.get().getNamespaceURI(i), reader.get()
-						.getNamespacePrefix(i));
-			}
 		}
 		int c = 0;
 		String namespaceUri = reader.get().getNamespaceURI(c);
 		String namespacePrefix = reader.get().getNamespacePrefix(c);
 		c++;
-		XMPSchema schema = nsMap.getAssociatedSchemaObject(metadata, namespaceUri, namespacePrefix);
+		XMPSchema schema = sm.getAssociatedSchemaObject(metadata, namespaceUri, namespacePrefix);
 		while (c<reader.get().getNamespaceCount() && schema==null) {
 			// try next
 			namespaceUri = reader.get().getNamespaceURI(c);
 			namespacePrefix = reader.get().getNamespacePrefix(c);
-			schema = nsMap.getAssociatedSchemaObject(metadata, namespaceUri, namespacePrefix);
+			schema = sm.getAssociatedSchemaObject(metadata, namespaceUri, namespacePrefix);
 			c++;
 		}
 
@@ -731,18 +709,18 @@ public class XMPDocumentBuilder {
 	 */
 	private String getPropertyDeclarationInNamespaces(XMPSchema schema,
 			QName prop) throws XmpParsingException {
-		NSMapping nsMap = schema.getMetadata().getNsMapping();
+		TypeMapping sm = schema.getMetadata().getTypeMapping();
 		Iterator<Entry<String, String>> it = schema.getAllNamespacesWithPrefix().entrySet().iterator();
 		String type;
 		StringBuilder unknownNS = new StringBuilder();
 		while (it.hasNext()) {
 			Entry<String,String> entry = it.next();
 			String namespace = entry.getKey();
-			if (!nsMap.isContainedNamespace(namespace)) {
+			if (!sm.isContainedNamespace(namespace)) {
 				unknownNS.append(" '").append(namespace).append("' ");
 				continue;
 			}
-			type = nsMap.getSpecifiedPropertyType(namespace, prop);
+			type = sm.getSpecifiedPropertyType(namespace, prop);
 			if (type != null) {
 				return type;
 			}
@@ -871,7 +849,7 @@ public class XMPDocumentBuilder {
 			XmpUnexpectedTypeException, XMLStreamException,
 			XmpUnknownPropertyTypeException {
 		XMPMetadata metadata = schema.getMetadata();
-		NSMapping nsMap = metadata.getNsMapping();
+//		NSMapping nsMap = metadata.getNsMapping();
 		TypeMapping typeMapping = metadata.getTypeMapping();
 		QName propertyName = reader.get().getName();
 		if (parsingExtension) {
@@ -882,16 +860,6 @@ public class XMPDocumentBuilder {
 				return;
 			}
 		}
-		nsMap.resetComplexBasicTypesDeclarationInPropertyLevel();
-		int cptNs = reader.get().getNamespaceCount();
-		// TODO MUTUALIZE namespace list loading
-		for (int i = 0; i < cptNs; i++) {
-			if (typeMapping.isStructuredTypeNamespace(reader.get().getNamespaceURI(i))) {
-				nsMap.setComplexBasicTypesDeclarationForLevelSchema(reader
-						.get().getNamespaceURI(i), reader.get()
-						.getNamespacePrefix(i));
-			}
-		}
 		String type = getPropertyDeclarationInNamespaces(schema, propertyName);
 		// found type, manage it
 		if (type.equals("Lang Alt")) {
@@ -909,10 +877,6 @@ public class XMPDocumentBuilder {
 			int pos = type.indexOf(' ');
 			String arrayType = typeMapping.getArrayType(type);
 			String typeInArray = type.substring(pos+1);
-//			if (typeMapping.is)
-//		TypeDescription<AbstractStructuredType> tclass = typeMapping.getTypeDescription(typeInArray);
-//			Class<? extends AbstractField> tcn = tclass.getTypeClass();
-
 			if (typeMapping.isSimpleType(typeInArray)) {
 				// array of simple
 				parseSimplePropertyArray(

Modified: pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/type/TypeMapping.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/type/TypeMapping.java?rev=1379181&r1=1379180&r2=1379181&view=diff
==============================================================================
--- pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/type/TypeMapping.java
(original)
+++ pdfbox/branches/xmpbox-refactoring/xmpbox/src/main/java/org/apache/padaf/xmpbox/type/TypeMapping.java
Thu Aug 30 21:58:28 2012
@@ -27,7 +27,21 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import javax.xml.namespace.QName;
+
 import org.apache.padaf.xmpbox.XMPMetadata;
+import org.apache.padaf.xmpbox.schema.AdobePDFSchema;
+import org.apache.padaf.xmpbox.schema.DublinCoreSchema;
+import org.apache.padaf.xmpbox.schema.PDFAExtensionSchema;
+import org.apache.padaf.xmpbox.schema.PDFAIdentificationSchema;
+import org.apache.padaf.xmpbox.schema.PhotoshopSchema;
+import org.apache.padaf.xmpbox.schema.XMPBasicJobTicketSchema;
+import org.apache.padaf.xmpbox.schema.XMPBasicSchema;
+import org.apache.padaf.xmpbox.schema.XMPMediaManagementSchema;
+import org.apache.padaf.xmpbox.schema.XMPRightsManagementSchema;
+import org.apache.padaf.xmpbox.schema.XMPSchema;
+import org.apache.padaf.xmpbox.schema.XMPSchemaFactory;
+import org.apache.padaf.xmpbox.schema.XmpSchemaException;
 import org.apache.padaf.xmpbox.type.TypeDescription.BasicType;
 
 public final class TypeMapping {
@@ -48,8 +62,13 @@ public final class TypeMapping {
 
 	private Map<String,TypeDescription<AbstractStructuredType>> STRUCTURED_NAMESPACES;
 	
+	private Map<String, String> schemaUriToPrefered;
+
 	private XMPMetadata metadata;
 
+	private Map<String, XMPSchemaFactory> schemaMap;
+
+
 	public TypeMapping(XMPMetadata metadata) {
 		this.metadata = metadata;
 		initialize();
@@ -105,6 +124,20 @@ public final class TypeMapping {
 		addToStructuredMaps(new TypeDescription<AbstractStructuredType>("PDFAProperty",null,PDFAPropertyType.class));
 		addToStructuredMaps(new TypeDescription<AbstractStructuredType>("PDFAType",null,PDFATypeType.class));
 		addToStructuredMaps(new TypeDescription<AbstractStructuredType>("PDFASchema",null,PDFASchemaType.class));
+		
+		// schema
+		schemaUriToPrefered = new HashMap<String, String>();
+		schemaMap = new HashMap<String, XMPSchemaFactory>();
+		addNameSpace("http://ns.adobe.com/xap/1.0/", XMPBasicSchema.class);
+		addNameSpace(DublinCoreSchema.DCURI, DublinCoreSchema.class);
+		addNameSpace("http://www.aiim.org/pdfa/ns/extension/", PDFAExtensionSchema.class);
+		addNameSpace("http://ns.adobe.com/xap/1.0/mm/", XMPMediaManagementSchema.class);
+		addNameSpace("http://ns.adobe.com/pdf/1.3/", AdobePDFSchema.class);
+		addNameSpace("http://www.aiim.org/pdfa/ns/id/", PDFAIdentificationSchema.class);
+		addNameSpace("http://ns.adobe.com/xap/1.0/rights/",     XMPRightsManagementSchema.class);
+		addNameSpace(PhotoshopSchema.PHOTOSHOPURI,      PhotoshopSchema.class);
+		addNameSpace(XMPBasicJobTicketSchema.JOB_TICKET_URI,XMPBasicJobTicketSchema.class);
+
 	}
 
 	private void addToBasicMaps (TypeDescription<AbstractSimpleProperty> td) {
@@ -336,4 +369,88 @@ public final class TypeMapping {
 		return propMap;
 	}
 
+	private void addNameSpace(String ns, Class<? extends XMPSchema> classSchem) {
+		schemaMap.put(ns, new XMPSchemaFactory(ns, classSchem,	ReflectHelper.initializePropMapping(ns,
classSchem)));
+		try {
+			schemaUriToPrefered.put(ns, classSchem.getField("PREFERED_PREFIX").get(null).toString());
+		} catch (IllegalArgumentException e) {
+			throw new IllegalArgumentException("Failed to init '"+ns+"'", e);
+		} catch (SecurityException e) {
+			throw new IllegalArgumentException("Failed to init '"+ns+"'", e);
+		} catch (IllegalAccessException e) {
+			throw new IllegalArgumentException("Failed to init '"+ns+"'", e);
+		} catch (NoSuchFieldException e) {
+			throw new IllegalArgumentException("Failed to init '"+ns+"'", e);
+		}
+	}
+
+	public void addNewNameSpace(String ns,String prefered) {
+		PropMapping mapping = new PropMapping(ns);
+		schemaMap.put(ns, new XMPSchemaFactory(ns, XMPSchema.class, mapping));
+		schemaUriToPrefered.put(ns, prefered);
+	}
+
+	/**
+	 * Return the specialized schema class representation if it's known (create
+	 * and add it to metadata). In other cases, return null
+	 * 
+	 * @param metadata
+	 *            Metadata to link the new schema
+	 * @param namespace
+	 *            The namespace URI
+	 * @return Schema representation
+	 * @throws XmpSchemaException
+	 *             When Instancing specified Object Schema failed
+	 */
+	public XMPSchema getAssociatedSchemaObject(XMPMetadata metadata, String namespace, String
prefix) throws XmpSchemaException {
+		if (schemaMap.containsKey(namespace)) {
+			XMPSchemaFactory factory = schemaMap.get(namespace);
+			return factory.createXMPSchema(metadata, prefix);
+		} else {
+			XMPSchemaFactory factory = getSchemaFactory(namespace);
+			return factory!=null?factory.createXMPSchema(metadata, prefix):null;
+		}
+	}
+
+	public XMPSchemaFactory getSchemaFactory(String namespace) {
+		return schemaMap.get(namespace);
+	}
+
+	/**
+	 * Say if a specific namespace is known
+	 * 
+	 * @param namespace
+	 *            The namespace URI checked
+	 * @return True if namespace URI is known
+	 */
+	public boolean isContainedNamespace(String namespace) {
+		boolean found = schemaMap.containsKey(namespace);
+		if (!found) {
+			found = isStructuredTypeNamespace(namespace);
+		}
+		return found;
+	}
+
+	/**
+	 * Give type of specified property in specified schema (given by its
+	 * namespaceURI)
+	 * 
+	 * @param namespace
+	 *            The namespaceURI to explore
+	 * @param prop
+	 *            the property Qualified Name
+	 * @return Property type declared for namespace specified, null if unknown
+	 */
+	public String getSpecifiedPropertyType(String namespace, QName prop) {
+		XMPSchemaFactory factory =getSchemaFactory(namespace);
+		if (factory!=null) {
+			// found in schema
+			return factory.getPropertyType(prop.getLocalPart());
+		} else {
+			TypeDescription<AbstractStructuredType> td = getStructuredTypeName(prop.getPrefix());
+			return td==null?null:td.getType();
+		}
+	}
+
+	
 }



Mime
View raw message