## org.apache.poi.hpsf
Class MutableSection

    java.lang.Object
      org.apache.poi.hpsf.Section
          org.apache.poi.hpsf.MutableSection

    public class MutableSection

extends Section

Adds writing capability to the `Section` class.

Please be aware that this class' functionality will be merged into the `Section` class at a later time, so the API will change.

Field Summary

Fields inherited from class org.apache.poi.hpsf.Section
`dictionary, formatID, offset, properties, size`

Constructor Summary
`MutableSection()` Creates an empty mutable section.
`MutableSection(Section s)` Constructs a `MutableSection` by doing a deep copy of an existing `Section`.

Method Summary
`void` `clear()` Removes all properties from the section including 0 (dictionary) and 1 (codepage).
`Property[]` `getProperties()` Gets this section's properties.
`java.lang.Object` `getProperty(long id)` Gets a property.
`int` `getPropertyCount()` Overwrites the super class' method to cope with a redundancy: the property count is maintained in a separate member variable, but shouldn't.
`int` `getSize()` Returns the section's size.
`void` `removeProperty(long id)` Removes a property.
`void` `setCodepage(int codepage)` Sets the codepage.
`void` `setDictionary(java.util.Map<java.lang.Long,java.lang.String> dictionary)` Sets the section's dictionary.
`void` `setFormatID(byte[] formatID)` Sets the section's format ID.
`void` `setFormatID(ClassID formatID)` Sets the section's format ID.
`void` `setProperties(Property[] properties)` Sets this section's properties.
`void` `setProperty(int id, boolean value)` Sets the boolean value of the property with the specified ID.
`void` `setProperty(int id, int value)` Sets the int value of the property with the specified ID.
`void` `setProperty(int id, long value)` Sets the long value of the property with the specified ID.
`void` `setProperty(int id, long variantType, java.lang.Object value)` Sets the value and the variant type of the property with the specified ID.
`void` `setProperty(int id, java.lang.Object value)` Sets a property.
`void` `setProperty(int id, java.lang.String value)` Sets the string value of the property with the specified ID.
`void` `setProperty(Property p)` Sets a property.
`protected void` `setPropertyBooleanValue(int id, boolean value)` Sets the value of the boolean property with the specified ID.
`int` `write(java.io.OutputStream out)` Writes this section into an output stream.

Methods inherited from class org.apache.poi.hpsf.Section
`equals, getCodepage, getDictionary, getFormatID, getOffset, getPIDString, getPropertyBooleanValue, getPropertyIntValue, hashCode, toString, wasNull`

Methods inherited from class java.lang.Object
`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

Constructor Detail

### MutableSection

    public MutableSection()

  Creates an empty mutable section.

### MutableSection

    public MutableSection(Section s)

  Constructs a `MutableSection` by doing a deep copy of an existing `Section`. All nested `Property` instances, will be their mutable counterparts in the new `MutableSection`.

  Parameters:
    `s` - The section set to copy

Method Detail

### setFormatID

    public void setFormatID(ClassID formatID)

  Sets the section's format ID.

  Parameters:
    `formatID` - The section's format ID
  See Also:
    `setFormatID(byte[])`, `Section.getFormatID()`

### setFormatID

    public void setFormatID(byte[] formatID)

  Sets the section's format ID.

  Parameters:
    `formatID` - The section's format ID as a byte array. It components are in big-endian format.
  See Also:
    `setFormatID(ClassID)`, `Section.getFormatID()`

### setProperties

    public void setProperties(Property[] properties)

  Sets this section's properties. Any former values are overwritten.

  Parameters:
    `properties` - This section's new properties.

### setProperty

    public void setProperty(int id,
                            java.lang.String value)

  Sets the string value of the property with the specified ID.

  Parameters:
    `id` - The property's ID
    `value` - The property's value. It will be written as a Unicode string.
  See Also:
    `setProperty(int, long, Object)`, `getProperty(long)`

### setProperty

    public void setProperty(int id,
                            int value)

  Sets the int value of the property with the specified ID.

  Parameters:
    `id` - The property's ID
    `value` - The property's value.
  See Also:
    `setProperty(int, long, Object)`, `getProperty(long)`

### setProperty

    public void setProperty(int id,
                            long value)

  Sets the long value of the property with the specified ID.

  Parameters:
    `id` - The property's ID
    `value` - The property's value.
  See Also:
    `setProperty(int, long, Object)`, `getProperty(long)`

### setProperty

    public void setProperty(int id,
                            boolean value)

  Sets the boolean value of the property with the specified ID.

  Parameters:
    `id` - The property's ID
    `value` - The property's value.
  See Also:
    `setProperty(int, long, Object)`, `getProperty(long)`

### setProperty

    public void setProperty(int id,
                            long variantType,
                            java.lang.Object value)

  Sets the value and the variant type of the property with the specified ID. If a property with this ID is not yet present in the section, it will be added. An already present property with the specified ID will be overwritten. A default mapping will be used to choose the property's type.

  Parameters:
    `id` - The property's ID.
    `variantType` - The property's variant type.
    `value` - The property's value.
  See Also:
    `setProperty(int, String)`, `getProperty(long)`, `Variant`

### setProperty

    public void setProperty(Property p)

  Sets a property.

  Parameters:
    `p` - The property to be set.
  See Also:
    `setProperty(int, long, Object)`, `getProperty(long)`, `Variant`

### removeProperty

    public void removeProperty(long id)

  Removes a property.

  Parameters:
    `id` - The ID of the property to be removed

### setPropertyBooleanValue

    protected void setPropertyBooleanValue(int id,
                                           boolean value)

  Sets the value of the boolean property with the specified ID.

  Parameters:
    `id` - The property's ID
    `value` - The property's value
  See Also:
    `setProperty(int, long, Object)`, `getProperty(long)`, `Variant`

### getSize

    public int getSize()

  Returns the section's size.

  Overrides:
    `getSize` in class `Section`
  Returns:
    the section's size.

### write

    public int write(java.io.OutputStream out)
              throws WritingNotSupportedException,
                     java.io.IOException

  Writes this section into an output stream.

  Internally this is done by writing into three byte array output streams: one for the properties, one for the property list and one for the section as such. The two former are appended to the latter when they have received all their data.

  Parameters:
    `out` - The stream to write into.
  Returns:
    The number of bytes written, i.e. the section's size.
  Throws:
    `java.io.IOException` - if an I/O error occurs
    `WritingNotSupportedException` - if HPSF does not yet support writing a property's variant type.

### getPropertyCount

    public int getPropertyCount()

  Overwrites the super class' method to cope with a redundancy: the property count is maintained in a separate member variable, but shouldn't.

  Overrides:
    `getPropertyCount` in class `Section`
  Returns:
    The number of properties in this section

### getProperties

    public Property[] getProperties()

  Gets this section's properties.

  Overrides:
    `getProperties` in class `Section`
  Returns:
    this section's properties.

### getProperty

    public java.lang.Object getProperty(long id)

  Gets a property.

  Overrides:
    `getProperty` in class `Section`
  Parameters:
    `id` - The ID of the property to get
  Returns:
    The property or `null` if there is no such property

### setDictionary

    public void setDictionary(java.util.Map<java.lang.Long,java.lang.String> dictionary)
                       throws IllegalPropertySetDataException

  Sets the section's dictionary. All keys in the dictionary must be `Long` instances, all values must be `String`s. This method overwrites the properties with IDs 0 and 1 since they are reserved for the dictionary and the dictionary's codepage. Setting these properties explicitly might have surprising effects. An application should never do this but always use this method.

  Parameters:
    `dictionary` - The dictionary
  Throws:
    `IllegalPropertySetDataException` - if the dictionary's key and value types are not correct.
  See Also:
    `Section.getDictionary()`

### setProperty

    public void setProperty(int id,
                            java.lang.Object value)

  Sets a property.

  Parameters:
    `id` - The property ID.
    `value` - The property's value. The value's class must be one of those supported by HPSF.

### clear

    public void clear()

  Removes all properties from the section including 0 (dictionary) and 1 (codepage).

### setCodepage

    public void setCodepage(int codepage)

  Sets the codepage.

  Parameters:
    `codepage` - the codepage

Copyright 2012 The Apache Software Foundation or its licensors, as applicable.