-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!doctype html public "-//W3C//DTD HTML 4.0//EN//">
+
<html>
-<head>
-</head>
-<body bgcolor="white">
+ <head>
+ <title>HPSF</title>
+ </head>
+
+ <body>
+ <div>
+ Horrible PropertySet Format API reads things like Document Summary info from
+ OLE 2 Compound document files.
+ <p>Processes streams in the Horrible Property Set Format (HPSF) in POI
+ filesystems. Microsoft Office documents, i.e. POI filesystems, usually
+ contain meta data like author, title, last editing date etc. These items
+ are called <strong>properties</strong> and stored in
+ <strong>property set streams</strong> along with the document itself. These
+ streams are commonly named <tt>\005SummaryInformation</tt> and
+ <tt>\005DocumentSummaryInformation</tt>. However, a POI filesystem may
+ contain further property sets of other names or types.</p>
+
+ <p>In order to extract the properties from a POI filesystem, a property set
+ stream's contents must be parsed into a {@link
+ org.apache.poi.hpsf.PropertySet} instance. Its subclasses {@link
+ org.apache.poi.hpsf.SummaryInformation} and {@link
+ org.apache.poi.hpsf.DocumentSummaryInformation} deal with the well-known
+ property set streams <tt>\005SummaryInformation</tt> and
+ <tt>\005DocumentSummaryInformation</tt>. (However, the streams' names are
+ irrelevant. What counts is the property set's first section's format ID -
+ see below.)</p>
+
+ <p>The factory method {@link org.apache.poi.hpsf.PropertySetFactory#create}
+ creates a {@link org.apache.poi.hpsf.PropertySet} instance. This method
+ always returns the <strong>most specific property set</strong>: If it
+ identifies the stream data as a Summary Information or as a Document
+ Summary Information it returns an instance of the corresponding class, else
+ the general {@link org.apache.poi.hpsf.PropertySet}.</p>
+
+ <p>A {@link org.apache.poi.hpsf.PropertySet} contains a list of {@link
+ org.apache.poi.hpsf.Section}s which can be retrieved with {@link
+ org.apache.poi.hpsf.PropertySet#getSections}. Each {@link
+ org.apache.poi.hpsf.Section} contains a {@link
+ org.apache.poi.hpsf.Property} array which can be retrieved with {@link
+ org.apache.poi.hpsf.Section#getProperties}. Since the vast majority of
+ {@link org.apache.poi.hpsf.PropertySet}s contains only a single {@link
+ org.apache.poi.hpsf.Section}, the convenience method {@link
+ org.apache.poi.hpsf.PropertySet#getProperties} returns the properties of a
+ {@link org.apache.poi.hpsf.PropertySet}'s {@link
+ org.apache.poi.hpsf.Section} (throwing a {@link
+ org.apache.poi.hpsf.NoSingleSectionException} if the {@link
+ org.apache.poi.hpsf.PropertySet} contains more (or less) than exactly one
+ {@link org.apache.poi.hpsf.Section}).</p>
+
+ <p>Each {@link org.apache.poi.hpsf.Property} has an <strong>ID</strong>, a
+ <strong>type</strong>, and a <strong>value</strong> which can be retrieved
+ with {@link org.apache.poi.hpsf.Property#getID}, {@link
+ org.apache.poi.hpsf.Property#getType}, and {@link
+ org.apache.poi.hpsf.Property#getValue}, respectively. The value's class
+ depends on the property's type. <!-- FIXME: --> The current implementation
+ does not yet support all property types and restricts the values' classes
+ to {@link java.lang.String}, {@link java.lang.Integer} and {@link
+ java.util.Date}. A value of a yet unknown type is returned as a byte array
+ containing the value's origin bytes from the property set stream.</p>
+
+ <p>To retrieve the value of a specific {@link org.apache.poi.hpsf.Property},
+ use {@link org.apache.poi.hpsf.Section#getProperty} or {@link
+ org.apache.poi.hpsf.Section#getPropertyIntValue}.</p>
+
+ <p>The {@link org.apache.poi.hpsf.SummaryInformation} and {@link
+ org.apache.poi.hpsf.DocumentSummaryInformation} classes provide convenience
+ methods for retrieving well-known properties. For example, an application
+ that wants to retrieve a document's title string just calls {@link
+ org.apache.poi.hpsf.SummaryInformation#getTitle} instead of going through
+ the hassle of first finding out what the title's property ID is and then
+ using this ID to get the property's value.</p>
+
+ <div>
+ <h2>To Do</h2>
-Horrible Property Set Format API is a way to read things like Document Summary information from
-OLE 2 Compound Document files.
+ <p>The following is still left to be implemented:</p>
-<h2>Related Documentation</h2>
+ <ul>
-For overviews, tutorials, examples, guides, and tool documentation, please see:
-<ul>
-<li><a href="http://jakarta.apache.org/poi">Jakarta POI Project</a>
-</ul>
+ <li>
+ <p>Property dictionaries</p>
+ </li>
-<!-- Put @see and @since tags down here. -->
-@see org.apache.poi.poifs
-@see org.apache.poi.hssf
-</body>
+ <li>
+ <p>Writing property sets</p>
+ </li>
+
+ <li>
+ <p>Codepage support</p>
+ </li>
+
+ <li>
+ <p>Property type Unicode string</p>
+ </li>
+
+ <li>
+ <p>Further property types</p>
+ </li>
+
+ </ul>
+
+ </div>
+
+ <p>
+ @author Rainer Klute (klute@rainer-klute.de)
+ @version $Id$
+ @since 2002-02-09
+ </p>
+ </div>
+
+ </body>
</html>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+sgml-default-dtd-file:"HTML_4.0_Strict.ced"
+mode: html
+sgml-omittag:t
+sgml-shorttag:nil
+sgml-namecase-general:t
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->