Package org.apache.openjpa.lib.util
Class FormatPreservingProperties
java.lang.Object
java.util.Dictionary<K,V>
java.util.Hashtable<Object,Object>
java.util.Properties
org.apache.openjpa.lib.util.FormatPreservingProperties
- All Implemented Interfaces:
Serializable
,Cloneable
,Map<Object,
Object>
A specialization of
Properties
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, the store(java.io.OutputStream, java.lang.String)
method in this class does not
behave the same as Properties.store(java.io.Writer, java.lang.String)
. You can cause an
instance to approximate the behavior of Properties.store(java.io.Writer, java.lang.String)
by invoking setDefaultEntryDelimiter(char)
with =
,
setAddWhitespaceAfterDelimiter(boolean)
with false
, and
setAllowDuplicates(boolean)
with true
. 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:
-
Nested Class Summary
-
Field Summary
Fields inherited from class java.util.Properties
defaults
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
clone()
boolean
If set totrue
, this properties object will add a space after the delimiter character(if the delimiter is not the space character).boolean
If set totrue
, duplicate properties are allowed, and the last property setting in the input will overwrite any previous settings.char
boolean
If set totrue
, this properties object will add a timestamp to the beginning of the file, just after the header (if any) is printed.getProperty
(String key) getProperty
(String key, String defaultValue) void
load
(InputStream in) Loads the properties inin
, according to the rules described inProperties.load(java.io.Reader)
.void
Circumvents the superclassputAll(java.util.Map)
implementation, putting all the key-value pairs viaput(java.lang.Object, java.lang.Object)
.Removes the key from the bookkeeping collectiotns as well.void
save
(OutputStream out, 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.setProperty
(String key, String value) void
store
(OutputStream out, 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
-
Constructor Details
-
FormatPreservingProperties
public FormatPreservingProperties() -
FormatPreservingProperties
-
-
Method Details
-
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
- Overrides:
getProperty
in classProperties
-
getProperty
- Overrides:
getProperty
in classProperties
-
setProperty
- Overrides:
setProperty
in classProperties
-
putAll
Circumvents the superclassputAll(java.util.Map)
implementation, putting all the key-value pairs viaput(java.lang.Object, java.lang.Object)
. -
remove
Removes the key from the bookkeeping collectiotns as well. -
clear
public void clear() -
clone
- Overrides:
clone
in classProperties
-
put
-
load
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 classProperties
- Throws:
IOException
- See Also:
-
save
- Overrides:
save
in classProperties
-
store
- Overrides:
store
in classProperties
- Throws:
IOException
-