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
Scotts BDay
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/