]> source.dussan.org Git - poi.git/commitdiff
*** empty log message ***
authorRainer Klute <klute@apache.org>
Tue, 5 Aug 2003 20:52:25 +0000 (20:52 +0000)
committerRainer Klute <klute@apache.org>
Tue, 5 Aug 2003 20:52:25 +0000 (20:52 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353291 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/hpsf/internals.xml
src/testcases/org/apache/poi/hpsf/basic/Util.java

index b6a74591d34852b188e8815e208d97886cb7d562..e3a738c910e392144ec90cd3847e43388eb238ce 100644 (file)
@@ -32,9 +32,9 @@
      <strong>property set stream</strong>.</p>
 
     <p>This document describes the internal structure of a property set stream,
-     i.e. the <strong>Horrible Property Set Format (HWPF)</strong>.  It does not
-     describe how a Microsoft Office document is organized internally and how
-     to retrieve a stream from it. See the <link
+     i.e. the <strong>Horrible Property Set Format (HPSF)</strong>.  It does
+     not describe how a Microsoft Office document is organized internally and
+     how to retrieve a stream from it. See the <link
       href="../poifs/index.html">POIFS documentation</link> for that kind of
      stuff.</p>
 
        <td>Denotes the operating system and the OS version under which this
         stream was created. The operating system ID is in the DWord's higher
         word (after little endian decoding): <code>0x0000</code> for Win16,
-        <code>0x0001</code> for Macintosh and <code>0x0002</code> for Win32 - that's
-        all. The reader is most likely aware of the fact that there are some
-        more operating systems. However, Microsoft does not seem to know.</td>
+        <code>0x0001</code> for Macintosh and <code>0x0002</code> for Win32 -
+         that's all. The reader is most likely aware of the fact that there are
+         some more operating systems. However, Microsoft does not seem to
+       know.</td>
       <td></td>
       </tr>
 
index 75e7aa72e50f86b97225a35794b9b5876a50fdfb..7c30fd9f07c67bc48a3b144e2a13207293207913 100644 (file)
@@ -69,6 +69,11 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Properties;
 
+import org.apache.poi.hpsf.MarkUnsupportedException;
+import org.apache.poi.hpsf.NoPropertySetStreamException;
+import org.apache.poi.hpsf.PropertySet;
+import org.apache.poi.hpsf.PropertySetFactory;
+import org.apache.poi.hpsf.UnexpectedPropertySetTypeException;
 import org.apache.poi.poifs.eventfilesystem.POIFSReader;
 import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
 import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
@@ -177,11 +182,11 @@ public class Util
             {
                 try
                 {
-                    POIFile f = new POIFile();
+                    final POIFile f = new POIFile();
                     f.setName(event.getName());
                     f.setPath(event.getPath());
-                    InputStream in = event.getStream();
-                    ByteArrayOutputStream out = new ByteArrayOutputStream();
+                    final InputStream in = event.getStream();
+                    final ByteArrayOutputStream out = new ByteArrayOutputStream();
                     Util.copy(in, out);
                     out.close();
                     f.setBytes(out.toByteArray());
@@ -213,6 +218,68 @@ public class Util
 
 
 
+    /**
+     * <p>Read all files from a POI filesystem which are property set streams
+     * and returns them as an array of {@link org.apache.poi.hpsf.PropertySet}
+     * instances.</p>
+     * 
+     * @param poiFs The name of the POI filesystem as seen by the
+     * operating system. (This is the "filename".)
+     *
+     * @return The property sets. The elements are ordered in the same way
+     * as the files in the POI filesystem.
+     * 
+     * @exception FileNotFoundException if the file containing the POI 
+     * filesystem does not exist
+     * 
+     * @exception IOException if an I/O exception occurs
+     */
+    public static POIFile[] readPropertySets(final File poiFs)
+        throws FileNotFoundException, IOException
+    {
+        final List files = new ArrayList(7);
+        final POIFSReader r = new POIFSReader();
+        POIFSReaderListener pfl = new POIFSReaderListener()
+        {
+            public void processPOIFSReaderEvent(final POIFSReaderEvent event)
+            {
+                try
+                {
+                    final POIFile f = new POIFile();
+                    f.setName(event.getName());
+                    f.setPath(event.getPath());
+                    final InputStream in = event.getStream();
+                    if (PropertySet.isPropertySetStream(in))
+                    {
+                        final ByteArrayOutputStream out =
+                            new ByteArrayOutputStream();
+                        Util.copy(in, out);
+                        out.close();
+                        f.setBytes(out.toByteArray());
+                        files.add(f);
+                    }
+                }
+                catch (Exception ex)
+                {
+                    ex.printStackTrace();
+                    throw new RuntimeException(ex.getMessage());
+                }
+            }
+        };
+
+        /* Register the listener for all POI files. */
+        r.registerListener(pfl);
+
+        /* Read the POI filesystem. */
+        r.read(new FileInputStream(poiFs));
+        POIFile[] result = new POIFile[files.size()];
+        for (int i = 0; i < result.length; i++)
+            result[i] = (POIFile) files.get(i);
+        return result;
+    }
+
+
+
     /**
      * <p>Prints the system properties to System.out.</p>
      */