Class PropertySet
- java.lang.Object
-
- org.apache.poi.hpsf.PropertySet
-
- Direct Known Subclasses:
DocumentSummaryInformation,SummaryInformation
public class PropertySet extends Object
Represents a property set in the Horrible Property Set Format (HPSF). These are usually metadata of a Microsoft Office document.An application that wants to access these metadata should create an instance of this class or one of its subclasses by calling the factory method
PropertySetFactory.create(org.apache.poi.poifs.filesystem.DirectoryEntry, java.lang.String)and then retrieve the information its needs by calling appropriate methods.PropertySetFactory.create(org.apache.poi.poifs.filesystem.DirectoryEntry, java.lang.String)does its work by calling one of the constructorsPropertySet(InputStream)orPropertySet(byte[]). If the constructor's argument is not in the Horrible Property Set Format, i.e. not a property set stream, or if any other error occurs, an appropriate exception is thrown.A
PropertySethas a list ofSections, and eachSectionhas aPropertyarray. UsegetSections()to retrieve theSections, then callSection.getProperties()for eachSectionto get hold of thePropertyarrays.Since the vast majority of
PropertySets contains only a singleSection, the convenience methodgetProperties()returns the properties of aPropertySet'sSection(throwing aNoSingleSectionExceptionif thePropertySetcontains more (or less) than exactly oneSection).
-
-
Field Summary
Fields Modifier and Type Field Description static intOS_MACINTOSHIf the OS version field holds this value the property set stream was created on a Macintosh system.static intOS_WIN16If the OS version field holds this value the property set stream was created on a 16-bit Windows system.static intOS_WIN32If the OS version field holds this value the property set stream was created on a 32-bit Windows system.
-
Constructor Summary
Constructors Constructor Description PropertySet()Constructs aPropertySetinstance.PropertySet(byte[] stream)Creates a PropertySet instance from a byte array that represents a stream in the Horrible Property Set Format.PropertySet(byte[] stream, int offset, int length)Creates a PropertySet instance from a byte array that represents a stream in the Horrible Property Set Format.PropertySet(InputStream stream)Creates a PropertySet instance from anInputStreamin the Horrible Property Set Format.PropertySet(PropertySet ps)Constructs aPropertySetby doing a deep copy of an existingPropertySet.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddSection(Section section)Adds a section to this property set.voidclearSections()Removes all sections from this property set.booleanequals(Object o)Returnstrueif thePropertySetis equal to the specified parameter, elsefalse.intgetByteOrder()ClassIDgetClassID()SectiongetFirstSection()Gets the PropertySets first section.intgetFormat()intgetOSVersion()Property[]getProperties()Convenience method returning thePropertyarray contained in this property set.protected ObjectgetProperty(int id)Convenience method returning the value of the property with the specified ID.PropertyIDMapgetPropertySetIDMap()The id to name mapping of the properties in this set.static StringgetPropertyStringValue(Object propertyValue)Return the string representation of a property valueintgetSectionCount()List<Section>getSections()inthashCode()booleanisDocumentSummaryInformation()Checks whether this PropertySet is a Document Summary Information.static booleanisPropertySetStream(byte[] src, int offset, int length)Checks whether a byte array is in the Horrible Property Set Format.static booleanisPropertySetStream(InputStream stream)Checks whether anInputStreamis in the Horrible Property Set Format.booleanisSummaryInformation()Checks whether this PropertySet represents a Summary Information.voidsetByteOrder(int byteOrder)Returns the property set stream's low-level "byte order" field.voidsetClassID(ClassID classID)Sets the property set stream's low-level "class ID" field.voidsetFormat(int format)Sets the property set stream's low-level "format" field.voidsetOSVersion(int osVersion)Sets the property set stream's low-level "OS version" field.InputStreamtoInputStream()Returns the contents of this property set stream as an input stream.StringtoString()booleanwasNull()Checks whether the property which the last call togetPropertyIntValue(int)orgetProperty(int)tried to access was available or not.voidwrite(OutputStream out)Writes the property set to an output stream.voidwrite(DirectoryEntry dir, String name)Writes a property set to a document in a POI filesystem directory.
-
-
-
Field Detail
-
OS_WIN16
public static final int OS_WIN16
If the OS version field holds this value the property set stream was created on a 16-bit Windows system.- See Also:
- Constant Field Values
-
OS_MACINTOSH
public static final int OS_MACINTOSH
If the OS version field holds this value the property set stream was created on a Macintosh system.- See Also:
- Constant Field Values
-
OS_WIN32
public static final int OS_WIN32
If the OS version field holds this value the property set stream was created on a 32-bit Windows system.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
PropertySet
public PropertySet()
Constructs aPropertySetinstance. Its primary task is to initialize the field with their proper values. It also sets fields that might change to reasonable defaults.
-
PropertySet
public PropertySet(InputStream stream) throws NoPropertySetStreamException, IOException
Creates a PropertySet instance from anInputStreamin the Horrible Property Set Format.The constructor reads the first few bytes from the stream and determines whether it is really a property set stream. If it is, it parses the rest of the stream. If it is not, it resets the stream to its beginning in order to let other components mess around with the data and throws an exception.
- Parameters:
stream- Holds the data making out the property set stream.- Throws:
IOException- if theInputStreamcannot be accessed as needed.NoPropertySetStreamException- if the input stream does not contain a property set.UnsupportedEncodingException- if a character encoding is not supported.
-
PropertySet
public PropertySet(byte[] stream, int offset, int length) throws NoPropertySetStreamException, UnsupportedEncodingExceptionCreates a PropertySet instance from a byte array that represents a stream in the Horrible Property Set Format.- Parameters:
stream- The byte array holding the stream data.offset- The offset instreamwhere the stream data begin. If the stream data begin with the first byte in the array, theoffsetis 0.length- The length of the stream data.- Throws:
NoPropertySetStreamException- if the byte array is not a property set stream.UnsupportedEncodingException- if the codepage is not supported.
-
PropertySet
public PropertySet(byte[] stream) throws NoPropertySetStreamException, UnsupportedEncodingExceptionCreates a PropertySet instance from a byte array that represents a stream in the Horrible Property Set Format.- Parameters:
stream- The byte array holding the stream data. The complete byte array contents is the stream data.- Throws:
NoPropertySetStreamException- if the byte array is not a property set stream.UnsupportedEncodingException- if the codepage is not supported.
-
PropertySet
public PropertySet(PropertySet ps)
Constructs aPropertySetby doing a deep copy of an existingPropertySet. All nested elements, i.e.Sections andPropertyinstances, will be their counterparts in the newPropertySet.- Parameters:
ps- The property set to copy
-
-
Method Detail
-
getByteOrder
public int getByteOrder()
- Returns:
- The property set stream's low-level "byte order" field. It is always
0xFFFE.
-
setByteOrder
public void setByteOrder(int byteOrder)
Returns the property set stream's low-level "byte order" field.- Parameters:
byteOrder- The property set stream's low-level "byte order" field.
-
getFormat
public int getFormat()
- Returns:
- The property set stream's low-level "format" field. It is always
0x0000.
-
setFormat
public void setFormat(int format)
Sets the property set stream's low-level "format" field.- Parameters:
format- The property set stream's low-level "format" field.
-
getOSVersion
public int getOSVersion()
- Returns:
- The property set stream's low-level "OS version" field.
-
setOSVersion
public void setOSVersion(int osVersion)
Sets the property set stream's low-level "OS version" field.- Parameters:
osVersion- The property set stream's low-level "OS version" field.
-
getClassID
public ClassID getClassID()
- Returns:
- The property set stream's low-level "class ID" field.
-
setClassID
public void setClassID(ClassID classID)
Sets the property set stream's low-level "class ID" field.- Parameters:
classID- The property set stream's low-level "class ID" field.
-
getSectionCount
public int getSectionCount()
- Returns:
- The number of
Sections in the property set.
-
getSections
public List<Section> getSections()
- Returns:
- The unmodifiable list of
Sections in the property set.
-
addSection
public void addSection(Section section)
Adds a section to this property set.- Parameters:
section- TheSectionto add. It will be appended after any sections that are already present in the property set and thus become the last section.
-
clearSections
public void clearSections()
Removes all sections from this property set.
-
getPropertySetIDMap
public PropertyIDMap getPropertySetIDMap()
The id to name mapping of the properties in this set.- Returns:
- the id to name mapping of the properties in this set or
nullif not applicable
-
isPropertySetStream
public static boolean isPropertySetStream(InputStream stream) throws IOException
Checks whether anInputStreamis in the Horrible Property Set Format.- Parameters:
stream- TheInputStreamto check. In order to perform the check, the method reads the first bytes from the stream. After reading, the stream is reset to the position it had before reading. TheInputStreammust support theInputStream.mark(int)method.- Returns:
trueif the stream is a property set stream, elsefalse.- Throws:
IOException- if an I/O error occurs
-
isPropertySetStream
public static boolean isPropertySetStream(byte[] src, int offset, int length)Checks whether a byte array is in the Horrible Property Set Format.- Parameters:
src- The byte array to check.offset- The offset in the byte array.length- The significant number of bytes in the byte array. Only this number of bytes will be checked.- Returns:
trueif the byte array is a property set stream,falseif not.
-
write
public void write(OutputStream out) throws IOException, WritingNotSupportedException
Writes the property set to an output stream.- Parameters:
out- the output stream to write the section to- Throws:
IOException- if an error when writing to the output stream occursWritingNotSupportedException- if HPSF does not yet support writing a property's variant type.
-
write
public void write(DirectoryEntry dir, String name) throws WritingNotSupportedException, IOException
Writes a property set to a document in a POI filesystem directory.- Parameters:
dir- The directory in the POI filesystem to write the document to.name- The document's name. If there is already a document with the same name in the directory the latter will be overwritten.- Throws:
WritingNotSupportedException- if the filesystem doesn't support writingIOException- if the old entry can't be deleted or the new entry be written
-
toInputStream
public InputStream toInputStream() throws WritingNotSupportedException, IOException
Returns the contents of this property set stream as an input stream. The latter can be used for example to write the property set into a POIFS document. The input stream represents a snapshot of the property set. If the latter is modified while the input stream is still being read, the modifications will not be reflected in the input stream but in the PropertySet only.- Returns:
- the contents of this property set stream
- Throws:
WritingNotSupportedException- if HPSF does not yet support writing of a property's variant type.IOException- if an I/O exception occurs.
-
getPropertyStringValue
public static String getPropertyStringValue(Object propertyValue)
Return the string representation of a property value- Parameters:
propertyValue- the property value- Returns:
- The property value as a String, or null if unavailable
-
isSummaryInformation
public boolean isSummaryInformation()
Checks whether this PropertySet represents a Summary Information.- Returns:
trueif this PropertySet represents a Summary Information, elsefalse.
-
isDocumentSummaryInformation
public boolean isDocumentSummaryInformation()
Checks whether this PropertySet is a Document Summary Information.- Returns:
trueif this PropertySet represents a Document Summary Information, elsefalse.
-
getProperties
public Property[] getProperties() throws NoSingleSectionException
Convenience method returning thePropertyarray contained in this property set. It is a shortcut for getting he PropertySetsSections list and then getting thePropertyarray from the firstSection.- Returns:
- The properties of the only
Sectionof this PropertySet. - Throws:
NoSingleSectionException- if the PropertySet has more or less than oneSection.
-
getProperty
protected Object getProperty(int id) throws NoSingleSectionException
Convenience method returning the value of the property with the specified ID. If the property is not available,nullis returned and a subsequent call towasNull()will returntrue.- Parameters:
id- The property ID- Returns:
- The property value
- Throws:
NoSingleSectionException- if the PropertySet has more or less than oneSection.
-
wasNull
public boolean wasNull() throws NoSingleSectionExceptionChecks whether the property which the last call togetPropertyIntValue(int)orgetProperty(int)tried to access was available or not. This information might be important for callers ofgetPropertyIntValue(int)since the latter returns 0 if the property does not exist. Using wasNull, the caller can distinguish this case from a property's real value of 0.- Returns:
trueif the last call togetPropertyIntValue(int)orgetProperty(int)tried to access a property that was not available, elsefalse.- Throws:
NoSingleSectionException- if the PropertySet has more than oneSection.
-
getFirstSection
public Section getFirstSection()
Gets the PropertySets first section.- Returns:
- The PropertySets first section.
-
equals
public boolean equals(Object o)
Returnstrueif thePropertySetis equal to the specified parameter, elsefalse.
-
hashCode
@NotImplemented public int hashCode()
-
-