You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2008/04/11 17:52:25 UTC
svn commit: r647203 - in /poi/branches/ooxml: ./
src/documentation/content/xdocs/ src/java/org/apache/poi/
src/java/org/apache/poi/hssf/record/
src/java/org/apache/poi/hssf/usermodel/ src/java/org/apache/poi/poifs/dev/
src/java/org/apache/poi/poifs/fil...
Author: nick
Date: Fri Apr 11 08:52:17 2008
New Revision: 647203
URL: http://svn.apache.org/viewvc?rev=647203&view=rev
Log:
Merged revisions 638786-638802,638805-638811,638813-638814,638816-639230,639233-639241,639243-639253,639255-639486,639488-639601,639603-639835,639837-639917,639919-640056,640058-640710,640712-641156,641158-641184,641186-641795,641797-641798,641800-641933,641935-641963,641965-641966,641968-641995,641997-642230,642232-642562,642564-642565,642568-642570,642572-642573,642576-642736,642739-642877,642879,642881-642890,642892-642903,642905-642945,642947-643624,643626-643653,643655-643669,643671,643673-643830,643832-643833,643835-644342,644344-644472,644474-644508,644510-645347,645349-645351,645353-645559,645561-645565,645568-645951,645953-646193,646195-646311,646313-646404,646406-646665,646667-647199 via svnmerge from
https://svn.apache.org:443/repos/asf/poi/trunk
........
r646854 | nick | 2008-04-10 16:54:02 +0100 (Thu, 10 Apr 2008) | 1 line
Initial support for getting and changing chart titles and series titles
........
r646870 | nick | 2008-04-10 17:59:10 +0100 (Thu, 10 Apr 2008) | 1 line
Improve how POIFS works with directory entries, and update HWPFDocument to support reading an embeded word document
........
r647152 | nick | 2008-04-11 14:04:11 +0100 (Fri, 11 Apr 2008) | 1 line
Update the sample embeded documents to be from know sources, so we can test better
........
r647186 | nick | 2008-04-11 15:43:05 +0100 (Fri, 11 Apr 2008) | 1 line
Update HSLFSlideShow and HSSFWorkbook to take advantage of POIFS updates, and allow reading embeded documents
........
Added:
poi/branches/ooxml/src/java/org/apache/poi/poifs/dev/POIFSLister.java
- copied unchanged from r647186, poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSLister.java
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/ppt_with_embeded.ppt
- copied unchanged from r647186, poi/trunk/src/testcases/org/apache/poi/poifs/data/ppt_with_embeded.ppt
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/source-files/
- copied from r647186, poi/trunk/src/testcases/org/apache/poi/poifs/data/source-files/
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/source-files/sample1.doc
- copied unchanged from r647186, poi/trunk/src/testcases/org/apache/poi/poifs/data/source-files/sample1.doc
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/source-files/sample1.ppt
- copied unchanged from r647186, poi/trunk/src/testcases/org/apache/poi/poifs/data/source-files/sample1.ppt
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/source-files/sample1.xls
- copied unchanged from r647186, poi/trunk/src/testcases/org/apache/poi/poifs/data/source-files/sample1.xls
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/source-files/sample2.doc
- copied unchanged from r647186, poi/trunk/src/testcases/org/apache/poi/poifs/data/source-files/sample2.doc
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/source-files/sample2.ppt
- copied unchanged from r647186, poi/trunk/src/testcases/org/apache/poi/poifs/data/source-files/sample2.ppt
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/source-files/sample2.xls
- copied unchanged from r647186, poi/trunk/src/testcases/org/apache/poi/poifs/data/source-files/sample2.xls
Removed:
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/ppt_with_embeded.xls
Modified:
poi/branches/ooxml/ (props changed)
poi/branches/ooxml/build.xml
poi/branches/ooxml/src/documentation/content/xdocs/changes.xml
poi/branches/ooxml/src/documentation/content/xdocs/status.xml
poi/branches/ooxml/src/java/org/apache/poi/POIDocument.java
poi/branches/ooxml/src/java/org/apache/poi/hssf/record/DrawingRecordForBiffViewer.java
poi/branches/ooxml/src/java/org/apache/poi/hssf/record/RecordFactory.java
poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
poi/branches/ooxml/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
poi/branches/ooxml/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java
poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hdgf/HDGFDiagram.java
poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java
poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java
poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFChart.java
poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java
poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/extractor/TextExtractor.java
poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hssf/usermodel/TestHSSFChart.java
poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java
poi/branches/ooxml/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/excel_with_embeded.xls
poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/word_with_embeded.doc
Propchange: poi/branches/ooxml/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Apr 11 08:52:17 2008
@@ -1 +1 @@
-/poi/trunk:1-638784,638786-639486,639488-639601,639603-640056,640058-642562,642564-642566,642568-642574,642576-642736,642739-646820
+/poi/trunk:1-638784,638786-639486,639488-639601,639603-640056,640058-642562,642564-642566,642568-642574,642576-642736,642739-647199
Modified: poi/branches/ooxml/build.xml
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/build.xml?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/build.xml (original)
+++ poi/branches/ooxml/build.xml Fri Apr 11 08:52:17 2008
@@ -577,6 +577,8 @@
file="${main.src.test}/org/apache/poi/hwpf/data"/>
<sysproperty key="HPSF.testdata.path"
file="${main.src.test}/org/apache/poi/hpsf/data"/>
+ <sysproperty key="POIFS.testdata.path"
+ file="${main.src.test}/org/apache/poi/poifs/data"/>
<sysproperty key="java.awt.headless" value="true"/>
<formatter type="plain"/>
<formatter type="xml"/>
@@ -612,6 +614,8 @@
file="${main.src.test}/org/apache/poi/hpsf/data"/>
<sysproperty key="HWPF.testdata.path"
file="${scratchpad.src.test}/org/apache/poi/hwpf/data"/>
+ <sysproperty key="POIFS.testdata.path"
+ file="${main.src.test}/org/apache/poi/poifs/data"/>
<sysproperty key="java.awt.headless" value="true"/>
<formatter type="plain" usefile="no"/>
<batchtest todir="${main.reports.test}">
@@ -641,6 +645,7 @@
<sysproperty key="HWPF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hwpf/data"/>
<sysproperty key="HSMF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hsmf/data"/>
<sysproperty key="HDGF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hdgf/data"/>
+ <sysproperty key="POIFS.testdata.path" file="${main.src.test}/org/apache/poi/poifs/data"/>
<sysproperty key="java.awt.headless" value="true"/>
<formatter type="plain" usefile="no"/>
<formatter type="xml"/>
@@ -657,6 +662,7 @@
<classpath refid="test.classpath"/>
<sysproperty key="HSSF.testdata.path" file="${main.src.test}/org/apache/poi/hssf/data"/>
<sysproperty key="HPSF.testdata.path" file="${main.src.test}/org/apache/poi/hpsf/data"/>
+ <sysproperty key="POIFS.testdata.path" file="${main.src.test}/org/apache/poi/poifs/data"/>
<sysproperty key="java.awt.headless" value="true"/>
<formatter type="plain" usefile="no"/>
<test name="${testcase}"/>
@@ -695,6 +701,7 @@
<sysproperty key="HSLF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hslf/data"/>
<sysproperty key="HSMF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hsmf/data"/>
<sysproperty key="HDGF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hdgf/data"/>
+ <sysproperty key="POIFS.testdata.path" file="${main.src.test}/org/apache/poi/poifs/data"/>
<sysproperty key="java.awt.headless" value="true"/>
<formatter type="plain"/>
<formatter type="xml"/>
@@ -729,6 +736,7 @@
<sysproperty key="HSLF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hslf/data"/>
<sysproperty key="HSMF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hsmf/data"/>
<sysproperty key="HDGF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hdgf/data"/>
+ <sysproperty key="POIFS.testdata.path" file="${main.src.test}/org/apache/poi/poifs/data"/>
<sysproperty key="java.awt.headless" value="true"/>
<sysproperty key="java.awt.headless" value="true"/>
<formatter type="plain" usefile="no"/>
Modified: poi/branches/ooxml/src/documentation/content/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/documentation/content/xdocs/changes.xml?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/documentation/content/xdocs/changes.xml (original)
+++ poi/branches/ooxml/src/documentation/content/xdocs/changes.xml Fri Apr 11 08:52:17 2008
@@ -37,6 +37,10 @@
<!-- Don't forget to update status.xml too! -->
<release version="3.0.3-beta1" date="2008-04-??">
+ <action dev="POI-DEVELOPERS" type="add">Update HSLFSlideShow and HSSFWorkbook to take advantage of POIFS updates, and allow reading embeded documents</action>
+ <action dev="POI-DEVELOPERS" type="add">Improve how POIFS works with directory entries, and update HWPFDocument to support reading an embeded word document</action>
+ <action dev="POI-DEVELOPERS" type="add">Initial support for getting and changing chart and series titles</action>
+ <action dev="POI-DEVELOPERS" type="add">Implement a proxy HSSFListener which tracks the format records, and lets you lookup the format string for a given cell. Convert the xls to csv example to use it</action>
<action dev="POI-DEVELOPERS" type="fix">44792 - fixed encode/decode problems in ExternalNameRecord and CRNRecord.</action>
<action dev="POI-DEVELOPERS" type="fix">43670, 44501 - Fix how HDGF deals with trailing data in the list of chunk headers</action>
<action dev="POI-DEVELOPERS" type="add">30311 - More work on Conditional Formatting</action>
Modified: poi/branches/ooxml/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/documentation/content/xdocs/status.xml?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/documentation/content/xdocs/status.xml (original)
+++ poi/branches/ooxml/src/documentation/content/xdocs/status.xml Fri Apr 11 08:52:17 2008
@@ -34,6 +34,10 @@
<!-- Don't forget to update changes.xml too! -->
<changes>
<release version="3.0.3-beta1" date="2008-04-??">
+ <action dev="POI-DEVELOPERS" type="add">Update HSLFSlideShow and HSSFWorkbook to take advantage of POIFS updates, and allow reading embeded documents</action>
+ <action dev="POI-DEVELOPERS" type="add">Improve how POIFS works with directory entries, and update HWPFDocument to support reading an embeded word document</action>
+ <action dev="POI-DEVELOPERS" type="add">Initial support for getting and changing chart and series titles</action>
+ <action dev="POI-DEVELOPERS" type="add">Implement a proxy HSSFListener which tracks the format records, and lets you lookup the format string for a given cell. Convert the xls to csv example to use it</action>
<action dev="POI-DEVELOPERS" type="fix">44792 - fixed encode/decode problems in ExternalNameRecord and CRNRecord.</action>
<action dev="POI-DEVELOPERS" type="fix">43670, 44501 - Fix how HDGF deals with trailing data in the list of chunk headers</action>
<action dev="POI-DEVELOPERS" type="add">30311 - More work on Conditional Formatting</action>
Modified: poi/branches/ooxml/src/java/org/apache/poi/POIDocument.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/java/org/apache/poi/POIDocument.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/java/org/apache/poi/POIDocument.java (original)
+++ poi/branches/ooxml/src/java/org/apache/poi/POIDocument.java Fri Apr 11 08:52:17 2008
@@ -29,6 +29,7 @@
import org.apache.poi.hpsf.PropertySetFactory;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.poifs.filesystem.DirectoryEntry;
+import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.DocumentInputStream;
import org.apache.poi.poifs.filesystem.Entry;
@@ -50,12 +51,23 @@
protected DocumentSummaryInformation dsInf;
/** The open POIFS FileSystem that contains our document */
protected POIFSFileSystem filesystem;
+ /** The directory that our document lives in */
+ protected DirectoryNode directory;
/** For our own logging use */
protected POILogger logger = POILogFactory.getLogger(this.getClass());
/* Have the property streams been read yet? (Only done on-demand) */
protected boolean initialized = false;
+
+
+ protected POIDocument(DirectoryNode dir, POIFSFileSystem fs) {
+ this.filesystem = fs;
+ this.directory = dir;
+ }
+ protected POIDocument(POIFSFileSystem fs) {
+ this(fs.getRoot(), fs);
+ }
/**
* Fetch the Document Summary Information of the document
@@ -110,7 +122,7 @@
DocumentInputStream dis;
try {
// Find the entry, and get an input stream for it
- dis = filesystem.createDocumentInputStream(setName);
+ dis = directory.createDocumentInputStream(setName);
} catch(IOException ie) {
// Oh well, doesn't exist
logger.log(POILogger.WARN, "Error getting property set with name " + setName + "\n" + ie);
Modified: poi/branches/ooxml/src/java/org/apache/poi/hssf/record/DrawingRecordForBiffViewer.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/java/org/apache/poi/hssf/record/DrawingRecordForBiffViewer.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/java/org/apache/poi/hssf/record/DrawingRecordForBiffViewer.java (original)
+++ poi/branches/ooxml/src/java/org/apache/poi/hssf/record/DrawingRecordForBiffViewer.java Fri Apr 11 08:52:17 2008
@@ -17,6 +17,8 @@
package org.apache.poi.hssf.record;
+import java.io.ByteArrayInputStream;
+
/**
* This is purely for the biff viewer. During normal operations we don't want
* to be seeing this.
@@ -33,6 +35,21 @@
public DrawingRecordForBiffViewer( RecordInputStream in)
{
super(in);
+ }
+
+ public DrawingRecordForBiffViewer(DrawingRecord r)
+ {
+ super(convertToInputStream(r));
+ convertRawBytesToEscherRecords();
+ }
+ private static RecordInputStream convertToInputStream(DrawingRecord r)
+ {
+ byte[] data = r.serialize();
+ RecordInputStream rinp = new RecordInputStream(
+ new ByteArrayInputStream(data)
+ );
+ rinp.nextRecord();
+ return rinp;
}
protected String getRecordName()
Modified: poi/branches/ooxml/src/java/org/apache/poi/hssf/record/RecordFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/java/org/apache/poi/hssf/record/RecordFactory.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/java/org/apache/poi/hssf/record/RecordFactory.java (original)
+++ poi/branches/ooxml/src/java/org/apache/poi/hssf/record/RecordFactory.java Fri Apr 11 08:52:17 2008
@@ -77,6 +77,8 @@
NoteRecord.class, ObjectProtectRecord.class, ScenarioProtectRecord.class,
FileSharingRecord.class, ChartTitleFormatRecord.class,
DVRecord.class, DVALRecord.class, UncalcedRecord.class,
+ ChartRecord.class, LegendRecord.class, ChartTitleFormatRecord.class,
+ SeriesRecord.class, SeriesTextRecord.class,
HyperlinkRecord.class,
ExternalNameRecord.class, // TODO - same changes in non-@deprecated version of this class
SupBookRecord.class,
Modified: poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java (original)
+++ poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java Fri Apr 11 08:52:17 2008
@@ -1571,18 +1571,14 @@
}
/**
- * Returns the top-level drawing patriach, if there is
- * one.
- * This will hold any graphics or charts for the sheet.
+ * Returns the agregate escher records for this sheet,
+ * it there is one.
* WARNING - calling this will trigger a parsing of the
* associated escher records. Any that aren't supported
* (such as charts and complex drawing types) will almost
- * certainly be lost or corrupted when written out. Only
- * use this with simple drawings, otherwise call
- * {@link HSSFSheet#createDrawingPatriarch()} and
- * start from scratch!
+ * certainly be lost or corrupted when written out.
*/
- public HSSFPatriarch getDrawingPatriarch() {
+ public EscherAggregate getDrawingEscherAggregate() {
book.findDrawingGroup();
// If there's now no drawing manager, then there's
@@ -1601,6 +1597,25 @@
// Grab our aggregate record, and wire it up
EscherAggregate agg = (EscherAggregate) sheet.findFirstRecordBySid(EscherAggregate.sid);
+ return agg;
+ }
+
+ /**
+ * Returns the top-level drawing patriach, if there is
+ * one.
+ * This will hold any graphics or charts for the sheet.
+ * WARNING - calling this will trigger a parsing of the
+ * associated escher records. Any that aren't supported
+ * (such as charts and complex drawing types) will almost
+ * certainly be lost or corrupted when written out. Only
+ * use this with simple drawings, otherwise call
+ * {@link HSSFSheet#createDrawingPatriarch()} and
+ * start from scratch!
+ */
+ public HSSFPatriarch getDrawingPatriarch() {
+ EscherAggregate agg = getDrawingEscherAggregate();
+ if(agg == null) return null;
+
HSSFPatriarch patriarch = new HSSFPatriarch(this, agg);
agg.setPatriarch(patriarch);
Modified: poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java (original)
+++ poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java Fri Apr 11 08:52:17 2008
@@ -62,6 +62,7 @@
import org.apache.poi.hssf.record.formula.MemFuncPtg;
import org.apache.poi.hssf.record.formula.UnionPtg;
import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.util.POILogFactory;
@@ -155,6 +156,7 @@
protected HSSFWorkbook( Workbook book )
{
+ super(null, null);
workbook = book;
sheets = new ArrayList( INITIAL_CAPACITY );
names = new ArrayList( INITIAL_CAPACITY );
@@ -176,17 +178,37 @@
* @see org.apache.poi.poifs.filesystem.POIFSFileSystem
* @exception IOException if the stream cannot be read
*/
-
public HSSFWorkbook(POIFSFileSystem fs, boolean preserveNodes)
throws IOException
{
+ this(fs.getRoot(), fs, preserveNodes);
+ }
+
+ /**
+ * given a POI POIFSFileSystem object, and a specific directory
+ * within it, read in its Workbook and populate the high and
+ * low level models. If you're reading in a workbook...start here.
+ *
+ * @param directory the POI filesystem directory to process from
+ * @param fs the POI filesystem that contains the Workbook stream.
+ * @param preserveNodes whether to preseve other nodes, such as
+ * macros. This takes more memory, so only say yes if you
+ * need to. If set, will store all of the POIFSFileSystem
+ * in memory
+ * @see org.apache.poi.poifs.filesystem.POIFSFileSystem
+ * @exception IOException if the stream cannot be read
+ */
+ public HSSFWorkbook(DirectoryNode directory, POIFSFileSystem fs, boolean preserveNodes)
+ throws IOException
+ {
+ super(directory, fs);
this.preserveNodes = preserveNodes;
- this.filesystem = fs;
// If we're not preserving nodes, don't track the
// POIFS any more
if(! preserveNodes) {
this.filesystem = null;
+ this.directory = null;
}
sheets = new ArrayList(INITIAL_CAPACITY);
@@ -197,13 +219,13 @@
// put theirs in one called "WORKBOOK"
String workbookName = "Workbook";
try {
- fs.getRoot().getEntry(workbookName);
+ directory.getEntry(workbookName);
// Is the default name
} catch(FileNotFoundException fe) {
// Try the upper case form
try {
workbookName = "WORKBOOK";
- fs.getRoot().getEntry(workbookName);
+ directory.getEntry(workbookName);
} catch(FileNotFoundException wfe) {
// Doesn't contain it in either form
throw new IllegalArgumentException("The supplied POIFSFileSystem contained neither a 'Workbook' entry, nor a 'WORKBOOK' entry. Is it really an excel file?");
@@ -213,7 +235,7 @@
// Grab the data from the workbook stream, however
// it happens to be spelt.
- InputStream stream = fs.createDocumentInputStream(workbookName);
+ InputStream stream = directory.createDocumentInputStream(workbookName);
EventRecordFactory factory = new EventRecordFactory();
Modified: poi/branches/ooxml/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java (original)
+++ poi/branches/ooxml/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java Fri Apr 11 08:52:17 2008
@@ -105,6 +105,31 @@
{
return _path;
}
+
+ /**
+ * open a document in the directory's entry's list of entries
+ *
+ * @param documentName the name of the document to be opened
+ *
+ * @return a newly opened DocumentInputStream
+ *
+ * @exception IOException if the document does not exist or the
+ * name is that of a DirectoryEntry
+ */
+
+ public DocumentInputStream createDocumentInputStream(
+ final String documentName)
+ throws IOException
+ {
+ Entry document = getEntry(documentName);
+
+ if (!document.isDocumentEntry())
+ {
+ throw new IOException("Entry '" + documentName
+ + "' is not a DocumentEntry");
+ }
+ return new DocumentInputStream(( DocumentEntry ) document);
+ }
/**
* create a new DocumentEntry
Modified: poi/branches/ooxml/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java (original)
+++ poi/branches/ooxml/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java Fri Apr 11 08:52:17 2008
@@ -287,7 +287,7 @@
{
return getRoot().createDirectory(name);
}
-
+
/**
* Write the filesystem out
*
@@ -422,7 +422,7 @@
* @return the root entry
*/
- public DirectoryEntry getRoot()
+ public DirectoryNode getRoot()
{
if (_root == null)
{
@@ -446,14 +446,7 @@
final String documentName)
throws IOException
{
- Entry document = getRoot().getEntry(documentName);
-
- if (!document.isDocumentEntry())
- {
- throw new IOException("Entry '" + documentName
- + "' is not a DocumentEntry");
- }
- return new DocumentInputStream(( DocumentEntry ) document);
+ return getRoot().createDocumentInputStream(documentName);
}
/**
Modified: poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hdgf/HDGFDiagram.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hdgf/HDGFDiagram.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hdgf/HDGFDiagram.java (original)
+++ poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hdgf/HDGFDiagram.java Fri Apr 11 08:52:17 2008
@@ -53,7 +53,7 @@
private PointerFactory ptrFactory;
public HDGFDiagram(POIFSFileSystem fs) throws IOException {
- filesystem = fs;
+ super(fs);
DocumentEntry docProps =
(DocumentEntry)filesystem.getRoot().getEntry("VisioDocument");
Modified: poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java (original)
+++ poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java Fri Apr 11 08:52:17 2008
@@ -45,6 +45,7 @@
import org.apache.poi.hslf.record.UserEditAtom;
import org.apache.poi.hslf.usermodel.ObjectData;
import org.apache.poi.hslf.usermodel.PictureData;
+import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.DocumentInputStream;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
@@ -124,7 +125,21 @@
*/
public HSLFSlideShow(POIFSFileSystem filesystem) throws IOException
{
- this.filesystem = filesystem;
+ this(filesystem.getRoot(), filesystem);
+ }
+
+ /**
+ * Constructs a Powerpoint document from a specific point in a
+ * POIFS Filesystem. Parses the document and places all the
+ * important stuff into data structures.
+ *
+ * @param dir the POIFS directory to read from
+ * @param filesystem the POIFS FileSystem to read from
+ * @throws IOException if there is a problem while parsing the document.
+ */
+ public HSLFSlideShow(DirectoryNode dir, POIFSFileSystem filesystem) throws IOException
+ {
+ super(dir, filesystem);
// First up, grab the "Current User" stream
// We need this before we can detect Encrypted Documents
@@ -186,11 +201,11 @@
{
// Get the main document stream
DocumentEntry docProps =
- (DocumentEntry)filesystem.getRoot().getEntry("PowerPoint Document");
+ (DocumentEntry)directory.getEntry("PowerPoint Document");
// Grab the document stream
_docstream = new byte[docProps.getSize()];
- filesystem.createDocumentInputStream("PowerPoint Document").read(_docstream);
+ directory.createDocumentInputStream("PowerPoint Document").read(_docstream);
}
/**
@@ -272,7 +287,7 @@
*/
private void readCurrentUserStream() {
try {
- currentUser = new CurrentUserAtom(filesystem);
+ currentUser = new CurrentUserAtom(directory);
} catch(IOException ie) {
logger.log(POILogger.ERROR, "Error finding Current User Atom:\n" + ie);
currentUser = new CurrentUserAtom();
@@ -293,9 +308,9 @@
byte[] pictstream;
try {
- DocumentEntry entry = (DocumentEntry)filesystem.getRoot().getEntry("Pictures");
+ DocumentEntry entry = (DocumentEntry)directory.getEntry("Pictures");
pictstream = new byte[entry.getSize()];
- DocumentInputStream is = filesystem.createDocumentInputStream("Pictures");
+ DocumentInputStream is = directory.createDocumentInputStream("Pictures");
is.read(pictstream);
} catch (FileNotFoundException e){
// Silently catch exceptions if the presentation doesn't
Modified: poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java (original)
+++ poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java Fri Apr 11 08:52:17 2008
@@ -93,9 +93,15 @@
* Find the Current User in the filesystem, and create from that
*/
public CurrentUserAtom(POIFSFileSystem fs) throws IOException {
+ this(fs.getRoot());
+ }
+ /**
+ * Find the Current User in the filesystem, and create from that
+ */
+ public CurrentUserAtom(DirectoryNode dir) throws IOException {
// Decide how big it is
DocumentEntry docProps =
- (DocumentEntry)fs.getRoot().getEntry("Current User");
+ (DocumentEntry)dir.getEntry("Current User");
_contents = new byte[docProps.getSize()];
// Check it's big enough - if it's not at least 28 bytes long, then
@@ -105,7 +111,7 @@
}
// Grab the contents
- InputStream in = fs.createDocumentInputStream("Current User");
+ InputStream in = dir.createDocumentInputStream("Current User");
in.read(_contents);
// Set everything up
Modified: poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFChart.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFChart.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFChart.java (original)
+++ poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFChart.java Fri Apr 11 08:52:17 2008
@@ -19,14 +19,58 @@
package org.apache.poi.hssf.usermodel;
-import org.apache.poi.hssf.record.*;
-import org.apache.poi.hssf.record.formula.Area3DPtg;
-
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Stack;
+import org.apache.poi.hssf.record.AreaFormatRecord;
+import org.apache.poi.hssf.record.AxisLineFormatRecord;
+import org.apache.poi.hssf.record.AxisOptionsRecord;
+import org.apache.poi.hssf.record.AxisParentRecord;
+import org.apache.poi.hssf.record.AxisRecord;
+import org.apache.poi.hssf.record.AxisUsedRecord;
+import org.apache.poi.hssf.record.BOFRecord;
+import org.apache.poi.hssf.record.BarRecord;
+import org.apache.poi.hssf.record.BeginRecord;
+import org.apache.poi.hssf.record.CategorySeriesAxisRecord;
+import org.apache.poi.hssf.record.ChartFormatRecord;
+import org.apache.poi.hssf.record.ChartRecord;
+import org.apache.poi.hssf.record.ChartTitleFormatRecord;
+import org.apache.poi.hssf.record.DataFormatRecord;
+import org.apache.poi.hssf.record.DefaultDataLabelTextPropertiesRecord;
+import org.apache.poi.hssf.record.DimensionsRecord;
+import org.apache.poi.hssf.record.EOFRecord;
+import org.apache.poi.hssf.record.EndRecord;
+import org.apache.poi.hssf.record.FontBasisRecord;
+import org.apache.poi.hssf.record.FontIndexRecord;
+import org.apache.poi.hssf.record.FooterRecord;
+import org.apache.poi.hssf.record.FrameRecord;
+import org.apache.poi.hssf.record.HCenterRecord;
+import org.apache.poi.hssf.record.HeaderRecord;
+import org.apache.poi.hssf.record.LegendRecord;
+import org.apache.poi.hssf.record.LineFormatRecord;
+import org.apache.poi.hssf.record.LinkedDataFormulaField;
+import org.apache.poi.hssf.record.LinkedDataRecord;
+import org.apache.poi.hssf.record.PlotAreaRecord;
+import org.apache.poi.hssf.record.PlotGrowthRecord;
+import org.apache.poi.hssf.record.PrintSetupRecord;
+import org.apache.poi.hssf.record.ProtectRecord;
+import org.apache.poi.hssf.record.Record;
+import org.apache.poi.hssf.record.SCLRecord;
+import org.apache.poi.hssf.record.SeriesIndexRecord;
+import org.apache.poi.hssf.record.SeriesRecord;
+import org.apache.poi.hssf.record.SeriesTextRecord;
+import org.apache.poi.hssf.record.SeriesToChartGroupRecord;
+import org.apache.poi.hssf.record.SheetPropertiesRecord;
+import org.apache.poi.hssf.record.TextRecord;
+import org.apache.poi.hssf.record.TickRecord;
+import org.apache.poi.hssf.record.UnitsRecord;
+import org.apache.poi.hssf.record.UnknownRecord;
+import org.apache.poi.hssf.record.VCenterRecord;
+import org.apache.poi.hssf.record.ValueRangeRecord;
+import org.apache.poi.hssf.record.formula.Area3DPtg;
+
/**
* Has methods for construction of a chart object.
*
@@ -35,11 +79,13 @@
public class HSSFChart
{
private ChartRecord chartRecord;
- private SeriesRecord seriesRecord;
+ private LegendRecord legendRecord;
private ChartTitleFormatRecord chartTitleFormat;
private SeriesTextRecord chartTitleText;
+ private List series = new ArrayList();
+
private HSSFChart(ChartRecord chartRecord) {
this.chartRecord = chartRecord;
}
@@ -121,8 +167,8 @@
/**
* Returns all the charts for the given sheet.
*
- * NOTE: Does not yet work... checking it in just so others
- * can take a look.
+ * NOTE: You won't be able to do very much with
+ * these charts yet, as this is very limited support
*/
public static HSSFChart[] getSheetCharts(HSSFSheet sheet) {
List charts = new ArrayList();
@@ -132,33 +178,49 @@
List records = sheet.getSheet().getRecords();
for(Iterator it = records.iterator(); it.hasNext();) {
Record r = (Record)it.next();
- System.err.println(r);
-
- if(r instanceof DrawingRecord) {
- DrawingRecord dr = (DrawingRecord)r;
- }
if(r instanceof ChartRecord) {
lastChart = new HSSFChart((ChartRecord)r);
charts.add(lastChart);
}
+ if(r instanceof LegendRecord) {
+ lastChart.legendRecord = (LegendRecord)r;
+ }
if(r instanceof SeriesRecord) {
- lastChart.seriesRecord = (SeriesRecord)r;
+ HSSFSeries series = lastChart.new HSSFSeries( (SeriesRecord)r );
+ lastChart.series.add(series);
}
if(r instanceof ChartTitleFormatRecord) {
lastChart.chartTitleFormat =
(ChartTitleFormatRecord)r;
}
if(r instanceof SeriesTextRecord) {
- lastChart.chartTitleText =
- (SeriesTextRecord)r;
+ // Applies to a series, unless we've seen
+ // a legend already
+ SeriesTextRecord str = (SeriesTextRecord)r;
+ if(lastChart.legendRecord == null &&
+ lastChart.series.size() > 0) {
+ HSSFSeries series = (HSSFSeries)
+ lastChart.series.get(lastChart.series.size()-1);
+ series.seriesTitleText = str;
+ } else {
+ lastChart.chartTitleText = str;
+ }
}
}
return (HSSFChart[])
charts.toArray( new HSSFChart[charts.size()] );
}
+
+ /**
+ * Returns the series of the chart
+ */
+ public HSSFSeries[] getSeries() {
+ return (HSSFSeries[])
+ series.toArray(new HSSFSeries[series.size()]);
+ }
/**
* Returns the chart's title, if there is one,
@@ -184,7 +246,6 @@
}
}
-
private EOFRecord createEOFRecord()
{
@@ -857,5 +918,52 @@
UnitsRecord r = new UnitsRecord();
r.setUnits( (short) 0 );
return r;
+ }
+
+
+ /**
+ * A series in a chart
+ */
+ public class HSSFSeries {
+ private SeriesRecord series;
+ private SeriesTextRecord seriesTitleText;
+
+ private HSSFSeries(SeriesRecord series) {
+ this.series = series;
+ }
+
+ public short getNumValues() {
+ return series.getNumValues();
+ }
+ /**
+ * See {@link SeriesRecord}
+ */
+ public short getValueType() {
+ return series.getValuesDataType();
+ }
+
+ /**
+ * Returns the series' title, if there is one,
+ * or null if not
+ */
+ public String getSeriesTitle() {
+ if(seriesTitleText != null) {
+ return seriesTitleText.getText();
+ }
+ return null;
+ }
+
+ /**
+ * Changes the series' title, but only if there
+ * was one already.
+ * TODO - add in the records if not
+ */
+ public void setSeriesTitle(String title) {
+ if(seriesTitleText != null) {
+ seriesTitleText.setText(title);
+ } else {
+ throw new IllegalStateException("No series title found to change");
+ }
+ }
}
}
Modified: poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java (original)
+++ poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hwpf/HWPFDocument.java Fri Apr 11 08:52:17 2008
@@ -29,6 +29,7 @@
import java.util.Iterator;
import org.apache.poi.POIDocument;
+import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.common.POIFSConstants;
@@ -95,7 +96,7 @@
protected HWPFDocument()
{
-
+ super(null, null);
}
/**
@@ -132,7 +133,7 @@
//do Ole stuff
this( verifyAndBuildPOIFS(istream) );
}
-
+
/**
* This constructor loads a Word document from a POIFSFileSystem
*
@@ -142,15 +143,30 @@
*/
public HWPFDocument(POIFSFileSystem pfilesystem) throws IOException
{
+ this(pfilesystem.getRoot(), pfilesystem);
+ }
+
+ /**
+ * This constructor loads a Word document from a specific point
+ * in a POIFSFileSystem, probably not the default.
+ * Used typically to open embeded documents.
+ *
+ * @param pfilesystem The POIFSFileSystem that contains the Word document.
+ * @throws IOException If there is an unexpected IOException from the passed
+ * in POIFSFileSystem.
+ */
+ public HWPFDocument(DirectoryNode directory, POIFSFileSystem pfilesystem) throws IOException
+ {
// Sort out the hpsf properties
- filesystem = pfilesystem;
+ super(directory, pfilesystem);
readProperties();
// read in the main stream.
- DocumentEntry documentProps =
- (DocumentEntry)filesystem.getRoot().getEntry("WordDocument");
+ DocumentEntry documentProps = (DocumentEntry)
+ directory.getEntry("WordDocument");
_mainStream = new byte[documentProps.getSize()];
- filesystem.createDocumentInputStream("WordDocument").read(_mainStream);
+
+ directory.createDocumentInputStream("WordDocument").read(_mainStream);
// use the fib to determine the name of the table stream.
_fib = new FileInformationBlock(_mainStream);
@@ -165,14 +181,14 @@
DocumentEntry tableProps;
try {
tableProps =
- (DocumentEntry)filesystem.getRoot().getEntry(name);
+ (DocumentEntry)directory.getEntry(name);
} catch(FileNotFoundException fnfe) {
throw new IllegalStateException("Table Stream '" + name + "' wasn't found - Either the document is corrupt, or is Word95 (or earlier)");
}
// read in the table stream.
_tableStream = new byte[tableProps.getSize()];
- filesystem.createDocumentInputStream(name).read(_tableStream);
+ directory.createDocumentInputStream(name).read(_tableStream);
_fib.fillVariableFields(_mainStream, _tableStream);
@@ -180,7 +196,7 @@
try
{
DocumentEntry dataProps =
- (DocumentEntry) filesystem.getRoot().getEntry("Data");
+ (DocumentEntry)directory.getEntry("Data");
_dataStream = new byte[dataProps.getSize()];
filesystem.createDocumentInputStream("Data").read(_dataStream);
}
Modified: poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/extractor/TextExtractor.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/extractor/TextExtractor.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/extractor/TextExtractor.java (original)
+++ poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/extractor/TextExtractor.java Fri Apr 11 08:52:17 2008
@@ -21,6 +21,12 @@
package org.apache.poi.hslf.extractor;
+import java.io.FileInputStream;
+
+import org.apache.poi.hslf.HSLFSlideShow;
+import org.apache.poi.poifs.filesystem.DirectoryNode;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+
import junit.framework.TestCase;
/**
@@ -35,6 +41,8 @@
private PowerPointExtractor ppe2;
/** Where to go looking for our test files */
private String dirname;
+ /** Where our embeded files live */
+ private String pdirname;
public TextExtractor() throws Exception {
dirname = System.getProperty("HSLF.testdata.path");
@@ -42,6 +50,8 @@
ppe = new PowerPointExtractor(filename);
String filename2 = dirname + "/with_textbox.ppt";
ppe2 = new PowerPointExtractor(filename2);
+
+ pdirname = System.getProperty("POIFS.testdata.path");
}
public void testReadSheetText() throws Exception {
@@ -123,9 +133,87 @@
char[] expC = exp.toCharArray();
char[] actC = act.toCharArray();
for(int i=0; i<expC.length; i++) {
- System.out.println(i + "\t" + expC[i] + " " + actC[i]);
- assertEquals(expC[i],actC[i]);
+ assertEquals("Char " + i, expC[i], actC[i]);
}
assertEquals(exp,act);
+ }
+
+ public void testExtractFromEmbeded() throws Exception {
+ String filename3 = pdirname + "/excel_with_embeded.xls";
+ POIFSFileSystem fs = new POIFSFileSystem(
+ new FileInputStream(filename3)
+ );
+ HSLFSlideShow ss;
+
+ DirectoryNode dirA = (DirectoryNode)
+ fs.getRoot().getEntry("MBD0000A3B6");
+ DirectoryNode dirB = (DirectoryNode)
+ fs.getRoot().getEntry("MBD0000A3B3");
+
+ assertNotNull(dirA.getEntry("PowerPoint Document"));
+ assertNotNull(dirB.getEntry("PowerPoint Document"));
+
+ // Check the first file
+ ss = new HSLFSlideShow(dirA, fs);
+ ppe = new PowerPointExtractor(ss);
+ assertEquals("Sample PowerPoint file\nThis is the 1st file\nNot much too it\n",
+ ppe.getText(true, false)
+ );
+
+ // And the second
+ ss = new HSLFSlideShow(dirB, fs);
+ ppe = new PowerPointExtractor(ss);
+ assertEquals("Sample PowerPoint file\nThis is the 2nd file\nNot much too it either\n",
+ ppe.getText(true, false)
+ );
+ }
+
+ /**
+ * A powerpoint file with embeded powerpoint files
+ * TODO - figure out how to handle this, as ppt
+ * appears to embed not as ole2 streams
+ */
+ public void DISABLEDtestExtractFromOwnEmbeded() throws Exception {
+ String filename3 = pdirname + "/ppt_with_embeded.ppt";
+ POIFSFileSystem fs = new POIFSFileSystem(
+ new FileInputStream(filename3)
+ );
+ HSLFSlideShow ss;
+
+ DirectoryNode dirA = (DirectoryNode)
+ fs.getRoot().getEntry("MBD0000A3B6");
+ DirectoryNode dirB = (DirectoryNode)
+ fs.getRoot().getEntry("MBD0000A3B3");
+
+ assertNotNull(dirA.getEntry("PowerPoint Document"));
+ assertNotNull(dirB.getEntry("PowerPoint Document"));
+
+ // Check the first file
+ ss = new HSLFSlideShow(dirA, fs);
+ ppe = new PowerPointExtractor(ss);
+ assertEquals("Sample PowerPoint file\nThis is the 1st file\nNot much too it\n",
+ ppe.getText(true, false)
+ );
+
+ // And the second
+ ss = new HSLFSlideShow(dirB, fs);
+ ppe = new PowerPointExtractor(ss);
+ assertEquals("Sample PowerPoint file\nThis is the 2nd file\nNot much too it either\n",
+ ppe.getText(true, false)
+ );
+
+
+ // Check the master doc two ways
+ ss = new HSLFSlideShow(fs.getRoot(), fs);
+ ppe = new PowerPointExtractor(ss);
+ assertEquals("I have embeded files in me\n",
+ ppe.getText(true, false)
+ );
+
+ ss = new HSLFSlideShow(fs);
+ ppe = new PowerPointExtractor(ss);
+ assertEquals("I have embeded files in me\n",
+ ppe.getText(true, false)
+ );
}
}
Modified: poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hssf/usermodel/TestHSSFChart.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hssf/usermodel/TestHSSFChart.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hssf/usermodel/TestHSSFChart.java (original)
+++ poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hssf/usermodel/TestHSSFChart.java Fri Apr 11 08:52:17 2008
@@ -19,6 +19,8 @@
import java.io.File;
import java.io.FileInputStream;
+import org.apache.poi.hssf.record.SeriesRecord;
+
import junit.framework.TestCase;
public class TestHSSFChart extends TestCase {
@@ -29,14 +31,65 @@
}
public void testSingleChart() throws Exception {
+ HSSFWorkbook wb = new HSSFWorkbook(
+ new FileInputStream(new File(dirName, "WithChart.xls"))
+ );
+
+ HSSFSheet s1 = wb.getSheetAt(0);
+ HSSFSheet s2 = wb.getSheetAt(1);
+ HSSFSheet s3 = wb.getSheetAt(2);
+
+ assertEquals(0, HSSFChart.getSheetCharts(s1).length);
+ assertEquals(1, HSSFChart.getSheetCharts(s2).length);
+ assertEquals(0, HSSFChart.getSheetCharts(s3).length);
+ HSSFChart[] charts;
+
+ // Check the chart on the 2nd sheet
+ charts = HSSFChart.getSheetCharts(s2);
+ assertEquals(1, charts.length);
+
+ assertEquals(2, charts[0].getSeries().length);
+ assertEquals("1st Column", charts[0].getSeries()[0].getSeriesTitle());
+ assertEquals("2nd Column", charts[0].getSeries()[1].getSeriesTitle());
+ assertEquals(null, charts[0].getChartTitle());
}
public void testTwoCharts() throws Exception {
+ HSSFWorkbook wb = new HSSFWorkbook(
+ new FileInputStream(new File(dirName, "WithTwoCharts.xls"))
+ );
+ HSSFSheet s1 = wb.getSheetAt(0);
+ HSSFSheet s2 = wb.getSheetAt(1);
+ HSSFSheet s3 = wb.getSheetAt(2);
+
+ assertEquals(0, HSSFChart.getSheetCharts(s1).length);
+ assertEquals(1, HSSFChart.getSheetCharts(s2).length);
+ assertEquals(1, HSSFChart.getSheetCharts(s3).length);
+
+ HSSFChart[] charts;
+
+ // Check the chart on the 2nd sheet
+ charts = HSSFChart.getSheetCharts(s2);
+ assertEquals(1, charts.length);
+
+ assertEquals(2, charts[0].getSeries().length);
+ assertEquals("1st Column", charts[0].getSeries()[0].getSeriesTitle());
+ assertEquals("2nd Column", charts[0].getSeries()[1].getSeriesTitle());
+ assertEquals(null, charts[0].getChartTitle());
+
+ // And the third sheet
+ charts = HSSFChart.getSheetCharts(s3);
+ assertEquals(1, charts.length);
+
+ assertEquals(2, charts[0].getSeries().length);
+ assertEquals("Squares", charts[0].getSeries()[0].getSeriesTitle());
+ assertEquals("Base Numbers", charts[0].getSeries()[1].getSeriesTitle());
+ assertEquals(null, charts[0].getChartTitle());
}
-
- public void BROKENtestThreeCharts() throws Exception {
+
+ public void testThreeCharts() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(
new FileInputStream(new File(dirName, "WithThreeCharts.xls"))
);
@@ -51,11 +104,30 @@
HSSFChart[] charts;
+ // Check the charts on the 2nd sheet
charts = HSSFChart.getSheetCharts(s2);
- assertNull(charts[0].getChartTitle());
+ assertEquals(2, charts.length);
+
+ assertEquals(2, charts[0].getSeries().length);
+ assertEquals("1st Column", charts[0].getSeries()[0].getSeriesTitle());
+ assertEquals("2nd Column", charts[0].getSeries()[1].getSeriesTitle());
+ assertEquals(6, charts[0].getSeries()[0].getNumValues());
+ assertEquals(6, charts[0].getSeries()[1].getNumValues());
+ assertEquals(SeriesRecord.CATEGORY_DATA_TYPE_NUMERIC, charts[0].getSeries()[0].getValueType());
+ assertEquals(SeriesRecord.CATEGORY_DATA_TYPE_NUMERIC, charts[0].getSeries()[1].getValueType());
+ assertEquals(null, charts[0].getChartTitle());
+
+ assertEquals(1, charts[1].getSeries().length);
+ assertEquals(null, charts[1].getSeries()[0].getSeriesTitle());
assertEquals("Pie Chart Title Thingy", charts[1].getChartTitle());
+ // And the third sheet
charts = HSSFChart.getSheetCharts(s3);
- assertEquals("Sheet 3 Chart with Title", charts[1].getChartTitle());
+ assertEquals(1, charts.length);
+
+ assertEquals(2, charts[0].getSeries().length);
+ assertEquals("Squares", charts[0].getSeries()[0].getSeriesTitle());
+ assertEquals("Base Numbers", charts[0].getSeries()[1].getSeriesTitle());
+ assertEquals("Sheet 3 Chart with Title", charts[0].getChartTitle());
}
}
Modified: poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java (original)
+++ poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java Fri Apr 11 08:52:17 2008
@@ -17,15 +17,13 @@
package org.apache.poi.hwpf.extractor;
import java.io.FileInputStream;
-import java.util.Iterator;
-
-import org.apache.poi.hwpf.HWPFDocument;
-import org.apache.poi.hwpf.model.TextPiece;
-import org.apache.poi.hwpf.usermodel.Paragraph;
-import org.apache.poi.hwpf.usermodel.Range;
import junit.framework.TestCase;
+import org.apache.poi.hwpf.HWPFDocument;
+import org.apache.poi.poifs.filesystem.DirectoryNode;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+
/**
* Test the different routes to extracting text
*
@@ -54,12 +52,16 @@
private WordExtractor extractor;
// Corrupted document - can't do paragraph based stuff
private WordExtractor extractor2;
+ // A word doc embeded in an excel file
+ private String filename3;
protected void setUp() throws Exception {
String dirname = System.getProperty("HWPF.testdata.path");
+ String pdirname = System.getProperty("POIFS.testdata.path");
String filename = dirname + "/test2.doc";
String filename2 = dirname + "/test.doc";
+ filename3 = pdirname + "/excel_with_embeded.xls";
extractor = new WordExtractor(new FileInputStream(filename));
extractor2 = new WordExtractor(new FileInputStream(filename2));
@@ -100,5 +102,51 @@
public void testExtractFromTextPieces() throws Exception {
String text = extractor.getTextFromPieces();
assertEquals(p_text1_block, text);
+ }
+
+
+ /**
+ * Test that we can get data from two different
+ * embeded word documents
+ * @throws Exception
+ */
+ public void testExtractFromEmbeded() throws Exception {
+ POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filename3));
+ HWPFDocument doc;
+ WordExtractor extractor3;
+
+ DirectoryNode dirA = (DirectoryNode)
+ fs.getRoot().getEntry("MBD0000A3B7");
+ DirectoryNode dirB = (DirectoryNode)
+ fs.getRoot().getEntry("MBD0000A3B2");
+
+ // Should have WordDocument and 1Table
+ assertNotNull(dirA.getEntry("1Table"));
+ assertNotNull(dirA.getEntry("WordDocument"));
+
+ assertNotNull(dirB.getEntry("1Table"));
+ assertNotNull(dirB.getEntry("WordDocument"));
+
+ // Check each in turn
+ doc = new HWPFDocument(dirA, fs);
+ extractor3 = new WordExtractor(doc);
+
+ assertNotNull(extractor3.getText());
+ assertTrue(extractor3.getText().length() > 20);
+ assertEquals("I am a sample document\r\nNot much on me\r\nI am document 1\r\n",
+ extractor3.getText());
+ assertEquals("Sample Doc 1", extractor3.getSummaryInformation().getTitle());
+ assertEquals("Sample Test", extractor3.getSummaryInformation().getSubject());
+
+
+ doc = new HWPFDocument(dirB, fs);
+ extractor3 = new WordExtractor(doc);
+
+ assertNotNull(extractor3.getText());
+ assertTrue(extractor3.getText().length() > 20);
+ assertEquals("I am another sample document\r\nNot much on me\r\nI am document 2\r\n",
+ extractor3.getText());
+ assertEquals("Sample Doc 2", extractor3.getSummaryInformation().getTitle());
+ assertEquals("Another Sample Test", extractor3.getSummaryInformation().getSubject());
}
}
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java Fri Apr 11 08:52:17 2008
@@ -17,12 +17,15 @@
package org.apache.poi.hssf.extractor;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/**
*
@@ -117,5 +120,73 @@
extractor.setFormulasNotResults(true);
assertEquals("Sheet1\nUPPER(\"xyz\")\nSheet2\nSheet3\n", extractor.getText());
+ }
+
+ /**
+ * Embded in a non-excel file
+ */
+ public void testWithEmbeded() throws Exception {
+ String pdirname = System.getProperty("POIFS.testdata.path");
+ String filename = pdirname + "/word_with_embeded.doc";
+ POIFSFileSystem fs = new POIFSFileSystem(
+ new FileInputStream(filename)
+ );
+
+ DirectoryNode objPool = (DirectoryNode)
+ fs.getRoot().getEntry("ObjectPool");
+ DirectoryNode dirA = (DirectoryNode)
+ objPool.getEntry("_1269427460");
+ DirectoryNode dirB = (DirectoryNode)
+ objPool.getEntry("_1269427461");
+
+ HSSFWorkbook wbA = new HSSFWorkbook(dirA, fs, true);
+ HSSFWorkbook wbB = new HSSFWorkbook(dirB, fs, true);
+
+ ExcelExtractor exA = new ExcelExtractor(wbA);
+ ExcelExtractor exB = new ExcelExtractor(wbB);
+
+ assertEquals("Sheet1\nTest excel file\nThis is the first file\nSheet2\nSheet3\n",
+ exA.getText());
+ assertEquals("Sample Excel", exA.getSummaryInformation().getTitle());
+
+ assertEquals("Sheet1\nAnother excel file\nThis is the second file\nSheet2\nSheet3\n",
+ exB.getText());
+ assertEquals("Sample Excel 2", exB.getSummaryInformation().getTitle());
+ }
+
+ /**
+ * Excel embeded in excel
+ */
+ public void testWithEmbededInOwn() throws Exception {
+ String pdirname = System.getProperty("POIFS.testdata.path");
+ String filename = pdirname + "/excel_with_embeded.xls";
+ POIFSFileSystem fs = new POIFSFileSystem(
+ new FileInputStream(filename)
+ );
+
+ DirectoryNode dirA = (DirectoryNode)
+ fs.getRoot().getEntry("MBD0000A3B5");
+ DirectoryNode dirB = (DirectoryNode)
+ fs.getRoot().getEntry("MBD0000A3B4");
+
+ HSSFWorkbook wbA = new HSSFWorkbook(dirA, fs, true);
+ HSSFWorkbook wbB = new HSSFWorkbook(dirB, fs, true);
+
+ ExcelExtractor exA = new ExcelExtractor(wbA);
+ ExcelExtractor exB = new ExcelExtractor(wbB);
+
+ assertEquals("Sheet1\nTest excel file\nThis is the first file\nSheet2\nSheet3\n",
+ exA.getText());
+ assertEquals("Sample Excel", exA.getSummaryInformation().getTitle());
+
+ assertEquals("Sheet1\nAnother excel file\nThis is the second file\nSheet2\nSheet3\n",
+ exB.getText());
+ assertEquals("Sample Excel 2", exB.getSummaryInformation().getTitle());
+
+ // And the base file too
+ ExcelExtractor ex = new ExcelExtractor(fs);
+ assertEquals("Sheet1\nI have lots of embeded files in me\nSheet2\nSheet3\n",
+ ex.getText());
+ assertEquals("Excel With Embeded", ex.getSummaryInformation().getTitle());
}
}
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/excel_with_embeded.xls
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/excel_with_embeded.xls?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
Binary files - no diff available.
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/word_with_embeded.doc
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/poifs/data/word_with_embeded.doc?rev=647203&r1=647202&r2=647203&view=diff
==============================================================================
Binary files - no diff available.
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org