diff options
-rw-r--r-- | src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java | 22 | ||||
-rw-r--r-- | src/java/org/apache/poi/hpsf/PropertySetFactory.java | 47 |
2 files changed, 43 insertions, 26 deletions
diff --git a/src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java b/src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java index 9c4bc26135..a051b94a98 100644 --- a/src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java +++ b/src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java @@ -26,14 +26,11 @@ import org.apache.poi.hpsf.CustomProperties; import org.apache.poi.hpsf.DocumentSummaryInformation; 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.SummaryInformation; import org.apache.poi.hpsf.UnexpectedPropertySetTypeException; import org.apache.poi.hpsf.WritingNotSupportedException; import org.apache.poi.poifs.filesystem.DirectoryEntry; -import org.apache.poi.poifs.filesystem.DocumentEntry; -import org.apache.poi.poifs.filesystem.DocumentInputStream; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; /** @@ -105,17 +102,12 @@ public class ModifyDocumentSummaryInformation { SummaryInformation si; try { - DocumentEntry siEntry = (DocumentEntry) - dir.getEntry(SummaryInformation.DEFAULT_STREAM_NAME); - DocumentInputStream dis = new DocumentInputStream(siEntry); - PropertySet ps = new PropertySet(dis); - dis.close(); - si = new SummaryInformation(ps); + si = (SummaryInformation)PropertySetFactory.create( + dir, SummaryInformation.DEFAULT_STREAM_NAME); } catch (FileNotFoundException ex) { - /* There is no summary information yet. We have to create a new - * one. */ + // There is no summary information yet. We have to create a new one si = PropertySetFactory.newSummaryInformation(); } @@ -133,12 +125,8 @@ public class ModifyDocumentSummaryInformation { DocumentSummaryInformation dsi; try { - DocumentEntry dsiEntry = (DocumentEntry) - dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME); - DocumentInputStream dis = new DocumentInputStream(dsiEntry); - PropertySet ps = new PropertySet(dis); - dis.close(); - dsi = new DocumentSummaryInformation(ps); + dsi = (DocumentSummaryInformation)PropertySetFactory.create( + dir, DocumentSummaryInformation.DEFAULT_STREAM_NAME); } catch (FileNotFoundException ex) { diff --git a/src/java/org/apache/poi/hpsf/PropertySetFactory.java b/src/java/org/apache/poi/hpsf/PropertySetFactory.java index 6bff472e6a..4d4b4e6386 100644 --- a/src/java/org/apache/poi/hpsf/PropertySetFactory.java +++ b/src/java/org/apache/poi/hpsf/PropertySetFactory.java @@ -17,21 +17,55 @@ package org.apache.poi.hpsf; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import org.apache.poi.hpsf.wellknown.SectionIDMap; +import org.apache.poi.poifs.filesystem.DirectoryEntry; +import org.apache.poi.poifs.filesystem.DocumentEntry; +import org.apache.poi.poifs.filesystem.DocumentInputStream; /** * <p>Factory class to create instances of {@link SummaryInformation}, * {@link DocumentSummaryInformation} and {@link PropertySet}.</p> - * - * @author Rainer Klute <a - * href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a> */ public class PropertySetFactory { + /** + * <p>Creates the most specific {@link PropertySet} from an entry + * in the specified POIFS Directory. This is preferrably a {@link + * DocumentSummaryInformation} or a {@link SummaryInformation}. If + * the specified entry does not contain a property set stream, an + * exception is thrown. If no entry is found with the given name, + * an exception is thrown.</p> + * + * @param dir The directory to find the PropertySet in + * @param name The name of the entry containing the PropertySet + * @return The created {@link PropertySet}. + * @throws FileNotFoundException if there is no entry with that name + * @throws NoPropertySetStreamException if the stream does not + * contain a property set. + * @throws IOException if some I/O problem occurs. + * @exception UnsupportedEncodingException if the specified codepage is not + * supported. + */ + public static PropertySet create(final DirectoryEntry dir, final String name) + throws FileNotFoundException, NoPropertySetStreamException, + IOException, UnsupportedEncodingException + { + InputStream inp = null; + try { + DocumentEntry entry = (DocumentEntry)dir.getEntry(name); + inp = new DocumentInputStream(entry); + try { + return create(inp); + } catch (MarkUnsupportedException e) { return null; } + } finally { + if (inp != null) inp.close(); + } + } /** * <p>Creates the most specific {@link PropertySet} from an {@link @@ -73,8 +107,6 @@ public class PropertySetFactory } } - - /** * <p>Creates a new summary information.</p> * @@ -96,8 +128,6 @@ public class PropertySetFactory } } - - /** * <p>Creates a new document summary information.</p> * @@ -118,5 +148,4 @@ public class PropertySetFactory throw new HPSFRuntimeException(ex); } } - -} +}
\ No newline at end of file |