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
This commit is contained in:
Nick Burch 2014-04-28 14:19:13 +00:00
parent 52c6fd587c
commit ba4225395f
2 changed files with 43 additions and 26 deletions

View File

@ -26,14 +26,11 @@ import org.apache.poi.hpsf.CustomProperties;
import org.apache.poi.hpsf.DocumentSummaryInformation; import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.MarkUnsupportedException; import org.apache.poi.hpsf.MarkUnsupportedException;
import org.apache.poi.hpsf.NoPropertySetStreamException; import org.apache.poi.hpsf.NoPropertySetStreamException;
import org.apache.poi.hpsf.PropertySet;
import org.apache.poi.hpsf.PropertySetFactory; import org.apache.poi.hpsf.PropertySetFactory;
import org.apache.poi.hpsf.SummaryInformation; import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hpsf.UnexpectedPropertySetTypeException; import org.apache.poi.hpsf.UnexpectedPropertySetTypeException;
import org.apache.poi.hpsf.WritingNotSupportedException; import org.apache.poi.hpsf.WritingNotSupportedException;
import org.apache.poi.poifs.filesystem.DirectoryEntry; 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; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
/** /**
@ -105,17 +102,12 @@ public class ModifyDocumentSummaryInformation {
SummaryInformation si; SummaryInformation si;
try try
{ {
DocumentEntry siEntry = (DocumentEntry) si = (SummaryInformation)PropertySetFactory.create(
dir.getEntry(SummaryInformation.DEFAULT_STREAM_NAME); dir, SummaryInformation.DEFAULT_STREAM_NAME);
DocumentInputStream dis = new DocumentInputStream(siEntry);
PropertySet ps = new PropertySet(dis);
dis.close();
si = new SummaryInformation(ps);
} }
catch (FileNotFoundException ex) catch (FileNotFoundException ex)
{ {
/* There is no summary information yet. We have to create a new // There is no summary information yet. We have to create a new one
* one. */
si = PropertySetFactory.newSummaryInformation(); si = PropertySetFactory.newSummaryInformation();
} }
@ -133,12 +125,8 @@ public class ModifyDocumentSummaryInformation {
DocumentSummaryInformation dsi; DocumentSummaryInformation dsi;
try try
{ {
DocumentEntry dsiEntry = (DocumentEntry) dsi = (DocumentSummaryInformation)PropertySetFactory.create(
dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME); dir, DocumentSummaryInformation.DEFAULT_STREAM_NAME);
DocumentInputStream dis = new DocumentInputStream(dsiEntry);
PropertySet ps = new PropertySet(dis);
dis.close();
dsi = new DocumentSummaryInformation(ps);
} }
catch (FileNotFoundException ex) catch (FileNotFoundException ex)
{ {

View File

@ -17,21 +17,55 @@
package org.apache.poi.hpsf; package org.apache.poi.hpsf;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import org.apache.poi.hpsf.wellknown.SectionIDMap; 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}, * <p>Factory class to create instances of {@link SummaryInformation},
* {@link DocumentSummaryInformation} and {@link PropertySet}.</p> * {@link DocumentSummaryInformation} and {@link PropertySet}.</p>
*
* @author Rainer Klute <a
* href="mailto:klute@rainer-klute.de">&lt;klute@rainer-klute.de&gt;</a>
*/ */
public class PropertySetFactory 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 * <p>Creates the most specific {@link PropertySet} from an {@link
@ -73,8 +107,6 @@ public class PropertySetFactory
} }
} }
/** /**
* <p>Creates a new summary information.</p> * <p>Creates a new summary information.</p>
* *
@ -96,8 +128,6 @@ public class PropertySetFactory
} }
} }
/** /**
* <p>Creates a new document summary information.</p> * <p>Creates a new document summary information.</p>
* *
@ -118,5 +148,4 @@ public class PropertySetFactory
throw new HPSFRuntimeException(ex); throw new HPSFRuntimeException(ex);
} }
} }
}
}