From 53621f0c8c369adab1493cefdb98adc33dfe6987 Mon Sep 17 00:00:00 2001 From: Rainer Klute Date: Tue, 5 Aug 2003 20:52:25 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353291 13f79535-47bb-0310-9956-ffa450edef68 --- .../content/xdocs/hpsf/internals.xml | 13 ++-- .../org/apache/poi/hpsf/basic/Util.java | 73 ++++++++++++++++++- 2 files changed, 77 insertions(+), 9 deletions(-) diff --git a/src/documentation/content/xdocs/hpsf/internals.xml b/src/documentation/content/xdocs/hpsf/internals.xml index b6a74591d3..e3a738c910 100644 --- a/src/documentation/content/xdocs/hpsf/internals.xml +++ b/src/documentation/content/xdocs/hpsf/internals.xml @@ -32,9 +32,9 @@ property set stream.

This document describes the internal structure of a property set stream, - i.e. the Horrible Property Set Format (HWPF). It does not - describe how a Microsoft Office document is organized internally and how - to retrieve a stream from it. See the Horrible Property Set Format (HPSF). It does + not describe how a Microsoft Office document is organized internally and + how to retrieve a stream from it. See the POIFS documentation for that kind of stuff.

@@ -172,9 +172,10 @@ 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): 0x0000 for Win16, - 0x0001 for Macintosh and 0x0002 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. + 0x0001 for Macintosh and 0x0002 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. diff --git a/src/testcases/org/apache/poi/hpsf/basic/Util.java b/src/testcases/org/apache/poi/hpsf/basic/Util.java index 75e7aa72e5..7c30fd9f07 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/Util.java +++ b/src/testcases/org/apache/poi/hpsf/basic/Util.java @@ -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 + /** + *

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.

+ * + * @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; + } + + + /** *

Prints the system properties to System.out.

*/