]> source.dussan.org Git - poi.git/commitdiff
Update Document to offer the SlideListWithTexts by name, and change addSlide to add...
authorNick Burch <nick@apache.org>
Tue, 27 Jun 2006 11:42:29 +0000 (11:42 +0000)
committerNick Burch <nick@apache.org>
Tue, 27 Jun 2006 11:42:29 +0000 (11:42 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@417434 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hslf/record/Document.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java
src/scratchpad/testcases/org/apache/poi/hslf/TestReWrite.java
src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java

index 74ec7ee593d9264fc6a6e76720fe692f644d42e4..31ed8901db674589edd942dafffd35925d1fce1c 100644 (file)
@@ -53,12 +53,35 @@ public class Document extends PositionDependentRecordContainer
         *  that contains information on pictures in the slides.
         */
        public PPDrawingGroup getPPDrawingGroup() { return ppDrawing; }
+       
        /**
         * Returns all the SlideListWithTexts that are defined for
         *  this Document. They hold the text, and some of the text
         *  properties, which are referred to by the slides.
+        * This will normally return an array of size 2 or 3
         */
        public SlideListWithText[] getSlideListWithTexts() { return slwts; }
+       /**
+        * Returns the SlideListWithText that deals with the
+        *  Master Slides 
+        */
+       public SlideListWithText getMasterSlideListWithText() { 
+               if(slwts.length > 0) { return slwts[0]; }
+               return null; }
+       /**
+        * Returns the SlideListWithText that deals with the
+        *  Slides, or null if there isn't one
+        */
+       public SlideListWithText getSlideSlideListWithText() { 
+               if(slwts.length > 1) { return slwts[1]; }
+               return null; }
+       /**
+        * Returns the SlideListWithText that deals with the
+        *  notes, or null if there isn't one
+        */
+       public SlideListWithText getNotesSlideListWithText() {
+               if(slwts.length > 2) { return slwts[2]; }
+               return null; }
 
 
        /** 
@@ -77,9 +100,10 @@ public class Document extends PositionDependentRecordContainer
                        throw new IllegalStateException("The first child of a Document must be a DocumentAtom");
                }
                documentAtom = (DocumentAtom)_children[0];
-               
+
                // Find how many SlideListWithTexts we have
-               // Also, grab the Environment record on our way past
+               // Also, grab the Environment and PPDrawing records
+               //  on our way past
                int slwtcount = 0;
                for(int i=1; i<_children.length; i++) {
                        if(_children[i] instanceof SlideListWithText) {
@@ -92,7 +116,18 @@ public class Document extends PositionDependentRecordContainer
                                ppDrawing = (PPDrawingGroup)_children[i];
                        }
                }
-               // Now grab them all
+               
+               // You should only every have 1, 2 or 3 SLWTs
+               //  (normally it's 2, or 3 if you have notes)
+               // Complain if it's not
+               if(slwtcount == 0) {
+                       System.err.println("No SlideListWithText's found - there should normally be at least one!");
+               }
+               if(slwtcount > 3) {
+                       System.err.println("Found " + slwtcount + " SlideListWithTexts - normally there should only be three!");
+               }
+               
+               // Now grab all the SLWTs
                slwts = new SlideListWithText[slwtcount];
                slwtcount = 0;
                for(int i=1; i<_children.length; i++) {
@@ -105,7 +140,7 @@ public class Document extends PositionDependentRecordContainer
        
        /**
         * Adds a new SlideListWithText record, at the appropriate 
-        *  point
+        *  point in the child records.
         */
        public void addSlideListWithText(SlideListWithText slwt) {
                // The new SlideListWithText should go in 
@@ -119,7 +154,8 @@ public class Document extends PositionDependentRecordContainer
                addChildBefore(slwt, endDoc);
                        
                // Updated our cached list of SlideListWithText records
-               SlideListWithText[] nl = new SlideListWithText[slwts.length + 1];
+               int newSize = slwts.length + 1;
+               SlideListWithText[] nl = new SlideListWithText[newSize];
                System.arraycopy(slwts, 0, nl, 0, slwts.length);
                nl[nl.length-1] = slwt;
                slwts = nl;
index cef58ffe0f5b7fd35623da352dbf324678bc7ae8..76fc447a3b361fc4b4095c48da539f2421101963 100644 (file)
@@ -524,35 +524,33 @@ public class SlideShow
         * @throws IOException
         */
        public Slide createSlide() throws IOException {
-               SlideListWithText[] slwts = _documentRecord.getSlideListWithTexts();
                SlideListWithText slist = null;
-               
-               if(slwts.length > 1) {
-                       // Just use the last one
-                       slist = slwts[slwts.length - 1];
-               } else {
+
+               // We need to add the records to the SLWT that deals
+               //  with Slides.
+               // Add it, if it doesn't exist
+               slist = _documentRecord.getSlideSlideListWithText();
+               if(slist == null) {
                        // Need to add a new one
                        slist = new SlideListWithText();
                        _documentRecord.addSlideListWithText(slist);
-                       slwts = _documentRecord.getSlideListWithTexts();
                }
 
                // Grab the SlidePersistAtom with the highest Slide Number.
                // (Will stay as null if no SlidePersistAtom exists yet in
                //  the slide, or only master slide's ones do)
                SlidePersistAtom prev = null;
-               for(int i=0; i<slwts.length; i++) {
-                       SlideAtomsSet[] sas = slwts[i].getSlideAtomsSets();
-                       for(int j=0; j<sas.length; j++) {
-                               SlidePersistAtom spa = sas[j].getSlidePersistAtom();
-                               if(spa.getSlideIdentifier() < 0) {
-                                       // This is for a master slide
-                               } else {
-                                       // Must be for a real slide
-                                       if(prev == null) { prev = spa; }
-                                       if(prev.getSlideIdentifier() < spa.getSlideIdentifier()) {
-                                               prev = spa;
-                                       }
+               SlideAtomsSet[] sas = slist.getSlideAtomsSets();
+               for(int j=0; j<sas.length; j++) {
+                       SlidePersistAtom spa = sas[j].getSlidePersistAtom();
+                       if(spa.getSlideIdentifier() < 0) {
+                               // This is for a master slide
+                               // Odd, since we only deal with the Slide SLWT
+                       } else {
+                               // Must be for a real slide
+                               if(prev == null) { prev = spa; }
+                               if(prev.getSlideIdentifier() < spa.getSlideIdentifier()) {
+                                       prev = spa;
                                }
                        }
                }
index f618c3c245ff96cf57ab73a8dde70dd5d59bce4c..97538ba2ea4959f1a3c4e5776cd1fbf09ecc7470 100644 (file)
@@ -56,9 +56,7 @@ public class TestReWrite extends TestCase {
 
     public void testWritesOutTheSame() throws Exception {
        assertWritesOutTheSame(hssA, pfsA);
-       
-       // Disabled until bug #39800 is fixed
-       //assertWritesOutTheSame(hssB, pfsB);
+       assertWritesOutTheSame(hssB, pfsB);
     }
     public void assertWritesOutTheSame(HSLFSlideShow hss, POIFSFileSystem pfs) throws Exception {
                // Write out to a byte array
@@ -82,7 +80,7 @@ public class TestReWrite extends TestCase {
                pfs.createDocumentInputStream("PowerPoint Document").read(_oData);
                npfs.createDocumentInputStream("PowerPoint Document").read(_nData);
                for(int i=0; i<_oData.length; i++) {
-                       System.out.println(i + "\t" + Integer.toHexString(i));
+                       //System.out.println(i + "\t" + Integer.toHexString(i));
                        assertEquals(_oData[i], _nData[i]);
                }
        }
@@ -94,7 +92,8 @@ public class TestReWrite extends TestCase {
     public void testSlideShowWritesOutTheSame() throws Exception {
        assertSlideShowWritesOutTheSame(hssA, pfsA);
        
-       // Disabled until bug #39800 is fixed
+       // Some bug in StyleTextPropAtom rewriting means this will fail
+       // We need to identify and fix that first
        //assertSlideShowWritesOutTheSame(hssB, pfsB);
     }
     public void assertSlideShowWritesOutTheSame(HSLFSlideShow hss, POIFSFileSystem pfs) throws Exception {
@@ -124,7 +123,8 @@ public class TestReWrite extends TestCase {
                pfs.createDocumentInputStream("PowerPoint Document").read(_oData);
                npfs.createDocumentInputStream("PowerPoint Document").read(_nData);
                for(int i=0; i<_oData.length; i++) {
-                       //System.out.println(i + "\t" + Integer.toHexString(i));
+                       if(_oData[i] != _nData[i])
+                               System.out.println(i + "\t" + Integer.toHexString(i));
                        assertEquals(_oData[i], _nData[i]);
                }
        }
index 8ebd67922b7d86fbe2ad91ba3dd17ec1073b940c..f7fde20d85f61b4e01a751fbfd235ee43e0300d0 100644 (file)
@@ -70,6 +70,9 @@ public class TestAddingSlides extends TestCase {
                // Doesn't have any slides
                assertEquals(0, ss_empty.getSlides().length);
                
+               // Should only have a master SLWT
+               assertEquals(1, ss_empty.getDocumentRecord().getSlideListWithTexts().length);
+               
                // Add one
                Slide slide = ss_empty.createSlide();
                assertEquals(1, ss_empty.getSlides().length);
@@ -87,6 +90,9 @@ public class TestAddingSlides extends TestCase {
                
                // Check it now has a slide
                assertEquals(1, ss_read.getSlides().length);
+
+               // Check it now has two SLWTs
+               assertEquals(2, ss_empty.getDocumentRecord().getSlideListWithTexts().length);
                
                // And check it's as expected
                slide = ss_read.getSlides()[0];
@@ -103,6 +109,9 @@ public class TestAddingSlides extends TestCase {
                assertEquals(1, ss_one.getSlides().length);
                Slide s1 = ss_one.getSlides()[0];
                
+               // Should have two SLTWs
+               assertEquals(2, ss_one.getDocumentRecord().getSlideListWithTexts().length);
+               
                // Check slide 1 is as expected
                assertEquals(256, s1._getSheetNumber());
                assertEquals(3, s1._getSheetRefId());
@@ -126,6 +135,9 @@ public class TestAddingSlides extends TestCase {
                // Check it now has two slides
                assertEquals(2, ss_read.getSlides().length);
                
+               // Should still have two SLTWs
+               assertEquals(2, ss_read.getDocumentRecord().getSlideListWithTexts().length);
+               
                // And check it's as expected
                s1 = ss_read.getSlides()[0];
                s2 = ss_read.getSlides()[1];