JDK 1.4 compatibility. Some exception clean-up

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@683699 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Josh Micich 2008-08-07 20:23:26 +00:00
parent ca28a95c89
commit 5eaf4faae0
7 changed files with 114 additions and 151 deletions

View File

@ -1,4 +1,3 @@
/* ==================================================================== /* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with contributor license agreements. See the NOTICE file distributed with
@ -16,8 +15,6 @@
limitations under the License. limitations under the License.
==================================================================== */ ==================================================================== */
package org.apache.poi.hslf; package org.apache.poi.hslf;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@ -27,7 +24,12 @@ import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.POIDocument; import org.apache.poi.POIDocument;
import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException; import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException;
@ -36,7 +38,6 @@ import org.apache.poi.hslf.exceptions.HSLFException;
import org.apache.poi.hslf.record.*; import org.apache.poi.hslf.record.*;
import org.apache.poi.hslf.usermodel.ObjectData; import org.apache.poi.hslf.usermodel.ObjectData;
import org.apache.poi.hslf.usermodel.PictureData; import org.apache.poi.hslf.usermodel.PictureData;
import org.apache.poi.hslf.model.Shape;
import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.DocumentEntry; import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.DocumentInputStream; import org.apache.poi.poifs.filesystem.DocumentInputStream;
@ -51,14 +52,10 @@ import org.apache.poi.util.POILogger;
* *
* @author Nick Burch * @author Nick Burch
*/ */
public final class HSLFSlideShow extends POIDocument {
public class HSLFSlideShow extends POIDocument
{
// For logging // For logging
private POILogger logger = POILogFactory.getLogger(this.getClass()); private POILogger logger = POILogFactory.getLogger(this.getClass());
private InputStream istream;
// Holds metadata on where things are in our document // Holds metadata on where things are in our document
private CurrentUserAtom currentUser; private CurrentUserAtom currentUser;
@ -101,11 +98,9 @@ public class HSLFSlideShow extends POIDocument
* @param inputStream the source of the data * @param inputStream the source of the data
* @throws IOException if there is a problem while parsing the document. * @throws IOException if there is a problem while parsing the document.
*/ */
public HSLFSlideShow(InputStream inputStream) throws IOException public HSLFSlideShow(InputStream inputStream) throws IOException {
{
//do Ole stuff //do Ole stuff
this(new POIFSFileSystem(inputStream)); this(new POIFSFileSystem(inputStream));
istream = inputStream;
} }
/** /**
@ -160,29 +155,21 @@ public class HSLFSlideShow extends POIDocument
// Look for Picture Streams: // Look for Picture Streams:
readPictures(); readPictures();
} }
/** /**
* Constructs a new, empty, Powerpoint document. * Constructs a new, empty, Powerpoint document.
*/ */
public HSLFSlideShow() throws IOException public static final HSLFSlideShow create() {
{ InputStream is = HSLFSlideShow.class.getResourceAsStream("data/empty.ppt");
this(HSLFSlideShow.class.getResourceAsStream("/org/apache/poi/hslf/data/empty.ppt")); if (is == null) {
} throw new RuntimeException("Missing resource 'empty.ppt'");
}
/** try {
* Shuts things down. Closes underlying streams etc return new HSLFSlideShow(is);
* } catch (IOException e) {
* @throws IOException throw new RuntimeException(e);
*/
public void close() throws IOException
{
if(istream != null) {
istream.close();
} }
filesystem = null;
} }
/** /**
* Extracts the main PowerPoint document stream from the * Extracts the main PowerPoint document stream from the
* POI file, ready to be passed * POI file, ready to be passed

View File

@ -1,4 +1,3 @@
/* ==================================================================== /* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with contributor license agreements. See the NOTICE file distributed with
@ -16,18 +15,13 @@
limitations under the License. limitations under the License.
==================================================================== */ ==================================================================== */
package org.apache.poi.hslf.dev; package org.apache.poi.hslf.dev;
import java.util.*; import java.io.ByteArrayOutputStream;
import java.io.*; import java.io.IOException;
import org.apache.poi.ddf.*; import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.*; import org.apache.poi.hslf.record.Record;
import org.apache.poi.hslf.record.*;
import org.apache.poi.util.LittleEndian;
/** /**
* This class provides a way to view the contents of a powerpoint file. * This class provides a way to view the contents of a powerpoint file.
@ -36,9 +30,7 @@ import org.apache.poi.util.LittleEndian;
* *
* @author Nick Burch * @author Nick Burch
*/ */
public final class SlideShowRecordDumper {
public class SlideShowRecordDumper
{
private HSLFSlideShow doc; private HSLFSlideShow doc;
/** /**
@ -57,7 +49,6 @@ public class SlideShowRecordDumper
SlideShowRecordDumper foo = new SlideShowRecordDumper(filename); SlideShowRecordDumper foo = new SlideShowRecordDumper(filename);
foo.printDump(); foo.printDump();
foo.close();
} }
@ -73,19 +64,6 @@ public class SlideShowRecordDumper
doc = new HSLFSlideShow(fileName); doc = new HSLFSlideShow(fileName);
} }
/**
* Shuts things down. Closes underlying streams etc
*
* @throws IOException
*/
public void close() throws IOException
{
if(doc != null) {
doc.close();
}
doc = null;
}
public void printDump() throws IOException { public void printDump() throws IOException {
// Prints out the records in the tree // Prints out the records in the tree

View File

@ -1,4 +1,3 @@
/* ==================================================================== /* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with contributor license agreements. See the NOTICE file distributed with
@ -16,20 +15,22 @@
limitations under the License. limitations under the License.
==================================================================== */ ==================================================================== */
package org.apache.poi.hslf.extractor; package org.apache.poi.hslf.extractor;
import java.io.*; import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet; import java.util.HashSet;
import org.apache.poi.POIOLE2TextExtractor; import org.apache.poi.POIOLE2TextExtractor;
import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.Comment;
import org.apache.poi.hslf.model.HeadersFooters;
import org.apache.poi.hslf.model.Notes;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.hslf.*;
import org.apache.poi.hslf.model.*;
import org.apache.poi.hslf.record.Comment2000;
import org.apache.poi.hslf.record.Record;
import org.apache.poi.hslf.usermodel.*;
/** /**
* This class can be used to extract text from a PowerPoint file. * This class can be used to extract text from a PowerPoint file.
@ -37,9 +38,7 @@ import org.apache.poi.hslf.usermodel.*;
* *
* @author Nick Burch * @author Nick Burch
*/ */
public final class PowerPointExtractor extends POIOLE2TextExtractor {
public class PowerPointExtractor extends POIOLE2TextExtractor
{
private HSLFSlideShow _hslfshow; private HSLFSlideShow _hslfshow;
private SlideShow _show; private SlideShow _show;
private Slide[] _slides; private Slide[] _slides;
@ -74,7 +73,6 @@ public class PowerPointExtractor extends POIOLE2TextExtractor
PowerPointExtractor ppe = new PowerPointExtractor(file); PowerPointExtractor ppe = new PowerPointExtractor(file);
System.out.println(ppe.getText(true,notes,comments)); System.out.println(ppe.getText(true,notes,comments));
ppe.close();
} }
/** /**
@ -110,16 +108,6 @@ public class PowerPointExtractor extends POIOLE2TextExtractor
_slides = _show.getSlides(); _slides = _show.getSlides();
} }
/**
* Shuts down the underlying streams
*/
public void close() throws IOException {
_hslfshow.close();
_hslfshow = null;
_show = null;
_slides = null;
}
/** /**
* Should a call to getText() return slide text? * Should a call to getText() return slide text?
* Default is yes * Default is yes

View File

@ -1,4 +1,3 @@
/* ==================================================================== /* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with contributor license agreements. See the NOTICE file distributed with
@ -16,23 +15,52 @@
limitations under the License. limitations under the License.
==================================================================== */ ==================================================================== */
package org.apache.poi.hslf.usermodel; package org.apache.poi.hslf.usermodel;
import java.util.*;
import java.awt.Dimension; import java.awt.Dimension;
import java.io.*; import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
import org.apache.poi.ddf.*; import org.apache.poi.ddf.EscherBSERecord;
import org.apache.poi.hslf.*; import org.apache.poi.ddf.EscherContainerRecord;
import org.apache.poi.hslf.model.*; import org.apache.poi.ddf.EscherOptRecord;
import org.apache.poi.hslf.model.Notes; import org.apache.poi.ddf.EscherRecord;
import org.apache.poi.hslf.model.Slide; import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.record.SlideListWithText.*;
import org.apache.poi.hslf.record.*;
import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException; import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException;
import org.apache.poi.hslf.exceptions.HSLFException; import org.apache.poi.hslf.exceptions.HSLFException;
import org.apache.poi.hslf.model.HeadersFooters;
import org.apache.poi.hslf.model.Notes;
import org.apache.poi.hslf.model.PPFont;
import org.apache.poi.hslf.model.Picture;
import org.apache.poi.hslf.model.Shape;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.SlideMaster;
import org.apache.poi.hslf.model.TitleMaster;
import org.apache.poi.hslf.record.Document;
import org.apache.poi.hslf.record.DocumentAtom;
import org.apache.poi.hslf.record.FontCollection;
import org.apache.poi.hslf.record.FontEntityAtom;
import org.apache.poi.hslf.record.HeadersFootersContainer;
import org.apache.poi.hslf.record.ParentAwareRecord;
import org.apache.poi.hslf.record.PersistPtrHolder;
import org.apache.poi.hslf.record.PositionDependentRecord;
import org.apache.poi.hslf.record.PositionDependentRecordContainer;
import org.apache.poi.hslf.record.Record;
import org.apache.poi.hslf.record.RecordContainer;
import org.apache.poi.hslf.record.RecordTypes;
import org.apache.poi.hslf.record.SlideListWithText;
import org.apache.poi.hslf.record.SlidePersistAtom;
import org.apache.poi.hslf.record.UserEditAtom;
import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet;
import org.apache.poi.util.ArrayUtil; import org.apache.poi.util.ArrayUtil;
import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger; import org.apache.poi.util.POILogger;
@ -48,9 +76,7 @@ import org.apache.poi.util.POILogger;
* @author Nick Burch * @author Nick Burch
* @author Yegor kozlov * @author Yegor kozlov
*/ */
public final class SlideShow {
public class SlideShow
{
// What we're based on // What we're based on
private HSLFSlideShow _hslfSlideShow; private HSLFSlideShow _hslfSlideShow;
@ -90,8 +116,7 @@ public class SlideShow
* *
* @param hslfSlideShow the HSLFSlideShow to base on * @param hslfSlideShow the HSLFSlideShow to base on
*/ */
public SlideShow(HSLFSlideShow hslfSlideShow) throws IOException public SlideShow(HSLFSlideShow hslfSlideShow) {
{
// Get useful things from our base slideshow // Get useful things from our base slideshow
_hslfSlideShow = hslfSlideShow; _hslfSlideShow = hslfSlideShow;
_records = _hslfSlideShow.getRecords(); _records = _hslfSlideShow.getRecords();
@ -111,8 +136,8 @@ public class SlideShow
/** /**
* Constructs a new, empty, Powerpoint document. * Constructs a new, empty, Powerpoint document.
*/ */
public SlideShow() throws IOException { public SlideShow() {
this(new HSLFSlideShow()); this(HSLFSlideShow.create());
} }
/** /**

View File

@ -229,12 +229,12 @@ public class TextExtractor extends TestCase {
ppe = new PowerPointExtractor(filename); ppe = new PowerPointExtractor(filename);
String text = ppe.getText(); String text = ppe.getText();
assertFalse("Comments not in by default", text.contains("This is a test comment")); assertFalse("Comments not in by default", contains(text, "This is a test comment"));
ppe.setCommentsByDefault(true); ppe.setCommentsByDefault(true);
text = ppe.getText(); text = ppe.getText();
assertTrue("Unable to find expected word in text\n" + text, text.contains("This is a test comment")); assertTrue("Unable to find expected word in text\n" + text, contains(text, "This is a test comment"));
// And another file // And another file
@ -242,12 +242,12 @@ public class TextExtractor extends TestCase {
ppe = new PowerPointExtractor(filename); ppe = new PowerPointExtractor(filename);
text = ppe.getText(); text = ppe.getText();
assertFalse("Comments not in by default", text.contains("testdoc")); assertFalse("Comments not in by default", contains(text, "testdoc"));
ppe.setCommentsByDefault(true); ppe.setCommentsByDefault(true);
text = ppe.getText(); text = ppe.getText();
assertTrue("Unable to find expected word in text\n" + text, text.contains("testdoc")); assertTrue("Unable to find expected word in text\n" + text, contains(text, "testdoc"));
} }
/** /**
@ -266,13 +266,13 @@ public class TextExtractor extends TestCase {
ppe = new PowerPointExtractor(hslf); ppe = new PowerPointExtractor(hslf);
text = ppe.getText(); text = ppe.getText();
assertFalse("Unable to find expected word in text\n" + text, text.contains("testdoc")); assertFalse("Unable to find expected word in text\n" + text, contains(text, "testdoc"));
assertFalse("Unable to find expected word in text\n" + text, text.contains("test phrase")); assertFalse("Unable to find expected word in text\n" + text, contains(text, "test phrase"));
ppe.setNotesByDefault(true); ppe.setNotesByDefault(true);
text = ppe.getText(); text = ppe.getText();
assertTrue("Unable to find expected word in text\n" + text, text.contains("testdoc")); assertTrue("Unable to find expected word in text\n" + text, contains(text, "testdoc"));
assertTrue("Unable to find expected word in text\n" + text, text.contains("test phrase")); assertTrue("Unable to find expected word in text\n" + text, contains(text, "test phrase"));
// And with a footer, also on notes // And with a footer, also on notes
@ -285,12 +285,16 @@ public class TextExtractor extends TestCase {
ppe = new PowerPointExtractor(filename); ppe = new PowerPointExtractor(filename);
text = ppe.getText(); text = ppe.getText();
assertFalse("Unable to find expected word in text\n" + text, text.contains("testdoc")); assertFalse("Unable to find expected word in text\n" + text, contains(text, "testdoc"));
assertFalse("Unable to find expected word in text\n" + text, text.contains("test phrase")); assertFalse("Unable to find expected word in text\n" + text, contains(text, "test phrase"));
ppe.setNotesByDefault(true); ppe.setNotesByDefault(true);
text = ppe.getText(); text = ppe.getText();
assertTrue("Unable to find expected word in text\n" + text, text.contains("testdoc")); assertTrue("Unable to find expected word in text\n" + text, contains(text, "testdoc"));
assertTrue("Unable to find expected word in text\n" + text, text.contains("test phrase")); assertTrue("Unable to find expected word in text\n" + text, contains(text, "test phrase"));
} }
private static boolean contains(String text, String searchString) {
return text.indexOf(searchString) >=0;
}
} }

View File

@ -1,4 +1,3 @@
/* ==================================================================== /* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with contributor license agreements. See the NOTICE file distributed with
@ -16,57 +15,42 @@
limitations under the License. limitations under the License.
==================================================================== */ ==================================================================== */
package org.apache.poi.hslf.model; package org.apache.poi.hslf.model;
import java.io.*; import java.io.File;
import java.util.List; import java.io.FileInputStream;
import java.util.ArrayList;
import junit.framework.TestCase;
import org.apache.poi.hslf.HSLFSlideShow; import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.usermodel.ObjectData; import org.apache.poi.hslf.usermodel.ObjectData;
import org.apache.poi.hslf.usermodel.PictureData; import org.apache.poi.hslf.usermodel.PictureData;
import org.apache.poi.hslf.usermodel.SlideShow; import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Paragraph;
import junit.framework.TestCase; public final class TestOleEmbedding extends TestCase {
public class TestOleEmbedding extends TestCase
{
/** /**
* Tests support for OLE objects. * Tests support for OLE objects.
* *
* @throws Exception if an error occurs. * @throws Exception if an error occurs.
*/ */
public void testOleEmbedding2003() throws Exception public void testOleEmbedding2003() throws Exception {
{
String dirname = System.getProperty("HSLF.testdata.path"); String dirname = System.getProperty("HSLF.testdata.path");
File file = new File(dirname, "ole2-embedding-2003.ppt"); File file = new File(dirname, "ole2-embedding-2003.ppt");
HSLFSlideShow slideShow = new HSLFSlideShow(new FileInputStream(file)); HSLFSlideShow slideShow = new HSLFSlideShow(new FileInputStream(file));
try // Placeholder EMFs for clients that don't support the OLE components.
{ PictureData[] pictures = slideShow.getPictures();
// Placeholder EMFs for clients that don't support the OLE components. assertEquals("Should be two pictures", 2, pictures.length);
PictureData[] pictures = slideShow.getPictures(); //assertDigestEquals("Wrong data for picture 1", "8d1fbadf4814f321bb1ccdd056e3c788", pictures[0].getData());
assertEquals("Should be two pictures", 2, pictures.length); //assertDigestEquals("Wrong data for picture 2", "987a698e83559cf3d38a0deeba1cc63b", pictures[1].getData());
//assertDigestEquals("Wrong data for picture 1", "8d1fbadf4814f321bb1ccdd056e3c788", pictures[0].getData());
//assertDigestEquals("Wrong data for picture 2", "987a698e83559cf3d38a0deeba1cc63b", pictures[1].getData());
// Actual embedded objects. // Actual embedded objects.
ObjectData[] objects = slideShow.getEmbeddedObjects(); ObjectData[] objects = slideShow.getEmbeddedObjects();
assertEquals("Should be two objects", 2, objects.length); assertEquals("Should be two objects", 2, objects.length);
//assertDigestEquals("Wrong data for objecs 1", "0d1fcc61a83de5c4894dc0c88e9a019d", objects[0].getData()); //assertDigestEquals("Wrong data for objecs 1", "0d1fcc61a83de5c4894dc0c88e9a019d", objects[0].getData());
//assertDigestEquals("Wrong data for object 2", "b323604b2003a7299c77c2693b641495", objects[1].getData()); //assertDigestEquals("Wrong data for object 2", "b323604b2003a7299c77c2693b641495", objects[1].getData());
}
finally
{
slideShow.close();
}
} }
public void testOLEShape() throws Exception { public void testOLEShape() throws Exception {

View File

@ -1,4 +1,3 @@
/* ==================================================================== /* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with contributor license agreements. See the NOTICE file distributed with
@ -16,8 +15,6 @@
limitations under the License. limitations under the License.
==================================================================== */ ==================================================================== */
package org.apache.poi.hslf.usermodel; package org.apache.poi.hslf.usermodel;
@ -36,7 +33,7 @@ import org.apache.poi.hslf.model.*;
* *
* @author Nick Burch (nick at torchbox dot com) * @author Nick Burch (nick at torchbox dot com)
*/ */
public class TestAddingSlides extends TestCase { public final class TestAddingSlides extends TestCase {
// An empty SlideShow // An empty SlideShow
private HSLFSlideShow hss_empty; private HSLFSlideShow hss_empty;
private SlideShow ss_empty; private SlideShow ss_empty;
@ -53,7 +50,7 @@ public class TestAddingSlides extends TestCase {
* Create/open the slideshows * Create/open the slideshows
*/ */
public void setUp() throws Exception { public void setUp() throws Exception {
hss_empty = new HSLFSlideShow(); hss_empty = HSLFSlideShow.create();
ss_empty = new SlideShow(hss_empty); ss_empty = new SlideShow(hss_empty);
String dirname = System.getProperty("HSLF.testdata.path"); String dirname = System.getProperty("HSLF.testdata.path");
@ -82,8 +79,8 @@ public class TestAddingSlides extends TestCase {
Record[] _records = hss_empty.getRecords(); Record[] _records = hss_empty.getRecords();
for (int i = 0; i < _records.length; i++) { for (int i = 0; i < _records.length; i++) {
Record record = _records[i]; Record record = _records[i];
if(_records[i].getRecordType() == RecordTypes.UserEditAtom.typeID) { if(record.getRecordType() == RecordTypes.UserEditAtom.typeID) {
usredit = (UserEditAtom)_records[i]; usredit = (UserEditAtom)record;
} }
} }
assertNotNull(usredit); assertNotNull(usredit);