You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2019/10/12 22:15:24 UTC

svn commit: r1868375 - in /pdfbox/branches/2.0/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java test/java/org/apache/pdfbox/pdmodel/common/COSArrayListTest.java

Author: msahyoun
Date: Sat Oct 12 22:15:24 2019
New Revision: 1868375

URL: http://svn.apache.org/viewvc?rev=1868375&view=rev
Log:
PDFBOX-4669: fix removing when filtered by object; add test

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java
    pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/COSArrayListTest.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java?rev=1868375&r1=1868374&r2=1868375&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java Sat Oct 12 22:15:24 2019
@@ -204,8 +204,12 @@ public class COSArrayList<E> implements
         int index = actual.indexOf( o );
         if( index >= 0 )
         {
-            actual.remove( index );
-            array.remove( index );
+            Object removed = actual.remove( index );
+
+            if (removed instanceof COSObjectable) {
+                COSBase cosBase = ((COSObjectable) removed).getCOSObject();
+                retval = array.remove(cosBase);
+            }
         }
         else
         {

Modified: pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/COSArrayListTest.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/COSArrayListTest.java?rev=1868375&r1=1868374&r2=1868375&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/COSArrayListTest.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/COSArrayListTest.java Sat Oct 12 22:15:24 2019
@@ -194,7 +194,7 @@ public class COSArrayListTest {
     }
 
     @Test
-    public void removeFromFilteredListByIndex() throws Exception
+    public void removeFromFilteredListByObject() throws Exception
     {
         // retrieve all annotations from page but the link annotation
         // which is 2nd in list - see above setup
@@ -216,18 +216,16 @@ public class COSArrayListTest {
 
         // remove aCircle annotation
         int positionToRemove = 1;
-        PDAnnotation removedAnnot = cosArrayList.remove(positionToRemove);
-        assertTrue("We should have removed the circle annotation", removedAnnot.getSubtype().equals(PDAnnotationSquareCircle.SUB_TYPE_CIRCLE));
+        PDAnnotation toBeRemoved = cosArrayList.get(positionToRemove);
+        assertTrue("We should remove the circle annotation", toBeRemoved.getSubtype().equals(PDAnnotationSquareCircle.SUB_TYPE_CIRCLE));
+        cosArrayList.remove(toBeRemoved);
 
         assertTrue("List size shall be 2", cosArrayList.size() == 1);
         assertTrue("COSArray size shall be 2", underlyingCOSArray.size() == 2);
         assertTrue("Backed COSArray size shall be 2", cosArrayList.toList().size() == 2);
 
-        assertTrue("Removed annotation shall no longer appear in COSArrayList", cosArrayList.indexOf(removedAnnot) == -1);
-        
-        // TODO: fix removing an item if list is filtered and enable the following line in test
-        // assertTrue("Removed annotation shall no longer appear in underlying COSArray", underlyingCOSArray.indexOf(removedAnnot.getCOSObject()) == -1);
-        // assertTrue("Removed annotation shall no longer appear in backed COSArray", cosArrayList.toList().indexOf(removedAnnot.getCOSObject()) == -1);
-
+        assertTrue("Removed annotation shall no longer appear in COSArrayList", cosArrayList.indexOf(toBeRemoved) == -1);
+        assertTrue("Removed annotation shall no longer appear in underlying COSArray", underlyingCOSArray.indexOf(toBeRemoved.getCOSObject()) == -1);
+        assertTrue("Removed annotation shall no longer appear in backed COSArray", cosArrayList.toList().indexOf(toBeRemoved.getCOSObject()) == -1);
     }
 }
\ No newline at end of file