Class LayoutPreservingProperties

All Implemented Interfaces:
Serializable, Cloneable, Map<Object,Object>

public class LayoutPreservingProperties extends Properties

A Properties collection which preserves comments and whitespace present in the input stream from which it was loaded.

The class defers the usual work of the java.util.Properties class to there, but it also keeps track of the contents of the input stream from which it was loaded (if applicable), so that it can write out the properties in as close a form as possible to the input.

If no changes occur to property values, the output should be the same as the input, except for the leading date stamp, as normal for a properties file. Properties added are appended to the file. Properties whose values are changed are changed in place. Properties that are removed are excised. If the removeComments flag is set, then the comments immediately preceding the property are also removed.

If a second set of properties is loaded into an existing set, the lines of the second set are added to the end. Note however, that if a property already stored is present in a stream subsequently loaded, then that property is removed before the new value is set. For example, consider the file

 # the first line
alpha=one

# the second line
beta=two

This file is loaded, and then the following is also loaded into the same LayoutPreservingProperties object

 # association
beta=band

# and finally
gamma=rays

The resulting collection sequence of logical lines depends on whether or not removeComments was set at the time the second stream is loaded. If it is set, then the resulting list of lines is

 # the first line
alpha=one

# association
beta=band

# and finally
gamma=rays

If the flag is not set, then the comment "the second line" is retained, although the key-value pair beta=two is removed.

See Also:
  • Constructor Details

    • LayoutPreservingProperties

      public LayoutPreservingProperties()
      Create a new, empty, Properties collection, with no defaults.
    • LayoutPreservingProperties

      public LayoutPreservingProperties(Properties defaults)
      Create a new, empty, Properties collection, with the specified defaults.
      Parameters:
      defaults - the default property values
  • Method Details

    • isRemoveComments

      public boolean isRemoveComments()
      Returns true if comments are removed along with properties, or false otherwise. If true, then when a property is removed, the comment preceding it in the original file is removed also.
      Returns:
      true if leading comments are removed when a property is removed; false otherwise
    • setRemoveComments

      public void setRemoveComments(boolean val)
      Sets the behaviour for comments accompanying properties that are being removed. If true, then when a property is removed, the comment preceding it in the original file is removed also.
      Parameters:
      val - true if leading comments are to be removed when a property is removed; false otherwise
    • setDateComment

      public void setDateComment(Calendar calendar, TimeZone tz)
      Configures the date and timezone to use for the date comment.
      Parameters:
      calendar - date to use for the date comment - defaults to now if not set
      tz - timezone to use for the date comment - defaults to date's timezone if not set and the system's current timezone if date isn't set either
      Since:
      Ant 1.10.18
    • load

      public void load(InputStream inStream) throws IOException
      Overrides:
      load in class Properties
      Throws:
      IOException
    • put

      public Object put(Object key, Object value) throws NullPointerException
      Specified by:
      put in interface Map<Object,Object>
      Overrides:
      put in class Properties
      Throws:
      NullPointerException
    • setProperty

      public Object setProperty(String key, String value) throws NullPointerException
      Overrides:
      setProperty in class Properties
      Throws:
      NullPointerException
    • clear

      public void clear()
      Specified by:
      clear in interface Map<Object,Object>
      Overrides:
      clear in class Properties
    • remove

      public Object remove(Object key)
      Specified by:
      remove in interface Map<Object,Object>
      Overrides:
      remove in class Properties
    • clone

      public Object clone()
      Overrides:
      clone in class Properties
    • listLines

      public void listLines(PrintStream out)
      Echo the lines of the properties (including blanks and comments) to the stream.
      Parameters:
      out - the stream to write to
    • saveAs

      public void saveAs(File dest) throws IOException
      Save the properties to a file.
      Parameters:
      dest - the file to write to
      Throws:
      IOException - if save fails
    • store

      public void store(OutputStream out, String header) throws IOException
      Overrides:
      store in class Properties
      Throws:
      IOException