Package org.apache.openjpa.lib.util
Class FormatPreservingProperties
- java.lang.Object
-
- java.util.Dictionary<K,V>
-
- java.util.Hashtable<java.lang.Object,java.lang.Object>
-
- java.util.Properties
-
- org.apache.openjpa.lib.util.FormatPreservingProperties
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
,java.util.Map<java.lang.Object,java.lang.Object>
public class FormatPreservingProperties extends java.util.Properties
A specialization ofProperties
that stores its contents in the same order and with the same formatting as was used to read the contents from an input stream. This is useful because it means that a properties file loaded via this object and then written back out later on will only be different where changes or additions were made. By default, thestore(java.io.OutputStream, java.lang.String)
method in this class does not behave the same asProperties.store(java.io.Writer, java.lang.String)
. You can cause an instance to approximate the behavior ofProperties.store(java.io.Writer, java.lang.String)
by invokingsetDefaultEntryDelimiter(char)
with=
,setAddWhitespaceAfterDelimiter(boolean)
withfalse
, andsetAllowDuplicates(boolean)
withtrue
. However, this will only influence how the instance will write new values, not how it will write existing key-value pairs that are modified. In conjunction with a conservative output writer, it is possible to only write to disk changes / additions. This implementation does not permit escaped ' ', '=', ':' characters in key names.- Since:
- 0.3.3
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FormatPreservingProperties.DuplicateKeyException
-
Constructor Summary
Constructors Constructor Description FormatPreservingProperties()
FormatPreservingProperties(java.util.Properties defaults)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clear()
java.lang.Object
clone()
boolean
getAddWhitespaceAfterDelimiter()
If set totrue
, this properties object will add a space after the delimiter character(if the delimiter is not the space character).boolean
getAllowDuplicates()
If set totrue
, duplicate properties are allowed, and the last property setting in the input will overwrite any previous settings.char
getDefaultEntryDelimiter()
boolean
getInsertTimestamp()
If set totrue
, this properties object will add a timestamp to the beginning of the file, just after the header (if any) is printed.java.lang.String
getProperty(java.lang.String key)
java.lang.String
getProperty(java.lang.String key, java.lang.String defaultValue)
void
load(java.io.InputStream in)
Loads the properties inin
, according to the rules described inProperties.load(java.io.Reader)
.java.lang.Object
put(java.lang.Object key, java.lang.Object val)
void
putAll(java.util.Map m)
Circumvents the superclassputAll(java.util.Map)
implementation, putting all the key-value pairs viaput(java.lang.Object, java.lang.Object)
.java.lang.Object
remove(java.lang.Object key)
Removes the key from the bookkeeping collectiotns as well.void
save(java.io.OutputStream out, java.lang.String header)
void
setAddWhitespaceAfterDelimiter(boolean add)
If set totrue
, this properties object will add a space after the delimiter character(if the delimiter is not the space character).void
setAllowDuplicates(boolean allowDuplicates)
If set totrue
, duplicate properties are allowed, and the last property setting in the input will overwrite any previous settings.void
setDefaultEntryDelimiter(char defaultEntryDelimiter)
The character to use as a delimiter between property keys and values.void
setInsertTimestamp(boolean insertTimestamp)
If set totrue
, this properties object will add a timestamp to the beginning of the file, just after the header (if any) is printed.java.lang.Object
setProperty(java.lang.String key, java.lang.String value)
void
store(java.io.OutputStream out, java.lang.String header)
-
Methods inherited from class java.util.Properties
compute, computeIfAbsent, computeIfPresent, contains, containsKey, containsValue, elements, entrySet, equals, forEach, get, getOrDefault, hashCode, isEmpty, keys, keySet, list, list, load, loadFromXML, merge, propertyNames, putIfAbsent, rehash, remove, replace, replace, replaceAll, size, store, storeToXML, storeToXML, storeToXML, stringPropertyNames, toString, values
-
-
-
-
Method Detail
-
setDefaultEntryDelimiter
public void setDefaultEntryDelimiter(char defaultEntryDelimiter)
The character to use as a delimiter between property keys and values.- Parameters:
defaultEntryDelimiter
- either ':' or '='
-
getDefaultEntryDelimiter
public char getDefaultEntryDelimiter()
-
setAddWhitespaceAfterDelimiter
public void setAddWhitespaceAfterDelimiter(boolean add)
If set totrue
, this properties object will add a space after the delimiter character(if the delimiter is not the space character). Else, this will not add a space. Default value:true
. Note thatProperties.store(java.io.Writer, java.lang.String)
never writes whitespace.
-
getAddWhitespaceAfterDelimiter
public boolean getAddWhitespaceAfterDelimiter()
If set totrue
, this properties object will add a space after the delimiter character(if the delimiter is not the space character). Else, this will not add a space. Default value:true
. Note thatProperties.store(java.io.Writer, java.lang.String)
never writes whitespace.
-
setInsertTimestamp
public void setInsertTimestamp(boolean insertTimestamp)
If set totrue
, this properties object will add a timestamp to the beginning of the file, just after the header (if any) is printed. Else, this will not add a timestamp. Default value:false
. Note thatProperties.store(java.io.Writer, java.lang.String)
always writes a timestamp.
-
getInsertTimestamp
public boolean getInsertTimestamp()
If set totrue
, this properties object will add a timestamp to the beginning of the file, just after the header (if any) is printed. Else, this will not add a timestamp. Default value:false
. Note thatProperties.store(java.io.Writer, java.lang.String)
always writes a timestamp.
-
setAllowDuplicates
public void setAllowDuplicates(boolean allowDuplicates)
If set totrue
, duplicate properties are allowed, and the last property setting in the input will overwrite any previous settings. If set tofalse
, duplicate property definitions in the input will cause an exception to be thrown duringload(java.io.InputStream)
. Default value:false
. Note thatProperties.store(java.io.Writer, java.lang.String)
always allows duplicates.
-
getAllowDuplicates
public boolean getAllowDuplicates()
If set totrue
, duplicate properties are allowed, and the last property setting in the input will overwrite any previous settings. If set tofalse
, duplicate property definitions in the input will cause an exception to be thrown duringload(java.io.InputStream)
. Default value:false
. Note thatProperties.store(java.io.Writer, java.lang.String)
always allows duplicates.
-
getProperty
public java.lang.String getProperty(java.lang.String key)
- Overrides:
getProperty
in classjava.util.Properties
-
getProperty
public java.lang.String getProperty(java.lang.String key, java.lang.String defaultValue)
- Overrides:
getProperty
in classjava.util.Properties
-
setProperty
public java.lang.Object setProperty(java.lang.String key, java.lang.String value)
- Overrides:
setProperty
in classjava.util.Properties
-
putAll
public void putAll(java.util.Map m)
Circumvents the superclassputAll(java.util.Map)
implementation, putting all the key-value pairs viaput(java.lang.Object, java.lang.Object)
.- Specified by:
putAll
in interfacejava.util.Map<java.lang.Object,java.lang.Object>
- Overrides:
putAll
in classjava.util.Properties
-
remove
public java.lang.Object remove(java.lang.Object key)
Removes the key from the bookkeeping collectiotns as well.- Specified by:
remove
in interfacejava.util.Map<java.lang.Object,java.lang.Object>
- Overrides:
remove
in classjava.util.Properties
-
clear
public void clear()
- Specified by:
clear
in interfacejava.util.Map<java.lang.Object,java.lang.Object>
- Overrides:
clear
in classjava.util.Properties
-
clone
public java.lang.Object clone()
- Overrides:
clone
in classjava.util.Properties
-
put
public java.lang.Object put(java.lang.Object key, java.lang.Object val)
- Specified by:
put
in interfacejava.util.Map<java.lang.Object,java.lang.Object>
- Overrides:
put
in classjava.util.Properties
-
load
public void load(java.io.InputStream in) throws java.io.IOException
Loads the properties inin
, according to the rules described inProperties.load(java.io.Reader)
. IfgetAllowDuplicates()
returnstrue
, this will throw aFormatPreservingProperties.DuplicateKeyException
if duplicate property declarations are encountered.- Overrides:
load
in classjava.util.Properties
- Throws:
java.io.IOException
- See Also:
Properties.load(java.io.Reader)
-
save
public void save(java.io.OutputStream out, java.lang.String header)
- Overrides:
save
in classjava.util.Properties
-
store
public void store(java.io.OutputStream out, java.lang.String header) throws java.io.IOException
- Overrides:
store
in classjava.util.Properties
- Throws:
java.io.IOException
-
-