Author: nick
Date: Tue Jan  9 10:51:29 2007
New Revision: 494519

URL: http://svn.apache.org/viewvc?view=rev&rev=494519
Log:
Update with new knowledge of how this all works, from bug #41176

Modified:
    
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/SlideShow.java

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?view=diff&rev=494519&r1=494518&r2=494519
==============================================================================
--- 
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 Jan  9 10:51:29 2007
@@ -305,53 +305,36 @@
        //  we have to go and find their matching records
        // We always use the latest versions of these records, and use the
        //  SlideAtom/NotesAtom to match them with the StyleAtomSet 
-       //
-       // Some crazy documents don't have a master SlideListWithText, their
-       //  first one is the slide containing one, which makes things fun...
 
        SlideListWithText masterSLWT = 
_documentRecord.getMasterSlideListWithText();
        SlideListWithText slidesSLWT = 
_documentRecord.getSlideSlideListWithText();
        SlideListWithText notesSLWT  = 
_documentRecord.getNotesSlideListWithText();
-       
+
     // Find master slides
-       // Need to ensure they're really master slides, and we're not dealing
-       //  with a crazy document that doesn't have any master slides
+       // These can be MainMaster records, but oddly they can also be
+       //  Slides or Notes, and possibly even other odd stuff....
+       // About the only thing you can say is that the master details are in
+       //  the first SLWT.
     SlideAtomsSet[] masterSets = new SlideAtomsSet[0];
-    org.apache.poi.hslf.record.MainMaster[] masterRecords = null;
+    org.apache.poi.hslf.record.MainMaster[] mainMasterRecords = null;
     if (masterSLWT != null){
         masterSets = masterSLWT.getSlideAtomsSets();
 
-               // Are they Slides, Master Slides, or some broken mix?
-               int slideCount = 0;
-               int masterCount = 0;
+               // For now, we only care about the records which are MainMasters
+               // (In future, we might want to know about the other too)
+               ArrayList mmr = new ArrayList();
+
                for(int i=0; i<masterSets.length; i++) {
                        Record r = getCoreRecordForSAS(masterSets[i]);
                        if(r instanceof org.apache.poi.hslf.record.Slide) {
-                               slideCount++;
+                               // Slide master, skip
                        } else if(r instanceof 
org.apache.poi.hslf.record.MainMaster) {
-                               masterCount++;
-                       } else {
-                               throw new CorruptPowerPointFileException("The 
PowerPoint file had a broken first SlideListWithTexts. This should only contain 
either MainMasters, or Slides, but it contained a record of type " + 
r.getRecordType());
+                               mmr.add(r);
                        }
                }
 
-               if(slideCount > 0 && masterCount == 0) {
-                       // Actually the Slide SlideListWithTexts
-                       notesSLWT = slidesSLWT;
-                       slidesSLWT = masterSLWT;
-                       masterSLWT = null;
-               } else if(masterCount >= 0 && slideCount == 0) {
-                       // Is a normal, proper Masters SlideListWithTexts
-                       masterRecords = new 
org.apache.poi.hslf.record.MainMaster[masterSets.length];
-
-                       // Grab the Main Master records
-                       for(int i=0; i<masterRecords.length; i++) {
-                               masterRecords[i] = 
(org.apache.poi.hslf.record.MainMaster)getCoreRecordForSAS(masterSets[i]);
-                       }
-               } else {
-                       // Contains both Slides and Main Masters, is corrupt
-                               throw new CorruptPowerPointFileException("The 
PowerPoint file had a broken first SlideListWithTexts. This should only contain 
either MainMasters, or Slides, but it contained a mix of both (" + slideCount + 
" slides and " + masterCount + " masters)");
-               }
+               mainMasterRecords = new 
org.apache.poi.hslf.record.MainMaster[mmr.size()];
+               mmr.toArray(mainMasterRecords);
     }
 
 
@@ -412,11 +395,11 @@
        }
        
        // Finally, generate model objects for everything
-    _masters = new SlideMaster[masterRecords.length];
+    _masters = new SlideMaster[mainMasterRecords.length];
     for(int i=0; i<_masters.length; i++) {
         SlideAtomsSet sas = masterSets[i];
         int sheetNo = sas.getSlidePersistAtom().getSlideIdentifier();
-        _masters[i] = new SlideMaster(masterRecords[i], sheetNo);
+        _masters[i] = new SlideMaster(mainMasterRecords[i], sheetNo);
         _masters[i].setSlideShow(this);
     }
 



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

Reply via email to