Class CustomProperties

java.lang.Object
java.util.AbstractMap<K,V>
java.util.HashMap<Object,CustomProperty>
org.docx4j.org.apache.poi.hpsf.CustomProperties
All Implemented Interfaces:
Serializable, Cloneable, Map<Object,CustomProperty>

public class CustomProperties extends HashMap<Object,CustomProperty>

Maintains the instances of CustomProperty that belong to a DocumentSummaryInformation. The class maintains the names of the custom properties in a dictionary. It implements the Map interface and by this provides a simplified view on custom properties: A property's name is the key that maps to a typed value. This implementation hides property IDs from the developer and regards the property names as keys to typed values.

While this class provides a simple API to custom properties, it ignores the fact that not names, but IDs are the real keys to properties. Under the hood this class maintains a 1:1 relationship between IDs and names. Therefore you should not use this class to process property sets with several IDs mapping to the same name or with properties without a name: the result will contain only a subset of the original properties. If you really need to deal such property sets, use HPSF's low-level access methods.

An application can call the isPure method to check whether a property set parsed by CustomProperties is still pure (i.e. unmodified) or whether one or more properties have been dropped.

This class is not thread-safe; concurrent access to instances of this class must be synchronized.

While this class is roughly HashMap<Long,CustomProperty>, that's the internal representation. To external calls, it should appear as HashMap<String,Object> mapping between Names and Custom Property Values.

See Also:
  • Field Details

    • dictionaryIDToName

      private Map<Long,String> dictionaryIDToName

      Maps property IDs to property names.

    • dictionaryNameToID

      private Map<String,Long> dictionaryNameToID

      Maps property names to property IDs.

    • isPure

      private boolean isPure

      Tells whether this object is pure or not.

  • Constructor Details

    • CustomProperties

      public CustomProperties()
  • Method Details

    • put

      public CustomProperty put(String name, CustomProperty cp)

      Puts a CustomProperty into this map. It is assumed that the CustomProperty already has a valid ID. Otherwise use put(CustomProperty).

    • put

      private Object put(CustomProperty customProperty) throws ClassCastException

      Puts a CustomProperty that has not yet a valid ID into this map. The method will allocate a suitable ID for the custom property:

      • If there is already a property with the same name, take the ID of that property.

      • Otherwise find the highest ID and use its value plus one.

      Parameters:
      customProperty -
      Returns:
      If the was already a property with the same name, the
      Throws:
      ClassCastException
    • remove

      public Object remove(String name)

      Removes a custom property.

      Parameters:
      name - The name of the custom property to remove
      Returns:
      The removed property or null if the specified property was not found.
      See Also:
    • put

      public Object put(String name, String value)

      Adds a named string property.

      Parameters:
      name - The property's name.
      value - The property's value.
      Returns:
      the property that was stored under the specified name before, or null if there was no such property before.
    • put

      public Object put(String name, Long value)

      Adds a named long property.

      Parameters:
      name - The property's name.
      value - The property's value.
      Returns:
      the property that was stored under the specified name before, or null if there was no such property before.
    • put

      public Object put(String name, Double value)

      Adds a named double property.

      Parameters:
      name - The property's name.
      value - The property's value.
      Returns:
      the property that was stored under the specified name before, or null if there was no such property before.
    • put

      public Object put(String name, Integer value)

      Adds a named integer property.

      Parameters:
      name - The property's name.
      value - The property's value.
      Returns:
      the property that was stored under the specified name before, or null if there was no such property before.
    • put

      public Object put(String name, Boolean value)

      Adds a named boolean property.

      Parameters:
      name - The property's name.
      value - The property's value.
      Returns:
      the property that was stored under the specified name before, or null if there was no such property before.
    • get

      public Object get(String name)

      Gets a named value from the custom properties.

      Parameters:
      name - the name of the value to get
      Returns:
      the value or null if a value with the specified name is not found in the custom properties.
    • put

      public Object put(String name, Date value)

      Adds a named date property.

      Parameters:
      name - The property's name.
      value - The property's value.
      Returns:
      the property that was stored under the specified name before, or null if there was no such property before.
    • keySet

      public Set keySet()
      Returns a set of all the names of our custom properties. Equivalent to nameSet()
      Specified by:
      keySet in interface Map<Object,CustomProperty>
      Overrides:
      keySet in class HashMap<Object,CustomProperty>
    • nameSet

      public Set<String> nameSet()
      Returns a set of all the names of our custom properties
    • idSet

      public Set<String> idSet()
      Returns a set of all the IDs of our custom properties
    • setCodepage

      public void setCodepage(int codepage)

      Sets the codepage.

      Parameters:
      codepage - the codepage
    • getDictionary

      Map<Long,String> getDictionary()

      Gets the dictionary which contains IDs and names of the named custom properties.

      Returns:
      the dictionary.
    • containsKey

      public boolean containsKey(Object key)
      Checks against both String Name and Long ID
      Specified by:
      containsKey in interface Map<Object,CustomProperty>
      Overrides:
      containsKey in class HashMap<Object,CustomProperty>
    • containsValue

      public boolean containsValue(Object value)
      Checks against both the property, and its values.
      Specified by:
      containsValue in interface Map<Object,CustomProperty>
      Overrides:
      containsValue in class HashMap<Object,CustomProperty>
    • getCodepage

      public int getCodepage()

      Gets the codepage.

      Returns:
      the codepage or -1 if the codepage is undefined.
    • isPure

      public boolean isPure()

      Tells whether this CustomProperties instance is pure or one or more properties of the underlying low-level property set has been dropped.

      Returns:
      true if the CustomProperties is pure, else false.
    • setPure

      public void setPure(boolean isPure)

      Sets the purity of the custom property set.

      Parameters:
      isPure - the purity