Author: tilman
Date: Fri Mar  4 17:53:00 2016
New Revision: 1733624

URL: http://svn.apache.org/viewvc?rev=1733624&view=rev
Log:
PDFBOX-3258: keep non-list properties unique

Modified:
    
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/AbstractComplexProperty.java
    
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/ComplexPropertyContainer.java

Modified: 
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/AbstractComplexProperty.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/AbstractComplexProperty.java?rev=1733624&r1=1733623&r2=1733624&view=diff
==============================================================================
--- 
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/AbstractComplexProperty.java
 (original)
+++ 
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/AbstractComplexProperty.java
 Fri Mar  4 17:53:00 2016
@@ -64,6 +64,16 @@ public abstract class AbstractComplexPro
      */
     public final void addProperty(AbstractField obj)
     {
+        // 
https://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/cs6/XMPSpecificationPart1.pdf
+        // "Each property name in an XMP packet shall be unique within that 
packet"
+        // "Multiple values are represented using an XMP array value"
+        // "The nested element’s element content shall consist of zero 
or more rdf:li elements, 
+        // one for each item in the array"
+        // thus delete existing elements of a property, except for arrays 
("li")
+        if (!(this instanceof ArrayProperty))
+        {
+            container.removePropertiesByName(obj.getPropertyName());
+        }
         container.addProperty(obj);
     }
 

Modified: 
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/ComplexPropertyContainer.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/ComplexPropertyContainer.java?rev=1733624&r1=1733623&r2=1733624&view=diff
==============================================================================
--- 
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/ComplexPropertyContainer.java
 (original)
+++ 
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/ComplexPropertyContainer.java
 Fri Mar  4 17:53:00 2016
@@ -194,4 +194,26 @@ public class ComplexPropertyContainer
             properties.remove(property);
         }
     }
+
+    /**
+     * Remove all properties with a specified LocalName.
+     * 
+     * @param localName The name for which to remove all.
+     */
+    public void removePropertiesByName(String localName)
+    {
+        if (properties.isEmpty())
+        {
+            return;
+        }
+        List<AbstractField> propList = getPropertiesByLocalName(localName);
+        if (propList == null)
+        {
+            return;
+        }
+        for (AbstractField field : propList)
+        {
+            properties.remove(field);
+        }
+    }
 }


Reply via email to