From 5abd6431a28c8c8ff27f3a80d989deb41d77ea32 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Mon, 11 May 2015 18:59:10 +0000 Subject: [PATCH] #56791 More updates from OPOIFS to NPOIFS git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1678801 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/poi/POIDocument.java | 16 ++++- .../poi/hpsf/HPSFPropertiesOnlyDocument.java | 4 ++ .../apache/poi/hssf/dev/BiffDrawingToXml.java | 4 +- .../org/apache/poi/hssf/dev/BiffViewer.java | 58 +++++++++++++++++-- .../poi/hssf/usermodel/HSSFPatriarch.java | 1 - .../poi/hssf/usermodel/HSSFWorkbook.java | 17 +++++- .../org/apache/poi/poifs/crypt/Decryptor.java | 5 +- .../poi/poifs/crypt/EncryptionInfo.java | 7 +++ .../org/apache/poi/poifs/crypt/Encryptor.java | 5 +- .../crypt/cryptoapi/CryptoAPIDecryptor.java | 5 +- .../org/apache/poi/poifs/dev/POIFSDump.java | 5 +- .../org/apache/poi/poifs/dev/POIFSViewer.java | 10 ++-- .../poifs/filesystem/DocumentInputStream.java | 2 +- .../poifs/filesystem/NPOIFSFileSystem.java | 9 +++ .../poi/poifs/property/PropertyTable.java | 1 - .../poi/util/CloseIgnoringInputStream.java | 2 - src/java/org/apache/poi/util/DrawingDump.java | 12 ++-- .../poi/extractor/ExtractorFactory.java | 41 +++++++------ .../poi/ss/usermodel/WorkbookFactory.java | 2 +- .../org/apache/poi/hdgf/dev/VSDDumper.java | 6 +- .../hdgf/extractor/VisioTextExtractor.java | 2 +- .../src/org/apache/poi/hpbf/HPBFDocument.java | 11 +--- .../org/apache/poi/hpbf/dev/HPBFDumper.java | 8 +-- .../org/apache/poi/hpbf/dev/PLCDumper.java | 6 +- .../extractor/PublisherTextExtractor.java | 4 -- .../org/apache/poi/hslf/HSLFSlideShow.java | 18 +----- .../org/apache/poi/hslf/dev/PPTXMLDump.java | 7 +-- .../apache/poi/hslf/dev/SlideShowDumper.java | 34 +++++------ .../hslf/extractor/PowerPointExtractor.java | 13 +---- .../QuickButCruddyTextExtractor.java | 14 ++--- .../org/apache/poi/TestPOIDocumentMain.java | 4 +- .../apache/poi/hpsf/basic/TestHPSFBugs.java | 12 ++-- .../poi/hssf/HSSFITestDataProvider.java | 5 ++ .../apache/poi/hssf/usermodel/TestBugs.java | 20 ++++++- 34 files changed, 220 insertions(+), 150 deletions(-) diff --git a/src/java/org/apache/poi/POIDocument.java b/src/java/org/apache/poi/POIDocument.java index 50c088ba7b..4345d4b1ca 100644 --- a/src/java/org/apache/poi/POIDocument.java +++ b/src/java/org/apache/poi/POIDocument.java @@ -33,6 +33,7 @@ import org.apache.poi.poifs.crypt.EncryptionInfo; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.DocumentInputStream; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; +import org.apache.poi.poifs.filesystem.OPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; @@ -65,13 +66,24 @@ public abstract class POIDocument { this.directory = dir; } - protected POIDocument(POIFSFileSystem fs) { + /** + * Constructs from an old-style OPOIFS + */ + protected POIDocument(OPOIFSFileSystem fs) { this(fs.getRoot()); } - + /** + * Constructs from an old-style OPOIFS + */ protected POIDocument(NPOIFSFileSystem fs) { this(fs.getRoot()); } + /** + * Constructs from the default POIFS + */ + protected POIDocument(POIFSFileSystem fs) { + this(fs.getRoot()); + } /** * Fetch the Document Summary Information of the document diff --git a/src/java/org/apache/poi/hpsf/HPSFPropertiesOnlyDocument.java b/src/java/org/apache/poi/hpsf/HPSFPropertiesOnlyDocument.java index ea6bc0b1bc..9b0f84d470 100644 --- a/src/java/org/apache/poi/hpsf/HPSFPropertiesOnlyDocument.java +++ b/src/java/org/apache/poi/hpsf/HPSFPropertiesOnlyDocument.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.poi.POIDocument; import org.apache.poi.poifs.filesystem.EntryUtils; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; +import org.apache.poi.poifs.filesystem.OPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** @@ -36,6 +37,9 @@ public class HPSFPropertiesOnlyDocument extends POIDocument { public HPSFPropertiesOnlyDocument(NPOIFSFileSystem fs) { super(fs.getRoot()); } + public HPSFPropertiesOnlyDocument(OPOIFSFileSystem fs) { + super(fs); + } public HPSFPropertiesOnlyDocument(POIFSFileSystem fs) { super(fs); } diff --git a/src/java/org/apache/poi/hssf/dev/BiffDrawingToXml.java b/src/java/org/apache/poi/hssf/dev/BiffDrawingToXml.java index c9f9872711..ca35c631b5 100644 --- a/src/java/org/apache/poi/hssf/dev/BiffDrawingToXml.java +++ b/src/java/org/apache/poi/hssf/dev/BiffDrawingToXml.java @@ -34,7 +34,7 @@ import org.apache.poi.hssf.record.DrawingGroupRecord; import org.apache.poi.hssf.record.EscherAggregate; import org.apache.poi.hssf.usermodel.HSSFPatriarch; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; /** * Utility for representing drawings contained in a binary Excel file as a XML tree @@ -138,7 +138,7 @@ public class BiffDrawingToXml { } public static void writeToFile(OutputStream fos, InputStream xlsWorkbook, boolean excludeWorkbookRecords, String[] params) throws IOException { - POIFSFileSystem fs = new POIFSFileSystem(xlsWorkbook); + NPOIFSFileSystem fs = new NPOIFSFileSystem(xlsWorkbook); HSSFWorkbook workbook = new HSSFWorkbook(fs); InternalWorkbook internalWorkbook = getInternalWorkbook(workbook); DrawingGroupRecord r = (DrawingGroupRecord) internalWorkbook.findFirstRecordBySid(DrawingGroupRecord.sid); diff --git a/src/java/org/apache/poi/hssf/dev/BiffViewer.java b/src/java/org/apache/poi/hssf/dev/BiffViewer.java index 5451b27899..42d851de76 100644 --- a/src/java/org/apache/poi/hssf/dev/BiffViewer.java +++ b/src/java/org/apache/poi/hssf/dev/BiffViewer.java @@ -17,13 +17,63 @@ package org.apache.poi.hssf.dev; -import java.io.*; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintStream; +import java.io.Writer; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.record.*; import org.apache.poi.hssf.record.RecordInputStream.LeftoverDataException; -import org.apache.poi.hssf.record.chart.*; +import org.apache.poi.hssf.record.chart.AreaFormatRecord; +import org.apache.poi.hssf.record.chart.AreaRecord; +import org.apache.poi.hssf.record.chart.AxisLineFormatRecord; +import org.apache.poi.hssf.record.chart.AxisOptionsRecord; +import org.apache.poi.hssf.record.chart.AxisParentRecord; +import org.apache.poi.hssf.record.chart.AxisRecord; +import org.apache.poi.hssf.record.chart.AxisUsedRecord; +import org.apache.poi.hssf.record.chart.BarRecord; +import org.apache.poi.hssf.record.chart.BeginRecord; +import org.apache.poi.hssf.record.chart.CatLabRecord; +import org.apache.poi.hssf.record.chart.CategorySeriesAxisRecord; +import org.apache.poi.hssf.record.chart.ChartEndBlockRecord; +import org.apache.poi.hssf.record.chart.ChartEndObjectRecord; +import org.apache.poi.hssf.record.chart.ChartFRTInfoRecord; +import org.apache.poi.hssf.record.chart.ChartFormatRecord; +import org.apache.poi.hssf.record.chart.ChartRecord; +import org.apache.poi.hssf.record.chart.ChartStartBlockRecord; +import org.apache.poi.hssf.record.chart.ChartStartObjectRecord; +import org.apache.poi.hssf.record.chart.DatRecord; +import org.apache.poi.hssf.record.chart.DataFormatRecord; +import org.apache.poi.hssf.record.chart.DefaultDataLabelTextPropertiesRecord; +import org.apache.poi.hssf.record.chart.EndRecord; +import org.apache.poi.hssf.record.chart.FontBasisRecord; +import org.apache.poi.hssf.record.chart.FontIndexRecord; +import org.apache.poi.hssf.record.chart.FrameRecord; +import org.apache.poi.hssf.record.chart.LegendRecord; +import org.apache.poi.hssf.record.chart.LineFormatRecord; +import org.apache.poi.hssf.record.chart.LinkedDataRecord; +import org.apache.poi.hssf.record.chart.ObjectLinkRecord; +import org.apache.poi.hssf.record.chart.PlotAreaRecord; +import org.apache.poi.hssf.record.chart.PlotGrowthRecord; +import org.apache.poi.hssf.record.chart.SeriesIndexRecord; +import org.apache.poi.hssf.record.chart.SeriesListRecord; +import org.apache.poi.hssf.record.chart.SeriesRecord; +import org.apache.poi.hssf.record.chart.SeriesTextRecord; +import org.apache.poi.hssf.record.chart.SeriesToChartGroupRecord; +import org.apache.poi.hssf.record.chart.SheetPropertiesRecord; +import org.apache.poi.hssf.record.chart.TextRecord; +import org.apache.poi.hssf.record.chart.TickRecord; +import org.apache.poi.hssf.record.chart.UnitsRecord; +import org.apache.poi.hssf.record.chart.ValueRangeRecord; import org.apache.poi.hssf.record.pivottable.DataItemRecord; import org.apache.poi.hssf.record.pivottable.ExtendedPivotTableViewFieldsRecord; import org.apache.poi.hssf.record.pivottable.PageItemRecord; @@ -32,7 +82,7 @@ import org.apache.poi.hssf.record.pivottable.ViewDefinitionRecord; import org.apache.poi.hssf.record.pivottable.ViewFieldsRecord; import org.apache.poi.hssf.record.pivottable.ViewSourceRecord; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndian; @@ -420,7 +470,7 @@ public final class BiffViewer { protected static InputStream getPOIFSInputStream(File file) throws IOException, FileNotFoundException { - POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file)); + NPOIFSFileSystem fs = new NPOIFSFileSystem(new FileInputStream(file)); String workbookName = HSSFWorkbook.getWorkbookDirEntryName(fs.getRoot()); return fs.createDocumentInputStream(workbookName); } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java b/src/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java index dda4b39575..04f57b4931 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java @@ -45,7 +45,6 @@ import org.apache.poi.hssf.record.ObjRecord; import org.apache.poi.hssf.util.CellReference; import org.apache.poi.poifs.filesystem.DirectoryEntry; import org.apache.poi.poifs.filesystem.DirectoryNode; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Chart; import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.Drawing; diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java index be1c7ef9fb..65ec1a33e5 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java @@ -206,6 +206,19 @@ public final class HSSFWorkbook extends POIDocument implements org.apache.poi.ss public HSSFWorkbook(POIFSFileSystem fs) throws IOException { this(fs,true); } + /** + * Given a POI POIFSFileSystem object, read in its Workbook along + * with all related nodes, and populate the high and low level models. + *

This calls {@link #HSSFWorkbook(POIFSFileSystem, boolean)} with + * preserve nodes set to true. + * + * @see #HSSFWorkbook(POIFSFileSystem, boolean) + * @see org.apache.poi.poifs.filesystem.POIFSFileSystem + * @exception IOException if the stream cannot be read + */ + public HSSFWorkbook(NPOIFSFileSystem fs) throws IOException { + this(fs.getRoot(),true); + } /** * Given a POI POIFSFileSystem object, read in its Workbook and populate @@ -379,7 +392,7 @@ public final class HSSFWorkbook extends POIDocument implements org.apache.poi.ss public HSSFWorkbook(InputStream s, boolean preserveNodes) throws IOException { - this(new POIFSFileSystem(s), preserveNodes); + this(new NPOIFSFileSystem(s).getRoot(), preserveNodes); } /** @@ -1844,7 +1857,7 @@ public final class HSSFWorkbook extends POIDocument implements org.apache.poi.ss throws IOException { // check if we were created by POIFS otherwise create a new dummy POIFS for storing the package data if (directory == null) { - directory = new POIFSFileSystem().getRoot(); + directory = new NPOIFSFileSystem().getRoot(); preserveNodes = true; } diff --git a/src/java/org/apache/poi/poifs/crypt/Decryptor.java b/src/java/org/apache/poi/poifs/crypt/Decryptor.java index d584346f9c..eb94dca983 100644 --- a/src/java/org/apache/poi/poifs/crypt/Decryptor.java +++ b/src/java/org/apache/poi/poifs/crypt/Decryptor.java @@ -25,6 +25,7 @@ import javax.crypto.SecretKey; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; +import org.apache.poi.poifs.filesystem.OPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public abstract class Decryptor { @@ -84,7 +85,9 @@ public abstract class Decryptor { public InputStream getDataStream(NPOIFSFileSystem fs) throws IOException, GeneralSecurityException { return getDataStream(fs.getRoot()); } - + public InputStream getDataStream(OPOIFSFileSystem fs) throws IOException, GeneralSecurityException { + return getDataStream(fs.getRoot()); + } public InputStream getDataStream(POIFSFileSystem fs) throws IOException, GeneralSecurityException { return getDataStream(fs.getRoot()); } diff --git a/src/java/org/apache/poi/poifs/crypt/EncryptionInfo.java b/src/java/org/apache/poi/poifs/crypt/EncryptionInfo.java index 2c2a42258a..3aafb90cac 100644 --- a/src/java/org/apache/poi/poifs/crypt/EncryptionInfo.java +++ b/src/java/org/apache/poi/poifs/crypt/EncryptionInfo.java @@ -26,6 +26,7 @@ import java.io.IOException; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; +import org.apache.poi.poifs.filesystem.OPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; @@ -74,6 +75,12 @@ public class EncryptionInfo { public EncryptionInfo(POIFSFileSystem fs) throws IOException { this(fs.getRoot()); } + /** + * Opens for decryption + */ + public EncryptionInfo(OPOIFSFileSystem fs) throws IOException { + this(fs.getRoot()); + } /** * Opens for decryption */ diff --git a/src/java/org/apache/poi/poifs/crypt/Encryptor.java b/src/java/org/apache/poi/poifs/crypt/Encryptor.java index 4c1b51258f..d40f8ae5d9 100644 --- a/src/java/org/apache/poi/poifs/crypt/Encryptor.java +++ b/src/java/org/apache/poi/poifs/crypt/Encryptor.java @@ -24,6 +24,7 @@ import javax.crypto.SecretKey; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; +import org.apache.poi.poifs.filesystem.OPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public abstract class Encryptor { @@ -51,7 +52,9 @@ public abstract class Encryptor { public OutputStream getDataStream(NPOIFSFileSystem fs) throws IOException, GeneralSecurityException { return getDataStream(fs.getRoot()); } - + public OutputStream getDataStream(OPOIFSFileSystem fs) throws IOException, GeneralSecurityException { + return getDataStream(fs.getRoot()); + } public OutputStream getDataStream(POIFSFileSystem fs) throws IOException, GeneralSecurityException { return getDataStream(fs.getRoot()); } diff --git a/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java b/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java index c1ae13ceeb..1e470d7263 100644 --- a/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java +++ b/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java @@ -40,7 +40,7 @@ import org.apache.poi.poifs.crypt.HashAlgorithm; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.DocumentInputStream; import org.apache.poi.poifs.filesystem.DocumentNode; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; import org.apache.poi.util.BoundedInputStream; @@ -200,7 +200,7 @@ public class CryptoAPIDecryptor extends Decryptor { @SuppressWarnings("unused") public InputStream getDataStream(DirectoryNode dir) throws IOException, GeneralSecurityException { - POIFSFileSystem fsOut = new POIFSFileSystem(); + NPOIFSFileSystem fsOut = new NPOIFSFileSystem(); DocumentNode es = (DocumentNode) dir.getEntry("EncryptedSummary"); DocumentInputStream dis = dir.createDocumentInputStream(es); ByteArrayOutputStream bos = new ByteArrayOutputStream(); @@ -240,6 +240,7 @@ public class CryptoAPIDecryptor extends Decryptor { sbis = null; bos.reset(); fsOut.writeFilesystem(bos); + fsOut.close(); _length = bos.size(); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); return bis; diff --git a/src/java/org/apache/poi/poifs/dev/POIFSDump.java b/src/java/org/apache/poi/poifs/dev/POIFSDump.java index 66597fd4db..3af3690fd6 100644 --- a/src/java/org/apache/poi/poifs/dev/POIFSDump.java +++ b/src/java/org/apache/poi/poifs/dev/POIFSDump.java @@ -26,10 +26,7 @@ import java.io.OutputStream; import java.util.Iterator; /** - * * Dump internal structure of a OLE2 file into file system - * - * @author Yegor Kozlov */ public class POIFSDump { @@ -37,7 +34,7 @@ public class POIFSDump { for (int i = 0; i < args.length; i++) { System.out.println("Dumping " + args[i]); FileInputStream is = new FileInputStream(args[i]); - POIFSFileSystem fs = new POIFSFileSystem(is); + NPOIFSFileSystem fs = new NPOIFSFileSystem(is); is.close(); DirectoryEntry root = fs.getRoot(); diff --git a/src/java/org/apache/poi/poifs/dev/POIFSViewer.java b/src/java/org/apache/poi/poifs/dev/POIFSViewer.java index 8b81734265..4614376db2 100644 --- a/src/java/org/apache/poi/poifs/dev/POIFSViewer.java +++ b/src/java/org/apache/poi/poifs/dev/POIFSViewer.java @@ -19,12 +19,12 @@ package org.apache.poi.poifs.dev; -import java.io.FileInputStream; +import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; /** * A simple viewer for POIFS files @@ -76,10 +76,10 @@ public class POIFSViewer try { POIFSViewable fs = - new POIFSFileSystem(new FileInputStream(filename)); - List strings = POIFSViewEngine.inspectViewable(fs, true, + new NPOIFSFileSystem(new File(filename)); + List strings = POIFSViewEngine.inspectViewable(fs, true, 0, " "); - Iterator iter = strings.iterator(); + Iterator iter = strings.iterator(); while (iter.hasNext()) { diff --git a/src/java/org/apache/poi/poifs/filesystem/DocumentInputStream.java b/src/java/org/apache/poi/poifs/filesystem/DocumentInputStream.java index 35d0c23655..82959c7ffa 100644 --- a/src/java/org/apache/poi/poifs/filesystem/DocumentInputStream.java +++ b/src/java/org/apache/poi/poifs/filesystem/DocumentInputStream.java @@ -58,7 +58,7 @@ public class DocumentInputStream extends InputStream implements LittleEndianInpu if(documentNode.getDocument() != null) { delegate = new ODocumentInputStream(document); - } else if(parentNode.getFileSystem() != null) { + } else if(parentNode.getOFileSystem() != null) { delegate = new ODocumentInputStream(document); } else if(parentNode.getNFileSystem() != null) { delegate = new NDocumentInputStream(document); diff --git a/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java b/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java index 3aa0707192..4ad5c0a5b1 100644 --- a/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java +++ b/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java @@ -376,6 +376,15 @@ public class NPOIFSFileSystem extends BlockStore return (signature.get() == HeaderBlockConstants._signature); } + /** + * Checks if the supplied first 8 bytes of a stream / file + * has a POIFS (OLE2) header. + */ + public static boolean hasPOIFSHeader(byte[] header8Bytes) { + LongField signature = new LongField(HeaderBlockConstants._signature_offset, header8Bytes); + return (signature.get() == HeaderBlockConstants._signature); + } + /** * Read and process the PropertiesTable and the * FAT / XFAT blocks, so that we're ready to diff --git a/src/java/org/apache/poi/poifs/property/PropertyTable.java b/src/java/org/apache/poi/poifs/property/PropertyTable.java index 45a9734158..28d49cde1c 100644 --- a/src/java/org/apache/poi/poifs/property/PropertyTable.java +++ b/src/java/org/apache/poi/poifs/property/PropertyTable.java @@ -21,7 +21,6 @@ import java.io.IOException; import java.io.OutputStream; import org.apache.poi.poifs.common.POIFSBigBlockSize; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.poifs.storage.BlockWritable; import org.apache.poi.poifs.storage.HeaderBlock; import org.apache.poi.poifs.storage.PropertyBlock; diff --git a/src/java/org/apache/poi/util/CloseIgnoringInputStream.java b/src/java/org/apache/poi/util/CloseIgnoringInputStream.java index f4896a8312..0ccc24ee9d 100644 --- a/src/java/org/apache/poi/util/CloseIgnoringInputStream.java +++ b/src/java/org/apache/poi/util/CloseIgnoringInputStream.java @@ -20,8 +20,6 @@ package org.apache.poi.util; import java.io.FilterInputStream; import java.io.InputStream; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; - /** * A wrapper around an {@link InputStream}, which * ignores close requests made to it. diff --git a/src/java/org/apache/poi/util/DrawingDump.java b/src/java/org/apache/poi/util/DrawingDump.java index 1055ab2da0..4eb6a2aff2 100644 --- a/src/java/org/apache/poi/util/DrawingDump.java +++ b/src/java/org/apache/poi/util/DrawingDump.java @@ -18,12 +18,12 @@ package org.apache.poi.util; +import java.io.File; +import java.io.IOException; + import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; - -import java.io.FileInputStream; -import java.io.IOException; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; /** * Dump out the aggregated escher records @@ -32,8 +32,8 @@ public class DrawingDump { public static void main( String[] args ) throws IOException { - POIFSFileSystem fs = - new POIFSFileSystem(new FileInputStream(args[0])); + NPOIFSFileSystem fs = + new NPOIFSFileSystem(new File(args[0])); HSSFWorkbook wb = new HSSFWorkbook(fs); try { System.out.println( "Drawing group:" ); diff --git a/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java b/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java index b484e2ed06..2ef23d2da1 100644 --- a/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java +++ b/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java @@ -18,7 +18,6 @@ package org.apache.poi.extractor; import java.io.ByteArrayInputStream; import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -51,6 +50,10 @@ import org.apache.poi.openxml4j.opc.PackageRelationshipTypes; import org.apache.poi.poifs.filesystem.DirectoryEntry; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.Entry; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; +import org.apache.poi.poifs.filesystem.NotOLE2FileException; +import org.apache.poi.poifs.filesystem.OPOIFSFileSystem; +import org.apache.poi.poifs.filesystem.OfficeXmlFileException; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.xslf.XSLFSlideShow; import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor; @@ -128,16 +131,14 @@ public class ExtractorFactory { public static POITextExtractor createExtractor(File f) throws IOException, InvalidFormatException, OpenXML4JException, XmlException { InputStream inp = null; try { - inp = new PushbackInputStream( - new FileInputStream(f), 8); - - if(POIFSFileSystem.hasPOIFSHeader(inp)) { - return createExtractor(new POIFSFileSystem(inp)); - } - if(POIXMLDocument.hasOOXMLHeader(inp)) { + try { + NPOIFSFileSystem fs = new NPOIFSFileSystem(f); + return createExtractor(fs); + } catch (OfficeXmlFileException e) { return createExtractor(OPCPackage.open(f.toString(), PackageAccess.READ)); + } catch (NotOLE2FileException ne) { + throw new IllegalArgumentException("Your File was neither an OLE2 file, nor an OOXML file"); } - throw new IllegalArgumentException("Your File was neither an OLE2 file, nor an OOXML file"); } finally { if(inp != null) inp.close(); } @@ -150,8 +151,8 @@ public class ExtractorFactory { inp = new PushbackInputStream(inp, 8); } - if(POIFSFileSystem.hasPOIFSHeader(inp)) { - return createExtractor(new POIFSFileSystem(inp)); + if(NPOIFSFileSystem.hasPOIFSHeader(inp)) { + return createExtractor(new NPOIFSFileSystem(inp)); } if(POIXMLDocument.hasOOXMLHeader(inp)) { return createExtractor(OPCPackage.open(inp)); @@ -226,16 +227,14 @@ public class ExtractorFactory { // Only ever an OLE2 one from the root of the FS return (POIOLE2TextExtractor)createExtractor(fs.getRoot()); } - - /** - * @deprecated Use {@link #createExtractor(DirectoryNode)} instead - */ - @Deprecated - public static POITextExtractor createExtractor(DirectoryNode poifsDir, POIFSFileSystem fs) - throws IOException, InvalidFormatException, OpenXML4JException, XmlException - { - return createExtractor(poifsDir); - } + public static POIOLE2TextExtractor createExtractor(NPOIFSFileSystem fs) throws IOException, InvalidFormatException, OpenXML4JException, XmlException { + // Only ever an OLE2 one from the root of the FS + return (POIOLE2TextExtractor)createExtractor(fs.getRoot()); + } + public static POIOLE2TextExtractor createExtractor(OPOIFSFileSystem fs) throws IOException, InvalidFormatException, OpenXML4JException, XmlException { + // Only ever an OLE2 one from the root of the FS + return (POIOLE2TextExtractor)createExtractor(fs.getRoot()); + } public static POITextExtractor createExtractor(DirectoryNode poifsDir) throws IOException, InvalidFormatException, OpenXML4JException, XmlException diff --git a/src/ooxml/java/org/apache/poi/ss/usermodel/WorkbookFactory.java b/src/ooxml/java/org/apache/poi/ss/usermodel/WorkbookFactory.java index 80d9b76d4f..3f5d5ea835 100644 --- a/src/ooxml/java/org/apache/poi/ss/usermodel/WorkbookFactory.java +++ b/src/ooxml/java/org/apache/poi/ss/usermodel/WorkbookFactory.java @@ -167,7 +167,7 @@ public class WorkbookFactory { byte[] header8 = IOUtils.peekFirst8Bytes(inp); // Try to create - if (POIFSFileSystem.hasPOIFSHeader(header8)) { + if (NPOIFSFileSystem.hasPOIFSHeader(header8)) { NPOIFSFileSystem fs = new NPOIFSFileSystem(inp); return create(fs, password); } diff --git a/src/scratchpad/src/org/apache/poi/hdgf/dev/VSDDumper.java b/src/scratchpad/src/org/apache/poi/hdgf/dev/VSDDumper.java index ed5e700d06..40a8a7b31e 100644 --- a/src/scratchpad/src/org/apache/poi/hdgf/dev/VSDDumper.java +++ b/src/scratchpad/src/org/apache/poi/hdgf/dev/VSDDumper.java @@ -17,7 +17,7 @@ package org.apache.poi.hdgf.dev; -import java.io.FileInputStream; +import java.io.File; import org.apache.poi.hdgf.HDGFDiagram; import org.apache.poi.hdgf.chunks.Chunk; @@ -26,7 +26,7 @@ import org.apache.poi.hdgf.pointers.Pointer; import org.apache.poi.hdgf.streams.ChunkStream; import org.apache.poi.hdgf.streams.PointerContainingStream; import org.apache.poi.hdgf.streams.Stream; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; /** * Developer helper class to dump out the pointer+stream structure @@ -41,7 +41,7 @@ public final class VSDDumper { } HDGFDiagram hdgf = new HDGFDiagram( - new POIFSFileSystem(new FileInputStream(args[0])) + new NPOIFSFileSystem(new File(args[0])) ); System.out.println("Opened " + args[0]); diff --git a/src/scratchpad/src/org/apache/poi/hdgf/extractor/VisioTextExtractor.java b/src/scratchpad/src/org/apache/poi/hdgf/extractor/VisioTextExtractor.java index 0290d59135..d37a28eb2a 100644 --- a/src/scratchpad/src/org/apache/poi/hdgf/extractor/VisioTextExtractor.java +++ b/src/scratchpad/src/org/apache/poi/hdgf/extractor/VisioTextExtractor.java @@ -62,7 +62,7 @@ public final class VisioTextExtractor extends POIOLE2TextExtractor { this(new HDGFDiagram(dir, fs)); } public VisioTextExtractor(InputStream inp) throws IOException { - this(new POIFSFileSystem(inp)); + this(new NPOIFSFileSystem(inp)); } /** diff --git a/src/scratchpad/src/org/apache/poi/hpbf/HPBFDocument.java b/src/scratchpad/src/org/apache/poi/hpbf/HPBFDocument.java index 69602e7d8b..fb046c8034 100644 --- a/src/scratchpad/src/org/apache/poi/hpbf/HPBFDocument.java +++ b/src/scratchpad/src/org/apache/poi/hpbf/HPBFDocument.java @@ -51,18 +51,9 @@ public final class HPBFDocument extends POIDocument { this(fs.getRoot()); } public HPBFDocument(InputStream inp) throws IOException { - this(new POIFSFileSystem(inp)); + this(new NPOIFSFileSystem(inp)); } - /** - * Opens an embedded publisher document, - * at the given directory. - * @deprecated Use {@link #HPBFDocument(DirectoryNode)} instead - */ - @Deprecated - public HPBFDocument(DirectoryNode dir, POIFSFileSystem fs) throws IOException { - this(dir); - } /** * Opens an embedded publisher document, * at the given directory. diff --git a/src/scratchpad/src/org/apache/poi/hpbf/dev/HPBFDumper.java b/src/scratchpad/src/org/apache/poi/hpbf/dev/HPBFDumper.java index df4bb15a4f..3ea5e9a35a 100644 --- a/src/scratchpad/src/org/apache/poi/hpbf/dev/HPBFDumper.java +++ b/src/scratchpad/src/org/apache/poi/hpbf/dev/HPBFDumper.java @@ -25,7 +25,7 @@ import org.apache.poi.ddf.DefaultEscherRecordFactory; import org.apache.poi.ddf.EscherRecord; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.DocumentEntry; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.StringUtil; @@ -35,12 +35,12 @@ import org.apache.poi.util.StringUtil; * constructed. */ public final class HPBFDumper { - private POIFSFileSystem fs; - public HPBFDumper(POIFSFileSystem fs) { + private NPOIFSFileSystem fs; + public HPBFDumper(NPOIFSFileSystem fs) { this.fs = fs; } public HPBFDumper(InputStream inp) throws IOException { - this(new POIFSFileSystem(inp)); + this(new NPOIFSFileSystem(inp)); } private static byte[] getData(DirectoryNode dir, String name) throws IOException { diff --git a/src/scratchpad/src/org/apache/poi/hpbf/dev/PLCDumper.java b/src/scratchpad/src/org/apache/poi/hpbf/dev/PLCDumper.java index c6bfca93b9..7625a08b85 100644 --- a/src/scratchpad/src/org/apache/poi/hpbf/dev/PLCDumper.java +++ b/src/scratchpad/src/org/apache/poi/hpbf/dev/PLCDumper.java @@ -24,7 +24,7 @@ import java.io.InputStream; import org.apache.poi.hpbf.HPBFDocument; import org.apache.poi.hpbf.model.QuillContents; import org.apache.poi.hpbf.model.qcbits.QCBit; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.util.HexDump; /** @@ -40,11 +40,11 @@ public final class PLCDumper { doc = hpbfDoc; qc = doc.getQuillContents(); } - public PLCDumper(POIFSFileSystem fs) throws IOException { + public PLCDumper(NPOIFSFileSystem fs) throws IOException { this(new HPBFDocument(fs)); } public PLCDumper(InputStream inp) throws IOException { - this(new POIFSFileSystem(inp)); + this(new NPOIFSFileSystem(inp)); } public static void main(String[] args) throws Exception { diff --git a/src/scratchpad/src/org/apache/poi/hpbf/extractor/PublisherTextExtractor.java b/src/scratchpad/src/org/apache/poi/hpbf/extractor/PublisherTextExtractor.java index be238b6f30..2295f235f5 100644 --- a/src/scratchpad/src/org/apache/poi/hpbf/extractor/PublisherTextExtractor.java +++ b/src/scratchpad/src/org/apache/poi/hpbf/extractor/PublisherTextExtractor.java @@ -53,10 +53,6 @@ public final class PublisherTextExtractor extends POIOLE2TextExtractor { public PublisherTextExtractor(InputStream is) throws IOException { this(new POIFSFileSystem(is)); } - @Deprecated - public PublisherTextExtractor(DirectoryNode dir, POIFSFileSystem fs) throws IOException { - this(new HPBFDocument(dir, fs)); - } /** * Should a call to getText() return hyperlinks inline diff --git a/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java b/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java index 5097ea39c0..f5ac0c3b16 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java +++ b/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java @@ -123,7 +123,7 @@ public final class HSLFSlideShow extends POIDocument { */ public HSLFSlideShow(InputStream inputStream) throws IOException { //do Ole stuff - this(new POIFSFileSystem(inputStream)); + this(new NPOIFSFileSystem(inputStream)); } /** @@ -150,22 +150,6 @@ public final class HSLFSlideShow extends POIDocument { this(filesystem.getRoot()); } - /** - * Constructs a Powerpoint document from a specific point in a - * POIFS Filesystem. Parses the document and places all the - * important stuff into data structures. - * - * @deprecated Use {@link #HSLFSlideShow(DirectoryNode)} instead - * @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. - */ - @Deprecated - public HSLFSlideShow(DirectoryNode dir, POIFSFileSystem filesystem) throws IOException - { - this(dir); - } - /** * Constructs a Powerpoint document from a specific point in a * POIFS Filesystem. Parses the document and places all the diff --git a/src/scratchpad/src/org/apache/poi/hslf/dev/PPTXMLDump.java b/src/scratchpad/src/org/apache/poi/hslf/dev/PPTXMLDump.java index 0b57552619..dad74ffa6e 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/dev/PPTXMLDump.java +++ b/src/scratchpad/src/org/apache/poi/hslf/dev/PPTXMLDump.java @@ -18,7 +18,6 @@ package org.apache.poi.hslf.dev; import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; @@ -28,7 +27,7 @@ import java.io.Writer; import org.apache.poi.hslf.record.RecordTypes; import org.apache.poi.poifs.filesystem.DocumentEntry; import org.apache.poi.poifs.filesystem.DocumentInputStream; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.util.LittleEndian; /** @@ -50,9 +49,7 @@ public final class PPTXMLDump { protected boolean hexHeader = true; public PPTXMLDump(File ppt) throws IOException { - FileInputStream fis = new FileInputStream(ppt); - POIFSFileSystem fs = new POIFSFileSystem(fis); - fis.close(); + NPOIFSFileSystem fs = new NPOIFSFileSystem(ppt); //read the document entry from OLE file system DocumentEntry entry = (DocumentEntry)fs.getRoot().getEntry(PPDOC_ENTRY); diff --git a/src/scratchpad/src/org/apache/poi/hslf/dev/SlideShowDumper.java b/src/scratchpad/src/org/apache/poi/hslf/dev/SlideShowDumper.java index 9cb1a45a55..5e122d94ef 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/dev/SlideShowDumper.java +++ b/src/scratchpad/src/org/apache/poi/hslf/dev/SlideShowDumper.java @@ -17,14 +17,17 @@ package org.apache.poi.hslf.dev; -import java.io.*; - -import org.apache.poi.poifs.filesystem.POIFSFileSystem; -import org.apache.poi.poifs.filesystem.DocumentEntry; - -import org.apache.poi.ddf.*; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.ddf.DefaultEscherRecordFactory; +import org.apache.poi.ddf.EscherContainerRecord; +import org.apache.poi.ddf.EscherRecord; +import org.apache.poi.ddf.EscherTextboxRecord; import org.apache.poi.hslf.record.RecordTypes; - +import org.apache.poi.poifs.filesystem.DocumentEntry; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.util.LittleEndian; /** @@ -38,12 +41,9 @@ import org.apache.poi.util.LittleEndian; * To peek inside PPDrawings, which hold Escher drawings, we use the * DDF package from POI (but we can fake it by using the Escher listings * from hslf.record.RecordTypes also) - * - * @author Nick Burch */ public final class SlideShowDumper { - private InputStream istream; - private POIFSFileSystem filesystem; + private NPOIFSFileSystem filesystem; private byte[] _docstream; @@ -92,7 +92,7 @@ public final class SlideShowDumper { */ public SlideShowDumper(String fileName) throws IOException { - this(new FileInputStream(fileName)); + this(new NPOIFSFileSystem(new File(fileName))); } /** @@ -105,8 +105,7 @@ public final class SlideShowDumper { public SlideShowDumper(InputStream inputStream) throws IOException { //do Ole stuff - this(new POIFSFileSystem(inputStream)); - istream = inputStream; + this(new NPOIFSFileSystem(inputStream)); } /** @@ -116,7 +115,7 @@ public final class SlideShowDumper { * @param filesystem the POIFS FileSystem to read from * @throws IOException if there is a problem while parsing the document. */ - public SlideShowDumper(POIFSFileSystem filesystem) throws IOException + public SlideShowDumper(NPOIFSFileSystem filesystem) throws IOException { this.filesystem = filesystem; @@ -153,10 +152,7 @@ public final class SlideShowDumper { */ public void close() throws IOException { - if(istream != null) { - istream.close(); - } - filesystem = null; + filesystem.close(); } diff --git a/src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java b/src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java index d96e2243d1..908bb44e93 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java +++ b/src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java @@ -17,6 +17,7 @@ package org.apache.poi.hslf.extractor; +import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; @@ -83,7 +84,7 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor { * @param fileName The name of the file to extract from */ public PowerPointExtractor(String fileName) throws IOException { - this(new FileInputStream(fileName)); + this(new NPOIFSFileSystem(new File(fileName))); } /** @@ -92,7 +93,7 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor { * @param iStream The input stream containing the PowerPoint document */ public PowerPointExtractor(InputStream iStream) throws IOException { - this(new POIFSFileSystem(iStream)); + this(new NPOIFSFileSystem(iStream)); } /** @@ -123,14 +124,6 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor { this(new HSLFSlideShow(dir)); } - /** - * @deprecated Use {@link #PowerPointExtractor(DirectoryNode)} instead - */ - @Deprecated - public PowerPointExtractor(DirectoryNode dir, POIFSFileSystem fs) throws IOException { - this(new HSLFSlideShow(dir, fs)); - } - /** * Creates a PowerPointExtractor, from a HSLFSlideShow * diff --git a/src/scratchpad/src/org/apache/poi/hslf/extractor/QuickButCruddyTextExtractor.java b/src/scratchpad/src/org/apache/poi/hslf/extractor/QuickButCruddyTextExtractor.java index e449a555e8..45ca0ce631 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/extractor/QuickButCruddyTextExtractor.java +++ b/src/scratchpad/src/org/apache/poi/hslf/extractor/QuickButCruddyTextExtractor.java @@ -17,7 +17,7 @@ package org.apache.poi.hslf.extractor; -import java.io.FileInputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -32,7 +32,7 @@ import org.apache.poi.hslf.record.TextBytesAtom; import org.apache.poi.hslf.record.TextCharsAtom; import org.apache.poi.hslf.record.TextHeaderAtom; import org.apache.poi.poifs.filesystem.DocumentEntry; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.util.LittleEndian; /** @@ -52,11 +52,9 @@ import org.apache.poi.util.LittleEndian; * Almost everyone will want to use @see PowerPointExtractor instead. There * are only a very small number of cases (eg some performance sensitive * lucene indexers) that would ever want to use this! - * - * @author Nick Burch */ public final class QuickButCruddyTextExtractor { - private POIFSFileSystem fs; + private NPOIFSFileSystem fs; private InputStream is; private byte[] pptContents; @@ -84,7 +82,7 @@ public final class QuickButCruddyTextExtractor { * @param fileName */ public QuickButCruddyTextExtractor(String fileName) throws IOException { - this(new FileInputStream(fileName)); + this(new NPOIFSFileSystem(new File(fileName))); } /** @@ -92,7 +90,7 @@ public final class QuickButCruddyTextExtractor { * @param iStream */ public QuickButCruddyTextExtractor(InputStream iStream) throws IOException { - this(new POIFSFileSystem(iStream)); + this(new NPOIFSFileSystem(iStream)); is = iStream; } @@ -100,7 +98,7 @@ public final class QuickButCruddyTextExtractor { * Creates an extractor from a POIFS Filesystem * @param poifs */ - public QuickButCruddyTextExtractor(POIFSFileSystem poifs) throws IOException { + public QuickButCruddyTextExtractor(NPOIFSFileSystem poifs) throws IOException { fs = poifs; // Find the PowerPoint bit, and get out the bytes diff --git a/src/testcases/org/apache/poi/TestPOIDocumentMain.java b/src/testcases/org/apache/poi/TestPOIDocumentMain.java index 4ababd6f46..cacca43b37 100644 --- a/src/testcases/org/apache/poi/TestPOIDocumentMain.java +++ b/src/testcases/org/apache/poi/TestPOIDocumentMain.java @@ -27,7 +27,7 @@ import junit.framework.TestCase; import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.OPOIFSFileSystem; /** * Tests that POIDocument correctly loads and saves the common @@ -97,7 +97,7 @@ public final class TestPOIDocumentMain extends TestCase { // Create a new version ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); - POIFSFileSystem inFS = new POIFSFileSystem(bais); + OPOIFSFileSystem inFS = new OPOIFSFileSystem(bais); // Check they're still there doc.directory = inFS.getRoot(); diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestHPSFBugs.java b/src/testcases/org/apache/poi/hpsf/basic/TestHPSFBugs.java index ff9ba878a5..cd58e159f4 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/TestHPSFBugs.java +++ b/src/testcases/org/apache/poi/hpsf/basic/TestHPSFBugs.java @@ -31,7 +31,7 @@ import org.apache.poi.hpsf.PropertySetFactory; import org.apache.poi.hpsf.SummaryInformation; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.DocumentInputStream; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; /** * Tests various bugs have been fixed @@ -109,8 +109,8 @@ public final class TestHPSFBugs extends TestCase { */ public void test54233() throws Exception { DocumentInputStream dis; - POIFSFileSystem fs = - new POIFSFileSystem(_samples.openResourceAsStream("TestNon4ByteBoundary.doc")); + NPOIFSFileSystem fs = + new NPOIFSFileSystem(_samples.openResourceAsStream("TestNon4ByteBoundary.doc")); dis = fs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME); SummaryInformation si = (SummaryInformation)PropertySetFactory.create(dis); @@ -130,7 +130,7 @@ public final class TestHPSFBugs extends TestCase { ByteArrayOutputStream baos = new ByteArrayOutputStream(); doc.write(baos); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); - doc = new HPSFPropertiesOnlyDocument(new POIFSFileSystem(bais)); + doc = new HPSFPropertiesOnlyDocument(new NPOIFSFileSystem(bais)); // Check properties are still there assertEquals("Microsoft Word 10.0", si.getApplicationName()); @@ -144,8 +144,8 @@ public final class TestHPSFBugs extends TestCase { */ public void test56138() throws Exception { DocumentInputStream dis; - POIFSFileSystem fs = - new POIFSFileSystem(_samples.openResourceAsStream("TestZeroLengthCodePage.mpp")); + NPOIFSFileSystem fs = + new NPOIFSFileSystem(_samples.openResourceAsStream("TestZeroLengthCodePage.mpp")); dis = fs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME); SummaryInformation si = (SummaryInformation)PropertySetFactory.create(dis); diff --git a/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java b/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java index 51cc0ed45f..d544b0b79b 100644 --- a/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java +++ b/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java @@ -17,6 +17,8 @@ package org.apache.poi.hssf; +import java.io.InputStream; + import org.apache.poi.POIDataSamples; import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -38,6 +40,9 @@ public final class HSSFITestDataProvider implements ITestDataProvider { public HSSFWorkbook openSampleWorkbook(String sampleFileName) { return HSSFTestDataSamples.openSampleWorkbook(sampleFileName); } + public InputStream openWorkbookStream(String sampleFileName) { + return HSSFTestDataSamples.openSampleFileStream(sampleFileName); + } public HSSFWorkbook writeOutAndReadBack(Workbook original) { if(!(original instanceof HSSFWorkbook)) { diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index 6c2969a789..36f397c01e 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -58,6 +58,7 @@ import org.apache.poi.hssf.record.aggregates.RecordAggregate; import org.apache.poi.hssf.record.common.UnicodeString; import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; +import org.apache.poi.poifs.filesystem.OPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.formula.ptg.Area3DPtg; import org.apache.poi.ss.formula.ptg.DeletedArea3DPtg; @@ -1566,15 +1567,30 @@ public final class TestBugs extends BaseTestBugzillaIssues { * (is an excel 95 file though) */ @Test - public void bug46904() { + public void bug46904() throws Exception { try { - openSample("46904.xls"); + OPOIFSFileSystem fs = new OPOIFSFileSystem( + HSSFITestDataProvider.instance.openWorkbookStream("46904.xls")); + new HSSFWorkbook(fs.getRoot(), false); fail(); } catch(OldExcelFormatException e) { assertTrue(e.getMessage().startsWith( "The supplied spreadsheet seems to be Excel" )); } + // TODO Fix this to work with NPOIFS as well +/* + try { + NPOIFSFileSystem fs = new NPOIFSFileSystem( + HSSFITestDataProvider.instance.openWorkbookStream("46904.xls")); + new HSSFWorkbook(fs.getRoot(), false); + fail(); + } catch(OldExcelFormatException e) { + assertTrue(e.getMessage().startsWith( + "The supplied spreadsheet seems to be Excel" + )); + } +*/ } /** -- 2.39.5