From 3a0d6d3f8e88cce47a7fc07b80480191334925a6 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 29 Dec 2010 03:30:07 +0000 Subject: [PATCH] Add a NPOIFS aware createDocumentInputStream method to DirectoryNode, and use it in POIDocument. Also fix indent in the latter git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1053522 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/poi/POIDocument.java | 49 ++++++++++--------- .../poi/poifs/filesystem/DirectoryNode.java | 39 +++++++++++++-- 2 files changed, 60 insertions(+), 28 deletions(-) diff --git a/src/java/org/apache/poi/POIDocument.java b/src/java/org/apache/poi/POIDocument.java index b5b01bb641..0bd6b1395c 100644 --- a/src/java/org/apache/poi/POIDocument.java +++ b/src/java/org/apache/poi/POIDocument.java @@ -20,6 +20,7 @@ package org.apache.poi; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.util.Iterator; import java.util.List; @@ -140,31 +141,31 @@ public abstract class POIDocument { * if it wasn't found */ protected PropertySet getPropertySet(String setName) { - //directory can be null when creating new documents - if(directory == null) return null; - - DocumentInputStream dis; - try { - // Find the entry, and get an input stream for it - 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); - return null; - } + //directory can be null when creating new documents + if(directory == null) return null; - try { - // Create the Property Set - PropertySet set = PropertySetFactory.create(dis); - return set; - } catch(IOException ie) { - // Must be corrupt or something like that - logger.log(POILogger.WARN, "Error creating property set with name " + setName + "\n" + ie); - } catch(org.apache.poi.hpsf.HPSFException he) { - // Oh well, doesn't exist - logger.log(POILogger.WARN, "Error creating property set with name " + setName + "\n" + he); - } - return null; + InputStream dis; + try { + // Find the entry, and get an input stream for it + dis = directory.createDocumentInputStream( directory.getEntry(setName) ); + } catch(IOException ie) { + // Oh well, doesn't exist + logger.log(POILogger.WARN, "Error getting property set with name " + setName + "\n" + ie); + return null; + } + + try { + // Create the Property Set + PropertySet set = PropertySetFactory.create(dis); + return set; + } catch(IOException ie) { + // Must be corrupt or something like that + logger.log(POILogger.WARN, "Error creating property set with name " + setName + "\n" + ie); + } catch(org.apache.poi.hpsf.HPSFException he) { + // Oh well, doesn't exist + logger.log(POILogger.WARN, "Error creating property set with name " + setName + "\n" + he); + } + return null; } /** diff --git a/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java b/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java index fe15102b2a..29be005b8b 100644 --- a/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java +++ b/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java @@ -19,9 +19,14 @@ package org.apache.poi.poifs.filesystem; -import java.io.*; - -import java.util.*; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import org.apache.poi.hpsf.ClassID; import org.apache.poi.poifs.dev.POIFSViewable; @@ -162,7 +167,6 @@ public class DirectoryNode * @exception IOException if the document does not exist or the * name is that of a DirectoryEntry */ - public DocumentInputStream createDocumentInputStream( final String documentName) throws IOException @@ -177,6 +181,33 @@ public class DirectoryNode return new DocumentInputStream(( DocumentEntry ) document); } + /** + * open a document in the directory's entry's list of entries + * + * @param documentEntry the document to be opened + * + * @return a newly opened DocumentInputStream or NDocumentInputStream + * + * @exception IOException if the document does not exist or the + * name is that of a DirectoryEntry + */ + public InputStream createDocumentInputStream( + final Entry document) + throws IOException + { + if (!document.isDocumentEntry()) { + throw new IOException("Entry '" + document.getName() + + "' is not a DocumentEntry"); + } + + DocumentEntry entry = (DocumentEntry)document; + if(_ofilesystem != null) { + return new DocumentInputStream(entry); + } else { + return new NDocumentInputStream(entry); + } + } + /** * create a new DocumentEntry * -- 2.39.5