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:47:49 UTC
svn commit: r1868376 - 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:47:49 2019
New Revision: 1868376
URL: http://svn.apache.org/viewvc?rev=1868376&view=rev
Log:
PDFBOX-4669: fix removing when filtered by index; 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=1868376&r1=1868375&r2=1868376&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:47:49 2019
@@ -204,10 +204,10 @@ public class COSArrayList<E> implements
int index = actual.indexOf( o );
if( index >= 0 )
{
- Object removed = actual.remove( index );
+ retval = actual.remove( o );
- if (removed instanceof COSObjectable) {
- COSBase cosBase = ((COSObjectable) removed).getCOSObject();
+ if (o instanceof COSObjectable) {
+ COSBase cosBase = ((COSObjectable) o).getCOSObject();
retval = array.remove(cosBase);
}
}
@@ -607,8 +607,9 @@ public class COSArrayList<E> implements
@Override
public E remove(int index)
{
- array.remove( index );
- return actual.remove( index );
+ E toBeRemoved = actual.get(index);
+ boolean result = remove(toBeRemoved);
+ return result ? toBeRemoved : null;
}
/**
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=1868376&r1=1868375&r2=1868376&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:47:49 2019
@@ -194,6 +194,43 @@ public class COSArrayListTest {
}
@Test
+ public void removeFromFilteredListByIndex() throws Exception
+ {
+ // retrieve all annotations from page but the link annotation
+ // which is 2nd in list - see above setup
+ AnnotationFilter annotsFilter = new AnnotationFilter()
+ {
+ @Override
+ public boolean accept(PDAnnotation annotation)
+ {
+ return !(annotation instanceof PDAnnotationLink);
+ }
+ };
+
+ COSArrayList<PDAnnotation> cosArrayList = (COSArrayList<PDAnnotation>) pdPage.getAnnotations(annotsFilter);
+ COSArray underlyingCOSArray = pdPage.getCOSObject().getCOSArray(COSName.ANNOTS);
+
+ assertTrue("Filtered COSArrayList size shall be 2", cosArrayList.size() == 2);
+ assertTrue("Underlying COSArray shall have 3 entries", underlyingCOSArray.size() == 3);
+ assertTrue("Backed COSArray shall have 3 entries", cosArrayList.toList().size() == 3);
+
+ // remove aCircle annotation
+ int positionToRemove = 1;
+ PDAnnotation toBeRemoved = cosArrayList.get(positionToRemove);
+ assertTrue("We should remove the circle annotation", toBeRemoved.getSubtype().equals(PDAnnotationSquareCircle.SUB_TYPE_CIRCLE));
+ cosArrayList.remove(positionToRemove);
+
+ 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(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);
+ }
+
+
+ @Test
public void removeFromFilteredListByObject() throws Exception
{
// retrieve all annotations from page but the link annotation