You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2016/03/04 18:53:00 UTC

svn commit: r1733624 - in /pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type: AbstractComplexProperty.java ComplexPropertyContainer.java

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);
+        }
+    }
 }