Author: yegor
Date: Tue May 29 01:32:56 2007
New Revision: 542453

URL: http://svn.apache.org/viewvc?view=rev&rev=542453
Log:
fixed bug 38256: RuntimeException: Couldn't instantiate the class for type with 
id 0

Added:
    
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/data/38256.ppt   
(with props)
Modified:
    jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java
    
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java

Modified: 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java?view=diff&rev=542453&r1=542452&r2=542453
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java 
(original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java 
Tue May 29 01:32:56 2007
@@ -219,10 +219,41 @@
                // If you don't know about the type, play safe and skip over it 
(using
                //  its length to know where the next record will start)
                //
-               // For now, this work is handled by Record.findChildRecords
-       
-               _records = 
Record.findChildRecords(_docstream,0,_docstream.length);
+
+        _records = read(_docstream, (int)currentUser.getCurrentEditOffset());
        }
+
+    private Record[] read(byte[] docstream, int usrOffset){
+        ArrayList lst = new ArrayList();
+        while (usrOffset != 0){
+            UserEditAtom usr = (UserEditAtom) 
Record.buildRecordAtOffset(docstream, usrOffset);
+            lst.add(new Integer(usrOffset));
+            int psrOffset = usr.getPersistPointersOffset();
+
+            PersistPtrHolder ptr = 
(PersistPtrHolder)Record.buildRecordAtOffset(docstream, psrOffset);
+            lst.add(new Integer(psrOffset));
+            Hashtable entries = ptr.getSlideLocationsLookup();
+            for (Iterator it = entries.keySet().iterator(); it.hasNext(); ) {
+                Integer id = (Integer)it.next();
+                Integer offset = (Integer)entries.get(id);
+
+                lst.add(offset);
+            }
+
+            usrOffset = usr.getLastUserEditAtomOffset();
+        }
+        //sort found records by offset.
+        //(it is not necessary but SlideShow.findMostRecentCoreRecords() 
expects them sorted)
+        Object a[] = lst.toArray();
+        Arrays.sort(a);
+        Record[] rec = new Record[lst.size()];
+        for (int i = 0; i < a.length; i++) {
+            Integer offset = (Integer)a[i];
+            rec[i] = (Record)Record.buildRecordAtOffset(docstream, 
offset.intValue());
+        }
+
+        return rec;
+    }
 
        /**
         * Find the "Current User" stream, and load it 

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

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

Modified: 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java?view=diff&rev=542453&r1=542452&r2=542453
==============================================================================
--- 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java
 (original)
+++ 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java
 Tue May 29 01:32:56 2007
@@ -269,4 +269,33 @@
 
     }
 
+    /**
+     * Bug 38256:  RuntimeException: Couldn't instantiate the class for type 
with id 0.
+     * ( also fixed followup: getTextRuns() returns no text )
+     */
+    public void test38256 () throws Exception {
+        FileInputStream is = new FileInputStream(new File(cwd, "38256.ppt"));
+        SlideShow ppt = new SlideShow(is);
+        is.close();
+
+        assertTrue("No Exceptions while reading file", true);
+
+        Slide[] slide = ppt.getSlides();
+        assertEquals(1, slide.length);
+        TextRun[] runs = slide[0].getTextRuns();
+        assertEquals(4, runs.length);
+
+        HashSet txt = new HashSet();
+        txt.add("“HAPPY BIRTHDAY SCOTT”");
+        txt.add("Have a HAPPY DAY");
+        txt.add("PS Nobody is allowed to hassle Scott TODAY…");
+        txt.add("Drinks will be in the Boardroom at 5pm today to celebrate 
Scott’s B’Day…  See you all there!");
+
+        for (int i = 0; i < runs.length; i++) {
+            String text = runs[i].getRawText();
+            assertTrue(txt.contains(text));
+        }
+
+    }
+
 }



---------------------------------------------------------------------
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