You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2009/06/19 15:24:41 UTC

svn commit: r786501 - in /poi/trunk/src: documentation/content/xdocs/ scratchpad/src/org/apache/poi/hslf/record/ scratchpad/src/org/apache/poi/hslf/usermodel/ scratchpad/testcases/org/apache/poi/hslf/data/ scratchpad/testcases/org/apache/poi/hslf/recor...

Author: yegor
Date: Fri Jun 19 13:24:41 2009
New Revision: 786501

URL: http://svn.apache.org/viewvc?rev=786501&view=rev
Log:
Fixed SlideShow#removeSlide to remove references to Notes, see Bugzilla #47261

Added:
    poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/47261.ppt   (with props)
Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Document.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/RecordContainer.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java
    poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/record/TestRecordContainer.java
    poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=786501&r1=786500&r2=786501&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Fri Jun 19 13:24:41 2009
@@ -33,6 +33,7 @@
 
     <changes>
         <release version="3.5-beta7" date="2009-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">47261 - Fixed SlideShow#removeSlide to remove references to Notes</action>
            <action dev="POI-DEVELOPERS" type="fix">47375 - Fixed HSSFHyperlink to correctly set inter-sheet and file links</action>
            <action dev="POI-DEVELOPERS" type="fix">47384 - Fixed ExternalNameRecord to handle unicode names</action>
            <action dev="POI-DEVELOPERS" type="fix">47372 - Fixed locale-sensitive unit tests to pass when running on non-US locale</action>

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Document.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Document.java?rev=786501&r1=786500&r2=786501&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Document.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Document.java Fri Jun 19 13:24:41 2009
@@ -21,6 +21,7 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.ArrayList;
 
 /**
  * Master container for Document. There is one of these for every
@@ -189,6 +190,16 @@
 		slwts = nl;
 	}
 
+    public void removeSlideListWithText(SlideListWithText slwt) {
+        ArrayList<SlideListWithText> lst = new ArrayList<SlideListWithText>();
+        for(SlideListWithText s : slwts) {
+            if(s != slwt) lst.add(s);
+            else {
+                removeChild(slwt);
+            }
+        }
+        slwts = lst.toArray(new SlideListWithText[lst.size()]);
+    }
 
 	/**
 	 * We are of type 1000

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/RecordContainer.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/RecordContainer.java?rev=786501&r1=786500&r2=786501&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/RecordContainer.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/RecordContainer.java Fri Jun 19 13:24:41 2009
@@ -24,6 +24,7 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
 
 /**
  * Abstract class which all container records will extend. Providers
@@ -135,7 +136,24 @@
 		return null;
 	}
 
-	/* ===============================================================
+    /**
+     * Remove a child record from this record container
+     *
+     * @param ch the child to remove
+     * @return the removed record
+     */
+    public Record removeChild(Record ch) {
+        Record rm = null;
+        ArrayList<Record> lst = new ArrayList<Record>();
+        for(Record r : _children) {
+            if(r != ch) lst.add(r);
+            else rm = r;
+        }
+        _children = lst.toArray(new Record[lst.size()]);
+        return rm;
+    }
+
+    /* ===============================================================
 	 *                   External Move Methods
 	 * ===============================================================
 	 */

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java?rev=786501&r1=786500&r2=786501&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java Fri Jun 19 13:24:41 2009
@@ -601,10 +601,39 @@
                 removedSlide = _slides[i];
             }
         }
-        slwt.setSlideAtomsSets( sa.toArray(new SlideAtomsSet[sa.size()]) );
-        slwt.setChildRecord(records.toArray(new Record[records.size()]));
+        if(sa.size() == 0){
+            _documentRecord.removeSlideListWithText(slwt);
+        } else {
+            slwt.setSlideAtomsSets( sa.toArray(new SlideAtomsSet[sa.size()]) );
+            slwt.setChildRecord(records.toArray(new Record[records.size()]));
+        }
         _slides = sl.toArray(new Slide[sl.size()]);
 
+        //if the removed slide had notes - remove references to them too
+        if(removedSlide != null){
+            int notesId = removedSlide.getSlideRecord().getSlideAtom().getNotesID();
+            if(notesId != 0){
+                SlideListWithText nslwt = _documentRecord.getNotesSlideListWithText();
+                records = new ArrayList<Record>();
+                ArrayList<SlideAtomsSet> na = new ArrayList<SlideAtomsSet>();
+                for (SlideAtomsSet ns : nslwt.getSlideAtomsSets()){
+                    if(ns.getSlidePersistAtom().getSlideIdentifier() != notesId) {
+                        na.add(ns);
+                        records.add(ns.getSlidePersistAtom());
+                        if(ns.getSlideRecords() != null) records.addAll(Arrays.asList(ns.getSlideRecords()));
+                    }
+                }
+                if(na.size() == 0){
+                    _documentRecord.removeSlideListWithText(nslwt);
+                } else {
+                    slwt.setSlideAtomsSets( na.toArray(new SlideAtomsSet[na.size()]) );
+                    slwt.setChildRecord(records.toArray(new Record[records.size()]));
+                }
+
+            }
+
+        }
+
         return removedSlide;
     }
 

Added: poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/47261.ppt
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/47261.ppt?rev=786501&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/47261.ppt
------------------------------------------------------------------------------
    svn:executable = *

Propchange: poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/47261.ppt
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/record/TestRecordContainer.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/record/TestRecordContainer.java?rev=786501&r1=786500&r2=786501&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/record/TestRecordContainer.java (original)
+++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/record/TestRecordContainer.java Fri Jun 19 13:24:41 2009
@@ -136,7 +136,14 @@
 		assertEquals(before, ncr[1]);
 	}
 
-	protected void setUp() throws Exception {
+    public void testRemove() {
+        Record[] ch = recordContainer.getChildRecords();
+        Record removeRecord = recordContainer.removeChild(ch[0]);
+        assertSame(ch[0], removeRecord);
+        assertEquals(ch.length-1, recordContainer.getChildRecords().length);
+    }
+
+    protected void setUp() throws Exception {
 		super.setUp();
 
 		// Find a real RecordContainer record

Modified: poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java?rev=786501&r1=786500&r2=786501&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java (original)
+++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java Fri Jun 19 13:24:41 2009
@@ -20,12 +20,15 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.File;
 
 import junit.framework.TestCase;
 import org.apache.poi.hslf.*;
 import org.apache.poi.hslf.record.Record;
 import org.apache.poi.hslf.record.RecordTypes;
 import org.apache.poi.hslf.record.UserEditAtom;
+import org.apache.poi.hslf.record.Document;
 import org.apache.poi.hslf.model.*;
 
 /**
@@ -269,4 +272,24 @@
         assertEquals(1, s3.length);
     }
 
+
+    public void test47261() throws Exception {
+        File src = new File(System.getProperty("HSLF.testdata.path"), "47261.ppt");
+        SlideShow ppt = new SlideShow(new FileInputStream(src));
+        Slide[] slides = ppt.getSlides();
+        Document doc = ppt.getDocumentRecord();
+        assertNotNull(doc.getSlideSlideListWithText());
+        assertEquals(1, ppt.getSlides().length);
+        int notesId = slides[0].getSlideRecord().getSlideAtom().getNotesID();
+        assertTrue(notesId > 0);
+        assertNotNull(doc.getNotesSlideListWithText());
+        //the SLWT container for notes has one entry which will deleted
+        assertEquals(1, doc.getNotesSlideListWithText().getSlideAtomsSets().length);
+
+        ppt.removeSlide(0);
+        assertEquals(0, ppt.getSlides().length);
+        assertNull(doc.getSlideSlideListWithText());
+        assertNull(doc.getNotesSlideListWithText());
+
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org