]> source.dussan.org Git - poi.git/commitdiff
Add a NPOIFS aware createDocumentInputStream method to DirectoryNode, and use it...
authorNick Burch <nick@apache.org>
Wed, 29 Dec 2010 03:30:07 +0000 (03:30 +0000)
committerNick Burch <nick@apache.org>
Wed, 29 Dec 2010 03:30:07 +0000 (03:30 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1053522 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/POIDocument.java
src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java

index b5b01bb64136842ce949ca7fc06264fe816a2eeb..0bd6b1395c4e5dc698ba3ea0649a322b52a080c7 100644 (file)
@@ -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;
        }
        
        /**
index fe15102b2af7a564eb266735517e403040381750..29be005b8b3aa68e03e1bb534cb4c88463956443 100644 (file)
 
 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
      *