You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by ni...@apache.org on 2006/06/27 13:42:30 UTC

svn commit: r417434 - in /jakarta/poi/trunk/src/scratchpad: src/org/apache/poi/hslf/record/ src/org/apache/poi/hslf/usermodel/ testcases/org/apache/poi/hslf/ testcases/org/apache/poi/hslf/usermodel/

Author: nick
Date: Tue Jun 27 04:42:29 2006
New Revision: 417434

URL: http://svn.apache.org/viewvc?rev=417434&view=rev
Log:
Update Document to offer the SlideListWithTexts by name, and change addSlide to add to the right SlideListWithText. (Based on a bug, the number I don't have to hand, doh\!)

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

Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Document.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Document.java?rev=417434&r1=417433&r2=417434&view=diff
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Document.java (original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/Document.java Tue Jun 27 04:42:29 2006
@@ -53,12 +53,35 @@
 	 *  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 @@
 			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 @@
 				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 @@
 	
 	/**
 	 * 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 @@
 		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;

Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java?rev=417434&r1=417433&r2=417434&view=diff
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java (original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java Tue Jun 27 04:42:29 2006
@@ -524,35 +524,33 @@
 	 * @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;
   				}
   			}
   		}

Modified: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/TestReWrite.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/TestReWrite.java?rev=417434&r1=417433&r2=417434&view=diff
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/TestReWrite.java (original)
+++ jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/TestReWrite.java Tue Jun 27 04:42:29 2006
@@ -56,9 +56,7 @@
 
     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 @@
 		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 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 @@
 		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]);
 		}
 	}

Modified: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java?rev=417434&r1=417433&r2=417434&view=diff
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java (original)
+++ jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestAddingSlides.java Tue Jun 27 04:42:29 2006
@@ -70,6 +70,9 @@
 		// 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 @@
 		
 		// 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 @@
 		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());
@@ -125,6 +134,9 @@
 		
 		// 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];



---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/