Author: gbailleul
Date: Sun Jul 29 20:55:54 2012
New Revision: 1366951

URL: http://svn.apache.org/viewvc?rev=1366951&view=rev
Log:
PDFBOX-1368: structured type can now be read as rdf:Description or 
parseType=Resource

Modified:
    
pdfbox/trunk/xmpbox/src/main/java/org/apache/padaf/xmpbox/parser/StructuredPropertyParser.java
    
pdfbox/trunk/xmpbox/src/test/java/org/apache/padaf/xmpbox/parser/DeserializationTest.java
    
pdfbox/trunk/xmpbox/src/test/resources/org/apache/padaf/xmpbox/parser/ThumbisartorStyle.xml

Modified: 
pdfbox/trunk/xmpbox/src/main/java/org/apache/padaf/xmpbox/parser/StructuredPropertyParser.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/padaf/xmpbox/parser/StructuredPropertyParser.java?rev=1366951&r1=1366950&r2=1366951&view=diff
==============================================================================
--- 
pdfbox/trunk/xmpbox/src/main/java/org/apache/padaf/xmpbox/parser/StructuredPropertyParser.java
 (original)
+++ 
pdfbox/trunk/xmpbox/src/main/java/org/apache/padaf/xmpbox/parser/StructuredPropertyParser.java
 Sun Jul 29 20:55:54 2012
@@ -44,14 +44,14 @@ import org.apache.padaf.xmpbox.type.Type
 public class StructuredPropertyParser {
 
        private XMPDocumentBuilder builder = null;
-       
+
        private Class<? extends AbstractStructuredType> typeClass = null;
 
        private Constructor<? extends AbstractStructuredType> typeConstructor = 
null;
 
        private Map<String,PropertyDescription> propDesc = null;
 
-//     private static Class<?> [] propertyConstructorParams = new Class [] 
{XMPMetadata.class,String.class};
+       //      private static Class<?> [] propertyConstructorParams = new 
Class [] {XMPMetadata.class,String.class};
        private static Class<?> [] propertyConstructorParams = new Class [] 
{XMPMetadata.class};
 
        public StructuredPropertyParser(XMPDocumentBuilder builder,Class<? 
extends AbstractStructuredType> propertyTypeClass) 
@@ -66,7 +66,7 @@ public class StructuredPropertyParser {
                        if (field.getAnnotation(PropertyType.class)!=null) {
                                PropertyDescription pd = new 
PropertyDescription();
                                pd.propertyType = 
field.getAnnotation(PropertyType.class);
-//                             pd.fieldName = field.getName();
+                               //                              pd.fieldName = 
field.getName();
                                try {
                                        pd.propertyName = 
field.get(null).toString();
                                } catch (IllegalArgumentException e1) {
@@ -90,7 +90,7 @@ public class StructuredPropertyParser {
 
        private AbstractStructuredType instanciateProperty (XMPMetadata 
metadata) throws XmpParsingException {
                try {
-//                     return typeConstructor.newInstance(metadata,prefix);
+                       //                      return 
typeConstructor.newInstance(metadata,prefix);
                        return typeConstructor.newInstance(metadata);
                } catch (IllegalArgumentException e) {
                        throw new XmpParsingException("Failed to instanciate 
structured type : "+typeClass.getName(),e);
@@ -103,49 +103,46 @@ public class StructuredPropertyParser {
                }
        }
 
-       
-//     private String retrieveNamespacePrefix (XMLStreamReader reader, String 
namespace) {
-//             int na = reader.getNamespaceCount();
-//             for (int i=0; i < na; i++) {
-//                     if (reader.getNamespaceURI(i).equals(namespace)) {
-//                             return reader.getNamespacePrefix(i);
-//                     }
-//             }
-//             // no namespace for prefix
-//             return null;
-//     }
-//     
-//     private String getStructuredClassNamespace (Class<? extends 
AbstractStructuredType> clz) throws XmpUnexpectedTypeException {
-//             try {
-//                     return 
(String)typeClass.getField("ELEMENT_NS").get(null);
-//             } catch (IllegalArgumentException e) {
-//                     throw new XmpUnexpectedTypeException("Failed to find 
Structured type namespace ("+clz.getName()+")",e);
-//             } catch (SecurityException e) {
-//                     throw new XmpUnexpectedTypeException("Failed to find 
Structured type namespace ("+clz.getName()+")",e);
-//             } catch (IllegalAccessException e) {
-//                     throw new XmpUnexpectedTypeException("Failed to find 
Structured type namespace ("+clz.getName()+")",e);
-//             } catch (NoSuchFieldException e) {
-//                     throw new XmpUnexpectedTypeException("Failed to find 
Structured type namespace ("+clz.getName()+")",e);
-//             }
-//             
-//     }
-       
-       
+
+
+       private boolean isParseTypeResource () {
+               XMLStreamReader reader = builder.getReader();
+               int count = reader.getAttributeCount();
+               for (int i=0; i < count ; i++) {
+                       if 
("parseType".equals(reader.getAttributeLocalName(i))) {
+                               if 
("Resource".equals(reader.getAttributeValue(i))) {
+                                       return true;
+                               } else {
+                                       return false;
+                               }
+                       }
+               }
+               return false;
+       }
+
        public void parse(XMPMetadata metadata, QName altName,
                        ComplexPropertyContainer container)
                                        throws XmpUnexpectedTypeException, 
XmpParsingException,
                                        XMLStreamException, 
XmpUnknownPropertyTypeException,
                                        XmpPropertyFormatException {
                builder.expectCurrentLocalName("li");
-               AbstractStructuredType property = instanciateProperty(metadata);
                XMLStreamReader reader = builder.getReader();
+               // check if parseType is defined
+               boolean skipDescription = isParseTypeResource();
+
                int elmtType = reader.nextTag();
-               // rdf:Description is mandatory
-               builder.expectCurrentLocalName("Description");
-               elmtType = reader.nextTag();
-               
+
+               if (!skipDescription) {
+                       // rdf:Description 
+                       builder.expectCurrentLocalName("Description");
+                       elmtType = reader.nextTag();
+               }
+               AbstractStructuredType property = instanciateProperty(metadata);
+
                QName eltName;
-               while (!((elmtType == XMLStreamReader.END_ELEMENT) && 
reader.getName().getLocalPart().equals("Description"))) {
+               String structuredEndName = skipDescription?"li":"Description";
+
+               while (!((elmtType == XMLStreamReader.END_ELEMENT) && 
reader.getName().getLocalPart().equals(structuredEndName))) {
                        // read element name, then text content
                        eltName = reader.getName();
                        String eltContent = reader.getElementText();
@@ -172,8 +169,10 @@ public class StructuredPropertyParser {
                        }
                        elmtType = reader.nextTag();
                }
-               // closing rdf:Description element
-               reader.nextTag();
+               if (!skipDescription) {
+                       // closing rdf:Description element
+                       reader.nextTag();
+               }
                container.addProperty(property);
 
        }
@@ -226,8 +225,8 @@ public class StructuredPropertyParser {
 
        protected class PropertyDescription {
 
-//             private String fieldName;
-//
+               //              private String fieldName;
+               //
                private String propertyName;
 
                private PropertyType propertyType;

Modified: 
pdfbox/trunk/xmpbox/src/test/java/org/apache/padaf/xmpbox/parser/DeserializationTest.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/java/org/apache/padaf/xmpbox/parser/DeserializationTest.java?rev=1366951&r1=1366950&r2=1366951&view=diff
==============================================================================
--- 
pdfbox/trunk/xmpbox/src/test/java/org/apache/padaf/xmpbox/parser/DeserializationTest.java
 (original)
+++ 
pdfbox/trunk/xmpbox/src/test/java/org/apache/padaf/xmpbox/parser/DeserializationTest.java
 Sun Jul 29 20:55:54 2012
@@ -195,14 +195,15 @@ public class DeserializationTest {
                List<ThumbnailType> thumbs = metadata.getXMPBasicSchema()
                                .getThumbnailsProperty();
                Assert.assertNotNull(thumbs);
-               Assert.assertEquals(1, thumbs.size());
+               Assert.assertEquals(2, thumbs.size());
+
                ThumbnailType thumb = thumbs.get(0);
-               /*
-                * <xapGImg:height>162</xapGImg:height>
-                * <xapGImg:width>216</xapGImg:width>
-                * <xapGImg:format>JPEG</xapGImg:format>
-                * <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD</xapGImg:image>
-                */
+               Assert.assertEquals(new Integer(162), thumb.getHeight());
+               Assert.assertEquals(new Integer(216), thumb.getWidth());
+               Assert.assertEquals("JPEG", thumb.getFormat());
+               Assert.assertEquals("/9j/4AAQSkZJRgABAgEASABIAAD", 
thumb.getImage());
+
+               thumb = thumbs.get(1);
                Assert.assertEquals(new Integer(162), thumb.getHeight());
                Assert.assertEquals(new Integer(216), thumb.getWidth());
                Assert.assertEquals("JPEG", thumb.getFormat());

Modified: 
pdfbox/trunk/xmpbox/src/test/resources/org/apache/padaf/xmpbox/parser/ThumbisartorStyle.xml
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/resources/org/apache/padaf/xmpbox/parser/ThumbisartorStyle.xml?rev=1366951&r1=1366950&r2=1366951&view=diff
==============================================================================
--- 
pdfbox/trunk/xmpbox/src/test/resources/org/apache/padaf/xmpbox/parser/ThumbisartorStyle.xml
 (original)
+++ 
pdfbox/trunk/xmpbox/src/test/resources/org/apache/padaf/xmpbox/parser/ThumbisartorStyle.xml
 Sun Jul 29 20:55:54 2012
@@ -24,6 +24,12 @@
                        <xmp:Thumbnails 
xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/";>
                                <rdf:Alt>
                                        <rdf:li rdf:parseType="Resource">
+                                                       
<xapGImg:height>162</xapGImg:height>
+                                                       
<xapGImg:width>216</xapGImg:width>
+                                                       
<xapGImg:format>JPEG</xapGImg:format>
+                                                       
<xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD</xapGImg:image>
+                                       </rdf:li>
+                                       <rdf:li>
                                                <rdf:Description>
                                                        
<xapGImg:height>162</xapGImg:height>
                                                        
<xapGImg:width>216</xapGImg:width>


Reply via email to