From ba4225395ff74b28d6e72d783d77f9afc359e092 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Mon, 28 Apr 2014 14:19:13 +0000 Subject: [PATCH] Provide a convenience method for creating a PropertySet from a Directory + Entry git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1590650 13f79535-47bb-0310-9956-ffa450edef68 --- .../ModifyDocumentSummaryInformation.java | 22 ++------- .../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 9c4bc2613..a051b94a9 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 6bff472e6..4d4b4e638 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; /** *

Factory class to create instances of {@link SummaryInformation}, * {@link DocumentSummaryInformation} and {@link PropertySet}.

- * - * @author Rainer Klute <klute@rainer-klute.de> */ public class PropertySetFactory { + /** + *

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.

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

Creates the most specific {@link PropertySet} from an {@link @@ -73,8 +107,6 @@ public class PropertySetFactory } } - - /** *

Creates a new summary information.

* @@ -96,8 +128,6 @@ public class PropertySetFactory } } - - /** *

Creates a new document summary information.

* @@ -118,5 +148,4 @@ public class PropertySetFactory throw new HPSFRuntimeException(ex); } } - -} +} \ No newline at end of file