You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by re...@apache.org on 2009/04/24 08:36:03 UTC
svn commit: r768169 -
/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java
Author: regisxu
Date: Fri Apr 24 06:36:03 2009
New Revision: 768169
URL: http://svn.apache.org/viewvc?rev=768169&view=rev
Log:
Format code of Properties.java, no functional change
Modified:
harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java
Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java?rev=768169&r1=768168&r2=768169&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java Fri Apr 24 06:36:03 2009
@@ -58,13 +58,13 @@
* @see Hashtable
* @see java.lang.System#getProperties
*/
-public class Properties extends Hashtable<Object,Object> {
-
- private static final long serialVersionUID = 4112578634029874840L;
+public class Properties extends Hashtable<Object, Object> {
+
+ private static final long serialVersionUID = 4112578634029874840L;
private transient DocumentBuilder builder = null;
- private static final String PROP_DTD_NAME = "http://java.sun.com/dtd/properties.dtd";
+ private static final String PROP_DTD_NAME = "http://java.sun.com/dtd/properties.dtd"; //$NON-NLS-1$
private static final String PROP_DTD = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ " <!ELEMENT properties (comment?, entry*) >"
@@ -72,203 +72,203 @@
+ " <!ELEMENT comment (#PCDATA) >"
+ " <!ELEMENT entry (#PCDATA) >"
+ " <!ATTLIST entry key CDATA #REQUIRED >";
-
- /**
- * The default values for this Properties.
- */
- protected Properties defaults;
-
- private static final int NONE = 0, SLASH = 1, UNICODE = 2, CONTINUE = 3,
- KEY_DONE = 4, IGNORE = 5;
-
- /**
- * Constructs a new Properties object.
- */
- public Properties() {
- super();
- }
-
- /**
- * Constructs a new Properties object using the specified default
- * properties.
- *
- * @param properties
- * the default properties
- */
- public Properties(Properties properties) {
- defaults = properties;
- }
- @SuppressWarnings("nls")
+ /**
+ * The default values for this Properties.
+ */
+ protected Properties defaults;
+
+ private static final int NONE = 0, SLASH = 1, UNICODE = 2, CONTINUE = 3,
+ KEY_DONE = 4, IGNORE = 5;
+
+ /**
+ * Constructs a new Properties object.
+ */
+ public Properties() {
+ super();
+ }
+
+ /**
+ * Constructs a new Properties object using the specified default
+ * properties.
+ *
+ * @param properties
+ * the default properties
+ */
+ public Properties(Properties properties) {
+ defaults = properties;
+ }
+
+ @SuppressWarnings("nls")
private void dumpString(StringBuilder buffer, String string, boolean key) {
- int i = 0;
- if (!key && i < string.length() && string.charAt(i) == ' ') {
- buffer.append("\\ "); //$NON-NLS-1$
- i++;
- }
-
- for (; i < string.length(); i++) {
- char ch = string.charAt(i);
- switch (ch) {
- case '\t':
- buffer.append("\\t"); //$NON-NLS-1$
- break;
- case '\n':
- buffer.append("\\n"); //$NON-NLS-1$
- break;
- case '\f':
- buffer.append("\\f"); //$NON-NLS-1$
- break;
- case '\r':
- buffer.append("\\r"); //$NON-NLS-1$
- break;
- default:
- if ("\\#!=:".indexOf(ch) >= 0 || (key && ch == ' ')) {
+ int i = 0;
+ if (!key && i < string.length() && string.charAt(i) == ' ') {
+ buffer.append("\\ "); //$NON-NLS-1$
+ i++;
+ }
+
+ for (; i < string.length(); i++) {
+ char ch = string.charAt(i);
+ switch (ch) {
+ case '\t':
+ buffer.append("\\t"); //$NON-NLS-1$
+ break;
+ case '\n':
+ buffer.append("\\n"); //$NON-NLS-1$
+ break;
+ case '\f':
+ buffer.append("\\f"); //$NON-NLS-1$
+ break;
+ case '\r':
+ buffer.append("\\r"); //$NON-NLS-1$
+ break;
+ default:
+ if ("\\#!=:".indexOf(ch) >= 0 || (key && ch == ' ')) {
buffer.append('\\');
}
- if (ch >= ' ' && ch <= '~') {
- buffer.append(ch);
- } else {
- String hex = Integer.toHexString(ch);
- buffer.append("\\u"); //$NON-NLS-1$
- for (int j = 0; j < 4 - hex.length(); j++) {
+ if (ch >= ' ' && ch <= '~') {
+ buffer.append(ch);
+ } else {
+ String hex = Integer.toHexString(ch);
+ buffer.append("\\u"); //$NON-NLS-1$
+ for (int j = 0; j < 4 - hex.length(); j++) {
buffer.append("0"); //$NON-NLS-1$
}
- buffer.append(hex);
- }
- }
- }
- }
-
- /**
- * Searches for the property with the specified name. If the property is not
- * found, look in the default properties. If the property is not found in
- * the default properties, answer null.
- *
- * @param name
- * the name of the property to find
- * @return the named property value
- */
- public String getProperty(String name) {
- Object result = super.get(name);
- String property = result instanceof String ? (String) result : null;
- if (property == null && defaults != null) {
- property = defaults.getProperty(name);
- }
- return property;
- }
-
- /**
- * Searches for the property with the specified name. If the property is not
- * found, look in the default properties. If the property is not found in
- * the default properties, answer the specified default.
- *
- * @param name
- * the name of the property to find
- * @param defaultValue
- * the default value
- * @return the named property value
- */
- public String getProperty(String name, String defaultValue) {
- Object result = super.get(name);
- String property = result instanceof String ? (String) result : null;
- if (property == null && defaults != null) {
- property = defaults.getProperty(name);
- }
- if (property == null) {
+ buffer.append(hex);
+ }
+ }
+ }
+ }
+
+ /**
+ * Searches for the property with the specified name. If the property is not
+ * found, look in the default properties. If the property is not found in
+ * the default properties, answer null.
+ *
+ * @param name
+ * the name of the property to find
+ * @return the named property value
+ */
+ public String getProperty(String name) {
+ Object result = super.get(name);
+ String property = result instanceof String ? (String) result : null;
+ if (property == null && defaults != null) {
+ property = defaults.getProperty(name);
+ }
+ return property;
+ }
+
+ /**
+ * Searches for the property with the specified name. If the property is not
+ * found, look in the default properties. If the property is not found in
+ * the default properties, answer the specified default.
+ *
+ * @param name
+ * the name of the property to find
+ * @param defaultValue
+ * the default value
+ * @return the named property value
+ */
+ public String getProperty(String name, String defaultValue) {
+ Object result = super.get(name);
+ String property = result instanceof String ? (String) result : null;
+ if (property == null && defaults != null) {
+ property = defaults.getProperty(name);
+ }
+ if (property == null) {
return defaultValue;
}
- return property;
- }
+ return property;
+ }
- /**
- * Lists the mappings in this Properties to the specified PrintStream in a
- * human readable form.
- *
- * @param out
- * the PrintStream
- */
- public void list(PrintStream out) {
- if (out == null) {
+ /**
+ * Lists the mappings in this Properties to the specified PrintStream in a
+ * human readable form.
+ *
+ * @param out
+ * the PrintStream
+ */
+ public void list(PrintStream out) {
+ if (out == null) {
throw new NullPointerException();
}
- StringBuffer buffer = new StringBuffer(80);
- Enumeration<?> keys = propertyNames();
- while (keys.hasMoreElements()) {
- String key = (String) keys.nextElement();
- buffer.append(key);
- buffer.append('=');
- String property = (String) super.get(key);
- Properties def = defaults;
- while (property == null) {
- property = (String) def.get(key);
- def = def.defaults;
- }
- if (property.length() > 40) {
- buffer.append(property.substring(0, 37));
- buffer.append("..."); //$NON-NLS-1$
- } else {
+ StringBuffer buffer = new StringBuffer(80);
+ Enumeration<?> keys = propertyNames();
+ while (keys.hasMoreElements()) {
+ String key = (String) keys.nextElement();
+ buffer.append(key);
+ buffer.append('=');
+ String property = (String) super.get(key);
+ Properties def = defaults;
+ while (property == null) {
+ property = (String) def.get(key);
+ def = def.defaults;
+ }
+ if (property.length() > 40) {
+ buffer.append(property.substring(0, 37));
+ buffer.append("..."); //$NON-NLS-1$
+ } else {
buffer.append(property);
}
- out.println(buffer.toString());
- buffer.setLength(0);
- }
- }
-
- /**
- * Lists the mappings in this Properties to the specified PrintWriter in a
- * human readable form.
- *
- * @param writer
- * the PrintWriter
- */
- public void list(PrintWriter writer) {
- if (writer == null) {
+ out.println(buffer.toString());
+ buffer.setLength(0);
+ }
+ }
+
+ /**
+ * Lists the mappings in this Properties to the specified PrintWriter in a
+ * human readable form.
+ *
+ * @param writer
+ * the PrintWriter
+ */
+ public void list(PrintWriter writer) {
+ if (writer == null) {
throw new NullPointerException();
}
- StringBuffer buffer = new StringBuffer(80);
- Enumeration<?> keys = propertyNames();
- while (keys.hasMoreElements()) {
- String key = (String) keys.nextElement();
- buffer.append(key);
- buffer.append('=');
- String property = (String) super.get(key);
- Properties def = defaults;
- while (property == null) {
- property = (String) def.get(key);
- def = def.defaults;
- }
- if (property.length() > 40) {
- buffer.append(property.substring(0, 37));
- buffer.append("..."); //$NON-NLS-1$
- } else {
+ StringBuffer buffer = new StringBuffer(80);
+ Enumeration<?> keys = propertyNames();
+ while (keys.hasMoreElements()) {
+ String key = (String) keys.nextElement();
+ buffer.append(key);
+ buffer.append('=');
+ String property = (String) super.get(key);
+ Properties def = defaults;
+ while (property == null) {
+ property = (String) def.get(key);
+ def = def.defaults;
+ }
+ if (property.length() > 40) {
+ buffer.append(property.substring(0, 37));
+ buffer.append("..."); //$NON-NLS-1$
+ } else {
buffer.append(property);
}
- writer.println(buffer.toString());
- buffer.setLength(0);
- }
- }
-
- /**
- * Loads properties from the specified InputStream. The properties are of
- * the form <code>key=value</code>, one property per line.
- *
- * @param in
- * the input stream
- * @throws IOException
- */
- public synchronized void load(InputStream in) throws IOException {
- if (in == null) {
- throw new NullPointerException();
- }
- int mode = NONE, unicode = 0, count = 0;
- char nextChar, buf[] = new char[40];
- int offset = 0, keyLength = -1, intVal;
- boolean firstChar = true;
- BufferedInputStream bis = new BufferedInputStream(in);
+ writer.println(buffer.toString());
+ buffer.setLength(0);
+ }
+ }
+
+ /**
+ * Loads properties from the specified InputStream. The properties are of
+ * the form <code>key=value</code>, one property per line.
+ *
+ * @param in
+ * the input stream
+ * @throws IOException
+ */
+ public synchronized void load(InputStream in) throws IOException {
+ if (in == null) {
+ throw new NullPointerException();
+ }
+ int mode = NONE, unicode = 0, count = 0;
+ char nextChar, buf[] = new char[40];
+ int offset = 0, keyLength = -1, intVal;
+ boolean firstChar = true;
+ BufferedInputStream bis = new BufferedInputStream(in);
- while (true) {
- intVal = bis.read();
+ while (true) {
+ intVal = bis.read();
if (intVal == -1) {
// if mode is UNICODE but has less than 4 hex digits, should
// throw an IllegalArgumentException
@@ -284,18 +284,18 @@
}
break;
}
- nextChar = (char) (intVal & 0xff);
+ nextChar = (char) (intVal & 0xff);
- if (offset == buf.length) {
- char[] newBuf = new char[buf.length * 2];
- System.arraycopy(buf, 0, newBuf, 0, offset);
- buf = newBuf;
- }
- if (mode == UNICODE) {
- int digit = Character.digit(nextChar, 16);
- if (digit >= 0) {
- unicode = (unicode << 4) + digit;
- if (++count < 4) {
+ if (offset == buf.length) {
+ char[] newBuf = new char[buf.length * 2];
+ System.arraycopy(buf, 0, newBuf, 0, offset);
+ buf = newBuf;
+ }
+ if (mode == UNICODE) {
+ int digit = Character.digit(nextChar, 16);
+ if (digit >= 0) {
+ unicode = (unicode << 4) + digit;
+ if (++count < 4) {
continue;
}
} else if (count <= 4) {
@@ -303,127 +303,127 @@
throw new IllegalArgumentException(Messages
.getString("luni.09")); //$NON-NLS-1$
}
- mode = NONE;
- buf[offset++] = (char) unicode;
- if (nextChar != '\n') {
- continue;
- }
- }
- if (mode == SLASH) {
- mode = NONE;
- switch (nextChar) {
- case '\r':
- mode = CONTINUE; // Look for a following \n
- continue;
- case '\n':
- mode = IGNORE; // Ignore whitespace on the next line
- continue;
- case 'b':
- nextChar = '\b';
- break;
- case 'f':
- nextChar = '\f';
- break;
- case 'n':
- nextChar = '\n';
- break;
- case 'r':
- nextChar = '\r';
- break;
- case 't':
- nextChar = '\t';
- break;
- case 'u':
- mode = UNICODE;
- unicode = count = 0;
- continue;
- }
- } else {
- switch (nextChar) {
- case '#':
- case '!':
- if (firstChar) {
- while (true) {
- intVal = bis.read();
- if (intVal == -1) break;
- nextChar = (char) intVal; // & 0xff
- // not
- // required
- if (nextChar == '\r' || nextChar == '\n') {
- break;
- }
- }
- continue;
- }
- break;
- case '\n':
- if (mode == CONTINUE) { // Part of a \r\n sequence
- mode = IGNORE; // Ignore whitespace on the next line
- continue;
- }
- // fall into the next case
- case '\r':
- mode = NONE;
- firstChar = true;
- if (offset > 0) {
- if (keyLength == -1) {
- keyLength = offset;
- }
- String temp = new String(buf, 0, offset);
- put(temp.substring(0, keyLength), temp
- .substring(keyLength));
- }
- keyLength = -1;
- offset = 0;
- continue;
- case '\\':
- if (mode == KEY_DONE) {
- keyLength = offset;
- }
- mode = SLASH;
- continue;
- case ':':
- case '=':
- if (keyLength == -1) { // if parsing the key
- mode = NONE;
- keyLength = offset;
- continue;
- }
- break;
- }
- if (Character.isWhitespace(nextChar)) {
- if (mode == CONTINUE) {
+ mode = NONE;
+ buf[offset++] = (char) unicode;
+ if (nextChar != '\n') {
+ continue;
+ }
+ }
+ if (mode == SLASH) {
+ mode = NONE;
+ switch (nextChar) {
+ case '\r':
+ mode = CONTINUE; // Look for a following \n
+ continue;
+ case '\n':
+ mode = IGNORE; // Ignore whitespace on the next line
+ continue;
+ case 'b':
+ nextChar = '\b';
+ break;
+ case 'f':
+ nextChar = '\f';
+ break;
+ case 'n':
+ nextChar = '\n';
+ break;
+ case 'r':
+ nextChar = '\r';
+ break;
+ case 't':
+ nextChar = '\t';
+ break;
+ case 'u':
+ mode = UNICODE;
+ unicode = count = 0;
+ continue;
+ }
+ } else {
+ switch (nextChar) {
+ case '#':
+ case '!':
+ if (firstChar) {
+ while (true) {
+ intVal = bis.read();
+ if (intVal == -1)
+ break;
+ // & 0xff not required
+ nextChar = (char) intVal;
+ if (nextChar == '\r' || nextChar == '\n') {
+ break;
+ }
+ }
+ continue;
+ }
+ break;
+ case '\n':
+ if (mode == CONTINUE) { // Part of a \r\n sequence
+ mode = IGNORE; // Ignore whitespace on the next line
+ continue;
+ }
+ // fall into the next case
+ case '\r':
+ mode = NONE;
+ firstChar = true;
+ if (offset > 0) {
+ if (keyLength == -1) {
+ keyLength = offset;
+ }
+ String temp = new String(buf, 0, offset);
+ put(temp.substring(0, keyLength), temp
+ .substring(keyLength));
+ }
+ keyLength = -1;
+ offset = 0;
+ continue;
+ case '\\':
+ if (mode == KEY_DONE) {
+ keyLength = offset;
+ }
+ mode = SLASH;
+ continue;
+ case ':':
+ case '=':
+ if (keyLength == -1) { // if parsing the key
+ mode = NONE;
+ keyLength = offset;
+ continue;
+ }
+ break;
+ }
+ if (Character.isWhitespace(nextChar)) {
+ if (mode == CONTINUE) {
mode = IGNORE;
}
- // if key length == 0 or value length == 0
- if (offset == 0 || offset == keyLength || mode == IGNORE) {
+ // if key length == 0 or value length == 0
+ if (offset == 0 || offset == keyLength || mode == IGNORE) {
continue;
}
- if (keyLength == -1) { // if parsing the key
- mode = KEY_DONE;
- continue;
- }
- }
- if (mode == IGNORE || mode == CONTINUE) {
+ if (keyLength == -1) { // if parsing the key
+ mode = KEY_DONE;
+ continue;
+ }
+ }
+ if (mode == IGNORE || mode == CONTINUE) {
mode = NONE;
}
- }
- firstChar = false;
- if (mode == KEY_DONE) {
- keyLength = offset;
- mode = NONE;
- }
- buf[offset++] = nextChar;
- }
- if(keyLength==-1 && offset>0){
+ }
+ firstChar = false;
+ if (mode == KEY_DONE) {
+ keyLength = offset;
+ mode = NONE;
+ }
+ buf[offset++] = nextChar;
+ }
+ if (keyLength == -1 && offset > 0) {
keyLength = offset;
}
- if (keyLength >= 0) {
- String temp = new String(buf, 0, offset);
- put(temp.substring(0, keyLength), temp.substring(keyLength));
- }
- }
-
+ if (keyLength >= 0) {
+ String temp = new String(buf, 0, offset);
+ put(temp.substring(0, keyLength), temp.substring(keyLength));
+ }
+ }
+
/**
* Loads properties from the specified InputStream. The properties are of
* the form <code>key=value</code>, one property per line. It may be not
@@ -477,7 +477,8 @@
}
} else if (count <= 4) {
// luni.09=Invalid Unicode sequence: illegal character
- throw new IllegalArgumentException(Messages.getString("luni.09"));
+ throw new IllegalArgumentException(Messages
+ .getString("luni.09")); //$NON-NLS-1$
}
mode = NONE;
buf[offset++] = (char) unicode;
@@ -522,11 +523,13 @@
if (firstChar) {
while (true) {
intVal = br.read();
- if (intVal == -1) break;
+ if (intVal == -1)
+ break;
nextChar = (char) intVal; // & 0xff
- // not
- // required
- if (nextChar == '\r' || nextChar == '\n' || nextChar == '\u0085') {
+ // not
+ // required
+ if (nextChar == '\r' || nextChar == '\n'
+ || nextChar == '\u0085') {
break;
}
}
@@ -538,7 +541,7 @@
mode = IGNORE; // Ignore whitespace on the next line
continue;
}
- // fall into the next case
+ // fall into the next case
case '\u0085':
case '\r':
mode = NONE;
@@ -600,32 +603,32 @@
String temp = new String(buf, 0, offset);
put(temp.substring(0, keyLength), temp.substring(keyLength));
}
- }
+ }
- /**
+ /**
* Answers all of the property names that this Properties contains.
*
* @return an Enumeration containing the names of all properties
*/
- public Enumeration<?> propertyNames() {
- if (defaults == null) {
+ public Enumeration<?> propertyNames() {
+ if (defaults == null) {
return keys();
}
Hashtable<Object, Object> set = new Hashtable<Object, Object>(defaults
.size()
+ size());
- Enumeration<?> keys = defaults.propertyNames();
- while (keys.hasMoreElements()) {
- set.put(keys.nextElement(), set);
- }
- keys = keys();
- while (keys.hasMoreElements()) {
- set.put(keys.nextElement(), set);
- }
- return set.keys();
- }
-
+ Enumeration<?> keys = defaults.propertyNames();
+ while (keys.hasMoreElements()) {
+ set.put(keys.nextElement(), set);
+ }
+ keys = keys();
+ while (keys.hasMoreElements()) {
+ set.put(keys.nextElement(), set);
+ }
+ return set.keys();
+ }
+
/**
* Answers a set of keys in this property list whoes key and value are
* strings.
@@ -633,108 +636,109 @@
* @return a set of keys in the property list
*
* @since 1.6
- */
- public Set<String> stringPropertyNames(){
- HashSet<String> set = new HashSet<String>();
+ */
+ public Set<String> stringPropertyNames() {
+ HashSet<String> set = new HashSet<String>();
Enumeration<?> keys = propertyNames();
while (keys.hasMoreElements()) {
- Object key = keys.nextElement();
+ Object key = keys.nextElement();
if (key instanceof String) {
Object value = this.get(key);
- if (value == null){
+ if (value == null) {
value = this.defaults.get(key);
}
- if (value instanceof String){
- set.add((String)key);
+ if (value instanceof String) {
+ set.add((String) key);
}
- }
+ }
}
return Collections.unmodifiableSet(set);
}
- /**
- * Saves the mappings in this Properties to the specified OutputStream,
- * putting the specified comment at the beginning. The output from this
- * method is suitable for being read by the load() method.
- *
- * @param out
- * the OutputStream
- * @param comment
- * the comment
- *
- * @exception ClassCastException
- * when the key or value of a mapping is not a String
- *
- * @deprecated Does not throw an IOException, use store()
- */
- @Deprecated
+ /**
+ * Saves the mappings in this Properties to the specified OutputStream,
+ * putting the specified comment at the beginning. The output from this
+ * method is suitable for being read by the load() method.
+ *
+ * @param out
+ * the OutputStream
+ * @param comment
+ * the comment
+ *
+ * @exception ClassCastException
+ * when the key or value of a mapping is not a String
+ *
+ * @deprecated Does not throw an IOException, use store()
+ */
+ @Deprecated
public void save(OutputStream out, String comment) {
- try {
- store(out, comment);
- } catch (IOException e) {
- }
- }
-
- /**
- * Maps the specified key to the specified value. If the key already exists,
- * the old value is replaced. The key and value cannot be null.
- *
- * @param name
- * the key
- * @param value
- * the value
- * @return the old value mapped to the key, or null
- */
- public Object setProperty(String name, String value) {
- return put(name, value);
- }
-
- private static String lineSeparator;
-
- /**
- * Stores the mappings in this Properties to the specified OutputStream,
- * putting the specified comment at the beginning. The output from this
- * method is suitable for being read by the load() method.
- *
- * @param out
- * the OutputStream
- * @param comment
- * the comment
- * @throws IOException
- *
- * @exception ClassCastException
- * when the key or value of a mapping is not a String
- */
- public synchronized void store(OutputStream out, String comments)
- throws IOException {
- if (lineSeparator == null) {
- lineSeparator = AccessController
- .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
- }
-
- StringBuilder buffer = new StringBuilder(200);
- OutputStreamWriter writer = new OutputStreamWriter(out, "ISO8859_1"); //$NON-NLS-1$
- if (comments != null) {
+ try {
+ store(out, comment);
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+
+ /**
+ * Maps the specified key to the specified value. If the key already exists,
+ * the old value is replaced. The key and value cannot be null.
+ *
+ * @param name
+ * the key
+ * @param value
+ * the value
+ * @return the old value mapped to the key, or null
+ */
+ public Object setProperty(String name, String value) {
+ return put(name, value);
+ }
+
+ private static String lineSeparator;
+
+ /**
+ * Stores the mappings in this Properties to the specified OutputStream,
+ * putting the specified comment at the beginning. The output from this
+ * method is suitable for being read by the load() method.
+ *
+ * @param out
+ * the OutputStream
+ * @param comment
+ * the comment
+ * @throws IOException
+ *
+ * @exception ClassCastException
+ * when the key or value of a mapping is not a String
+ */
+ public synchronized void store(OutputStream out, String comments)
+ throws IOException {
+ if (lineSeparator == null) {
+ lineSeparator = AccessController
+ .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
+ }
+
+ StringBuilder buffer = new StringBuilder(200);
+ OutputStreamWriter writer = new OutputStreamWriter(out, "ISO8859_1"); //$NON-NLS-1$
+ if (comments != null) {
writer.write("#"); //$NON-NLS-1$
writer.write(comments);
- writer.write(lineSeparator);
+ writer.write(lineSeparator);
}
writer.write("#"); //$NON-NLS-1$
writer.write(new Date().toString());
- writer.write(lineSeparator);
+ writer.write(lineSeparator);
+
+ for (Map.Entry<Object, Object> entry : entrySet()) {
+ String key = (String) entry.getKey();
+ dumpString(buffer, key, true);
+ buffer.append('=');
+ dumpString(buffer, (String) entry.getValue(), false);
+ buffer.append(lineSeparator);
+ writer.write(buffer.toString());
+ buffer.setLength(0);
+ }
+ writer.flush();
+ }
- for (Map.Entry<Object, Object> entry : entrySet()) {
- String key = (String) entry.getKey();
- dumpString(buffer, key, true);
- buffer.append('=');
- dumpString(buffer, (String) entry.getValue(), false);
- buffer.append(lineSeparator);
- writer.write(buffer.toString());
- buffer.setLength(0);
- }
- writer.flush();
- }
-
/**
* Stores the mappings in this Properties to the specified OutputStream,
* putting the specified comment at the beginning. The output from this
@@ -744,11 +748,12 @@
* the writer
* @param comments
* the comment
- * @throws IOException
- * if any I/O exception occurs
- * @since 1.6
+ * @throws IOException
+ * if any I/O exception occurs
+ * @since 1.6
*/
- public synchronized void store(Writer writer, String comments) throws IOException {
+ public synchronized void store(Writer writer, String comments)
+ throws IOException {
if (lineSeparator == null) {
lineSeparator = AccessController
.doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
@@ -757,11 +762,11 @@
if (comments != null) {
writer.write("#"); //$NON-NLS-1$
writer.write(comments);
- writer.write(lineSeparator);
+ writer.write(lineSeparator);
}
writer.write("#"); //$NON-NLS-1$
writer.write(new Date().toString());
- writer.write(lineSeparator);
+ writer.write(lineSeparator);
for (Map.Entry<Object, Object> entry : entrySet()) {
String key = (String) entry.getKey();
@@ -775,23 +780,23 @@
writer.flush();
}
- public synchronized void loadFromXML(InputStream in)
- throws IOException, InvalidPropertiesFormatException {
+ public synchronized void loadFromXML(InputStream in) throws IOException,
+ InvalidPropertiesFormatException {
if (in == null) {
throw new NullPointerException();
}
-
+
if (builder == null) {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
factory.setValidating(true);
-
+
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
throw new Error(e);
}
-
+
builder.setErrorHandler(new ErrorHandler() {
public void warning(SAXParseException e) throws SAXException {
throw e;
@@ -805,7 +810,7 @@
throw e;
}
});
-
+
builder.setEntityResolver(new EntityResolver() {
public InputSource resolveEntity(String publicId,
String systemId) throws SAXException, IOException {
@@ -820,20 +825,20 @@
}
});
}
-
+
try {
Document doc = builder.parse(in);
- NodeList entries = doc.getElementsByTagName("entry");
+ NodeList entries = doc.getElementsByTagName("entry");
if (entries == null) {
return;
}
int entriesListLength = entries.getLength();
-
+
for (int i = 0; i < entriesListLength; i++) {
Element entry = (Element) entries.item(i);
String key = entry.getAttribute("key");
String value = entry.getTextContent();
-
+
/*
* key != null & value != null but key or(and) value can be
* empty String
@@ -846,25 +851,25 @@
throw new InvalidPropertiesFormatException(e);
}
}
-
+
public void storeToXML(OutputStream os, String comment) throws IOException {
storeToXML(os, comment, "UTF-8");
}
-
+
public synchronized void storeToXML(OutputStream os, String comment,
String encoding) throws IOException {
if (os == null || encoding == null) {
throw new NullPointerException();
}
-
+
/*
* We can write to XML file using encoding parameter but note that some
* aliases for encodings are not supported by the XML parser. Thus we
* have to know canonical name for encoding used to store data in XML
* since the XML parser must recognize encoding name used to store data.
*/
-
+
String encodingCanonicalName;
try {
encodingCanonicalName = Charset.forName(encoding).name();
@@ -880,17 +885,17 @@
PrintStream printStream = new PrintStream(os, false,
encodingCanonicalName);
-
+
printStream.print("<?xml version=\"1.0\" encoding=\"");
printStream.print(encodingCanonicalName);
printStream.println("\"?>");
-
+
printStream.print("<!DOCTYPE properties SYSTEM \"");
printStream.print(PROP_DTD_NAME);
printStream.println("\">");
-
+
printStream.println("<properties>");
-
+
if (comment != null) {
printStream.print("<comment>");
printStream.print(substitutePredefinedEntries(comment));
@@ -909,9 +914,9 @@
printStream.println("</properties>");
printStream.flush();
}
-
+
private String substitutePredefinedEntries(String s) {
-
+
/*
* substitution for predefined character entities to use them safely in
* XML
@@ -919,5 +924,5 @@
return s.replaceAll("&", "&").replaceAll("<", "<").replaceAll(
">", ">").replaceAll("\u0027", "'").replaceAll("\"",
""");
- }
+ }
}
Re: svn commit: r768169 - /harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java
Posted by Regis <xu...@gmail.com>.
It seems the trunk is already formatted, so I just do it in java6 branch.
Tim Ellison wrote:
> Isn't this just going to cause merge pain?
>
> Better to reformat the HEAD and after merging format the Java 6 code
> similarly.
>
> Regards,
> Tim
>
> regisxu@apache.org wrote:
>> Author: regisxu
>> Date: Fri Apr 24 06:36:03 2009
>> New Revision: 768169
>>
>> URL: http://svn.apache.org/viewvc?rev=768169&view=rev
>> Log:
>> Format code of Properties.java, no functional change
>>
>> Modified:
>> harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java
>>
>> Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java?rev=768169&r1=768168&r2=768169&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java (original)
>> +++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java Fri Apr 24 06:36:03 2009
>> @@ -58,13 +58,13 @@
>> * @see Hashtable
>> * @see java.lang.System#getProperties
>> */
>> -public class Properties extends Hashtable<Object,Object> {
>> -
>> - private static final long serialVersionUID = 4112578634029874840L;
>> +public class Properties extends Hashtable<Object, Object> {
>> +
>> + private static final long serialVersionUID = 4112578634029874840L;
>>
>> private transient DocumentBuilder builder = null;
>>
>> - private static final String PROP_DTD_NAME = "http://java.sun.com/dtd/properties.dtd";
>> + private static final String PROP_DTD_NAME = "http://java.sun.com/dtd/properties.dtd"; //$NON-NLS-1$
>>
>> private static final String PROP_DTD = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
>> + " <!ELEMENT properties (comment?, entry*) >"
>> @@ -72,203 +72,203 @@
>> + " <!ELEMENT comment (#PCDATA) >"
>> + " <!ELEMENT entry (#PCDATA) >"
>> + " <!ATTLIST entry key CDATA #REQUIRED >";
>> -
>> - /**
>> - * The default values for this Properties.
>> - */
>> - protected Properties defaults;
>> -
>> - private static final int NONE = 0, SLASH = 1, UNICODE = 2, CONTINUE = 3,
>> - KEY_DONE = 4, IGNORE = 5;
>> -
>> - /**
>> - * Constructs a new Properties object.
>> - */
>> - public Properties() {
>> - super();
>> - }
>> -
>> - /**
>> - * Constructs a new Properties object using the specified default
>> - * properties.
>> - *
>> - * @param properties
>> - * the default properties
>> - */
>> - public Properties(Properties properties) {
>> - defaults = properties;
>> - }
>>
>> - @SuppressWarnings("nls")
>> + /**
>> + * The default values for this Properties.
>> + */
>> + protected Properties defaults;
>> +
>> + private static final int NONE = 0, SLASH = 1, UNICODE = 2, CONTINUE = 3,
>> + KEY_DONE = 4, IGNORE = 5;
>> +
>> + /**
>> + * Constructs a new Properties object.
>> + */
>> + public Properties() {
>> + super();
>> + }
>> +
>> + /**
>> + * Constructs a new Properties object using the specified default
>> + * properties.
>> + *
>> + * @param properties
>> + * the default properties
>> + */
>> + public Properties(Properties properties) {
>> + defaults = properties;
>> + }
>> +
>> + @SuppressWarnings("nls")
>> private void dumpString(StringBuilder buffer, String string, boolean key) {
>> - int i = 0;
>> - if (!key && i < string.length() && string.charAt(i) == ' ') {
>> - buffer.append("\\ "); //$NON-NLS-1$
>> - i++;
>> - }
>> -
>> - for (; i < string.length(); i++) {
>> - char ch = string.charAt(i);
>> - switch (ch) {
>> - case '\t':
>> - buffer.append("\\t"); //$NON-NLS-1$
>> - break;
>> - case '\n':
>> - buffer.append("\\n"); //$NON-NLS-1$
>> - break;
>> - case '\f':
>> - buffer.append("\\f"); //$NON-NLS-1$
>> - break;
>> - case '\r':
>> - buffer.append("\\r"); //$NON-NLS-1$
>> - break;
>> - default:
>> - if ("\\#!=:".indexOf(ch) >= 0 || (key && ch == ' ')) {
>> + int i = 0;
>> + if (!key && i < string.length() && string.charAt(i) == ' ') {
>> + buffer.append("\\ "); //$NON-NLS-1$
>> + i++;
>> + }
>> +
>> + for (; i < string.length(); i++) {
>> + char ch = string.charAt(i);
>> + switch (ch) {
>> + case '\t':
>> + buffer.append("\\t"); //$NON-NLS-1$
>> + break;
>> + case '\n':
>> + buffer.append("\\n"); //$NON-NLS-1$
>> + break;
>> + case '\f':
>> + buffer.append("\\f"); //$NON-NLS-1$
>> + break;
>> + case '\r':
>> + buffer.append("\\r"); //$NON-NLS-1$
>> + break;
>> + default:
>> + if ("\\#!=:".indexOf(ch) >= 0 || (key && ch == ' ')) {
>> buffer.append('\\');
>> }
>> - if (ch >= ' ' && ch <= '~') {
>> - buffer.append(ch);
>> - } else {
>> - String hex = Integer.toHexString(ch);
>> - buffer.append("\\u"); //$NON-NLS-1$
>> - for (int j = 0; j < 4 - hex.length(); j++) {
>> + if (ch >= ' ' && ch <= '~') {
>> + buffer.append(ch);
>> + } else {
>> + String hex = Integer.toHexString(ch);
>> + buffer.append("\\u"); //$NON-NLS-1$
>> + for (int j = 0; j < 4 - hex.length(); j++) {
>> buffer.append("0"); //$NON-NLS-1$
>> }
>> - buffer.append(hex);
>> - }
>> - }
>> - }
>> - }
>> -
>> - /**
>> - * Searches for the property with the specified name. If the property is not
>> - * found, look in the default properties. If the property is not found in
>> - * the default properties, answer null.
>> - *
>> - * @param name
>> - * the name of the property to find
>> - * @return the named property value
>> - */
>> - public String getProperty(String name) {
>> - Object result = super.get(name);
>> - String property = result instanceof String ? (String) result : null;
>> - if (property == null && defaults != null) {
>> - property = defaults.getProperty(name);
>> - }
>> - return property;
>> - }
>> -
>> - /**
>> - * Searches for the property with the specified name. If the property is not
>> - * found, look in the default properties. If the property is not found in
>> - * the default properties, answer the specified default.
>> - *
>> - * @param name
>> - * the name of the property to find
>> - * @param defaultValue
>> - * the default value
>> - * @return the named property value
>> - */
>> - public String getProperty(String name, String defaultValue) {
>> - Object result = super.get(name);
>> - String property = result instanceof String ? (String) result : null;
>> - if (property == null && defaults != null) {
>> - property = defaults.getProperty(name);
>> - }
>> - if (property == null) {
>> + buffer.append(hex);
>> + }
>> + }
>> + }
>> + }
>> +
>> + /**
>> + * Searches for the property with the specified name. If the property is not
>> + * found, look in the default properties. If the property is not found in
>> + * the default properties, answer null.
>> + *
>> + * @param name
>> + * the name of the property to find
>> + * @return the named property value
>> + */
>> + public String getProperty(String name) {
>> + Object result = super.get(name);
>> + String property = result instanceof String ? (String) result : null;
>> + if (property == null && defaults != null) {
>> + property = defaults.getProperty(name);
>> + }
>> + return property;
>> + }
>> +
>> + /**
>> + * Searches for the property with the specified name. If the property is not
>> + * found, look in the default properties. If the property is not found in
>> + * the default properties, answer the specified default.
>> + *
>> + * @param name
>> + * the name of the property to find
>> + * @param defaultValue
>> + * the default value
>> + * @return the named property value
>> + */
>> + public String getProperty(String name, String defaultValue) {
>> + Object result = super.get(name);
>> + String property = result instanceof String ? (String) result : null;
>> + if (property == null && defaults != null) {
>> + property = defaults.getProperty(name);
>> + }
>> + if (property == null) {
>> return defaultValue;
>> }
>> - return property;
>> - }
>> + return property;
>> + }
>>
>> - /**
>> - * Lists the mappings in this Properties to the specified PrintStream in a
>> - * human readable form.
>> - *
>> - * @param out
>> - * the PrintStream
>> - */
>> - public void list(PrintStream out) {
>> - if (out == null) {
>> + /**
>> + * Lists the mappings in this Properties to the specified PrintStream in a
>> + * human readable form.
>> + *
>> + * @param out
>> + * the PrintStream
>> + */
>> + public void list(PrintStream out) {
>> + if (out == null) {
>> throw new NullPointerException();
>> }
>> - StringBuffer buffer = new StringBuffer(80);
>> - Enumeration<?> keys = propertyNames();
>> - while (keys.hasMoreElements()) {
>> - String key = (String) keys.nextElement();
>> - buffer.append(key);
>> - buffer.append('=');
>> - String property = (String) super.get(key);
>> - Properties def = defaults;
>> - while (property == null) {
>> - property = (String) def.get(key);
>> - def = def.defaults;
>> - }
>> - if (property.length() > 40) {
>> - buffer.append(property.substring(0, 37));
>> - buffer.append("..."); //$NON-NLS-1$
>> - } else {
>> + StringBuffer buffer = new StringBuffer(80);
>> + Enumeration<?> keys = propertyNames();
>> + while (keys.hasMoreElements()) {
>> + String key = (String) keys.nextElement();
>> + buffer.append(key);
>> + buffer.append('=');
>> + String property = (String) super.get(key);
>> + Properties def = defaults;
>> + while (property == null) {
>> + property = (String) def.get(key);
>> + def = def.defaults;
>> + }
>> + if (property.length() > 40) {
>> + buffer.append(property.substring(0, 37));
>> + buffer.append("..."); //$NON-NLS-1$
>> + } else {
>> buffer.append(property);
>> }
>> - out.println(buffer.toString());
>> - buffer.setLength(0);
>> - }
>> - }
>> -
>> - /**
>> - * Lists the mappings in this Properties to the specified PrintWriter in a
>> - * human readable form.
>> - *
>> - * @param writer
>> - * the PrintWriter
>> - */
>> - public void list(PrintWriter writer) {
>> - if (writer == null) {
>> + out.println(buffer.toString());
>> + buffer.setLength(0);
>> + }
>> + }
>> +
>> + /**
>> + * Lists the mappings in this Properties to the specified PrintWriter in a
>> + * human readable form.
>> + *
>> + * @param writer
>> + * the PrintWriter
>> + */
>> + public void list(PrintWriter writer) {
>> + if (writer == null) {
>> throw new NullPointerException();
>> }
>> - StringBuffer buffer = new StringBuffer(80);
>> - Enumeration<?> keys = propertyNames();
>> - while (keys.hasMoreElements()) {
>> - String key = (String) keys.nextElement();
>> - buffer.append(key);
>> - buffer.append('=');
>> - String property = (String) super.get(key);
>> - Properties def = defaults;
>> - while (property == null) {
>> - property = (String) def.get(key);
>> - def = def.defaults;
>> - }
>> - if (property.length() > 40) {
>> - buffer.append(property.substring(0, 37));
>> - buffer.append("..."); //$NON-NLS-1$
>> - } else {
>> + StringBuffer buffer = new StringBuffer(80);
>> + Enumeration<?> keys = propertyNames();
>> + while (keys.hasMoreElements()) {
>> + String key = (String) keys.nextElement();
>> + buffer.append(key);
>> + buffer.append('=');
>> + String property = (String) super.get(key);
>> + Properties def = defaults;
>> + while (property == null) {
>> + property = (String) def.get(key);
>> + def = def.defaults;
>> + }
>> + if (property.length() > 40) {
>> + buffer.append(property.substring(0, 37));
>> + buffer.append("..."); //$NON-NLS-1$
>> + } else {
>> buffer.append(property);
>> }
>> - writer.println(buffer.toString());
>> - buffer.setLength(0);
>> - }
>> - }
>> -
>> - /**
>> - * Loads properties from the specified InputStream. The properties are of
>> - * the form <code>key=value</code>, one property per line.
>> - *
>> - * @param in
>> - * the input stream
>> - * @throws IOException
>> - */
>> - public synchronized void load(InputStream in) throws IOException {
>> - if (in == null) {
>> - throw new NullPointerException();
>> - }
>> - int mode = NONE, unicode = 0, count = 0;
>> - char nextChar, buf[] = new char[40];
>> - int offset = 0, keyLength = -1, intVal;
>> - boolean firstChar = true;
>> - BufferedInputStream bis = new BufferedInputStream(in);
>> + writer.println(buffer.toString());
>> + buffer.setLength(0);
>> + }
>> + }
>> +
>> + /**
>> + * Loads properties from the specified InputStream. The properties are of
>> + * the form <code>key=value</code>, one property per line.
>> + *
>> + * @param in
>> + * the input stream
>> + * @throws IOException
>> + */
>> + public synchronized void load(InputStream in) throws IOException {
>> + if (in == null) {
>> + throw new NullPointerException();
>> + }
>> + int mode = NONE, unicode = 0, count = 0;
>> + char nextChar, buf[] = new char[40];
>> + int offset = 0, keyLength = -1, intVal;
>> + boolean firstChar = true;
>> + BufferedInputStream bis = new BufferedInputStream(in);
>>
>> - while (true) {
>> - intVal = bis.read();
>> + while (true) {
>> + intVal = bis.read();
>> if (intVal == -1) {
>> // if mode is UNICODE but has less than 4 hex digits, should
>> // throw an IllegalArgumentException
>> @@ -284,18 +284,18 @@
>> }
>> break;
>> }
>> - nextChar = (char) (intVal & 0xff);
>> + nextChar = (char) (intVal & 0xff);
>>
>> - if (offset == buf.length) {
>> - char[] newBuf = new char[buf.length * 2];
>> - System.arraycopy(buf, 0, newBuf, 0, offset);
>> - buf = newBuf;
>> - }
>> - if (mode == UNICODE) {
>> - int digit = Character.digit(nextChar, 16);
>> - if (digit >= 0) {
>> - unicode = (unicode << 4) + digit;
>> - if (++count < 4) {
>> + if (offset == buf.length) {
>> + char[] newBuf = new char[buf.length * 2];
>> + System.arraycopy(buf, 0, newBuf, 0, offset);
>> + buf = newBuf;
>> + }
>> + if (mode == UNICODE) {
>> + int digit = Character.digit(nextChar, 16);
>> + if (digit >= 0) {
>> + unicode = (unicode << 4) + digit;
>> + if (++count < 4) {
>> continue;
>> }
>> } else if (count <= 4) {
>> @@ -303,127 +303,127 @@
>> throw new IllegalArgumentException(Messages
>> .getString("luni.09")); //$NON-NLS-1$
>> }
>> - mode = NONE;
>> - buf[offset++] = (char) unicode;
>> - if (nextChar != '\n') {
>> - continue;
>> - }
>> - }
>> - if (mode == SLASH) {
>> - mode = NONE;
>> - switch (nextChar) {
>> - case '\r':
>> - mode = CONTINUE; // Look for a following \n
>> - continue;
>> - case '\n':
>> - mode = IGNORE; // Ignore whitespace on the next line
>> - continue;
>> - case 'b':
>> - nextChar = '\b';
>> - break;
>> - case 'f':
>> - nextChar = '\f';
>> - break;
>> - case 'n':
>> - nextChar = '\n';
>> - break;
>> - case 'r':
>> - nextChar = '\r';
>> - break;
>> - case 't':
>> - nextChar = '\t';
>> - break;
>> - case 'u':
>> - mode = UNICODE;
>> - unicode = count = 0;
>> - continue;
>> - }
>> - } else {
>> - switch (nextChar) {
>> - case '#':
>> - case '!':
>> - if (firstChar) {
>> - while (true) {
>> - intVal = bis.read();
>> - if (intVal == -1) break;
>> - nextChar = (char) intVal; // & 0xff
>> - // not
>> - // required
>> - if (nextChar == '\r' || nextChar == '\n') {
>> - break;
>> - }
>> - }
>> - continue;
>> - }
>> - break;
>> - case '\n':
>> - if (mode == CONTINUE) { // Part of a \r\n sequence
>> - mode = IGNORE; // Ignore whitespace on the next line
>> - continue;
>> - }
>> - // fall into the next case
>> - case '\r':
>> - mode = NONE;
>> - firstChar = true;
>> - if (offset > 0) {
>> - if (keyLength == -1) {
>> - keyLength = offset;
>> - }
>> - String temp = new String(buf, 0, offset);
>> - put(temp.substring(0, keyLength), temp
>> - .substring(keyLength));
>> - }
>> - keyLength = -1;
>> - offset = 0;
>> - continue;
>> - case '\\':
>> - if (mode == KEY_DONE) {
>> - keyLength = offset;
>> - }
>> - mode = SLASH;
>> - continue;
>> - case ':':
>> - case '=':
>> - if (keyLength == -1) { // if parsing the key
>> - mode = NONE;
>> - keyLength = offset;
>> - continue;
>> - }
>> - break;
>> - }
>> - if (Character.isWhitespace(nextChar)) {
>> - if (mode == CONTINUE) {
>> + mode = NONE;
>> + buf[offset++] = (char) unicode;
>> + if (nextChar != '\n') {
>> + continue;
>> + }
>> + }
>> + if (mode == SLASH) {
>> + mode = NONE;
>> + switch (nextChar) {
>> + case '\r':
>> + mode = CONTINUE; // Look for a following \n
>> + continue;
>> + case '\n':
>> + mode = IGNORE; // Ignore whitespace on the next line
>> + continue;
>> + case 'b':
>> + nextChar = '\b';
>> + break;
>> + case 'f':
>> + nextChar = '\f';
>> + break;
>> + case 'n':
>> + nextChar = '\n';
>> + break;
>> + case 'r':
>> + nextChar = '\r';
>> + break;
>> + case 't':
>> + nextChar = '\t';
>> + break;
>> + case 'u':
>> + mode = UNICODE;
>> + unicode = count = 0;
>> + continue;
>> + }
>> + } else {
>> + switch (nextChar) {
>> + case '#':
>> + case '!':
>> + if (firstChar) {
>> + while (true) {
>> + intVal = bis.read();
>> + if (intVal == -1)
>> + break;
>> + // & 0xff not required
>> + nextChar = (char) intVal;
>> + if (nextChar == '\r' || nextChar == '\n') {
>> + break;
>> + }
>> + }
>> + continue;
>> + }
>> + break;
>> + case '\n':
>> + if (mode == CONTINUE) { // Part of a \r\n sequence
>> + mode = IGNORE; // Ignore whitespace on the next line
>> + continue;
>> + }
>> + // fall into the next case
>> + case '\r':
>> + mode = NONE;
>> + firstChar = true;
>> + if (offset > 0) {
>> + if (keyLength == -1) {
>> + keyLength = offset;
>> + }
>> + String temp = new String(buf, 0, offset);
>> + put(temp.substring(0, keyLength), temp
>> + .substring(keyLength));
>> + }
>> + keyLength = -1;
>> + offset = 0;
>> + continue;
>> + case '\\':
>> + if (mode == KEY_DONE) {
>> + keyLength = offset;
>> + }
>> + mode = SLASH;
>> + continue;
>> + case ':':
>> + case '=':
>> + if (keyLength == -1) { // if parsing the key
>> + mode = NONE;
>> + keyLength = offset;
>> + continue;
>> + }
>> + break;
>> + }
>> + if (Character.isWhitespace(nextChar)) {
>> + if (mode == CONTINUE) {
>> mode = IGNORE;
>> }
>> - // if key length == 0 or value length == 0
>> - if (offset == 0 || offset == keyLength || mode == IGNORE) {
>> + // if key length == 0 or value length == 0
>> + if (offset == 0 || offset == keyLength || mode == IGNORE) {
>> continue;
>> }
>> - if (keyLength == -1) { // if parsing the key
>> - mode = KEY_DONE;
>> - continue;
>> - }
>> - }
>> - if (mode == IGNORE || mode == CONTINUE) {
>> + if (keyLength == -1) { // if parsing the key
>> + mode = KEY_DONE;
>> + continue;
>> + }
>> + }
>> + if (mode == IGNORE || mode == CONTINUE) {
>> mode = NONE;
>> }
>> - }
>> - firstChar = false;
>> - if (mode == KEY_DONE) {
>> - keyLength = offset;
>> - mode = NONE;
>> - }
>> - buf[offset++] = nextChar;
>> - }
>> - if(keyLength==-1 && offset>0){
>> + }
>> + firstChar = false;
>> + if (mode == KEY_DONE) {
>> + keyLength = offset;
>> + mode = NONE;
>> + }
>> + buf[offset++] = nextChar;
>> + }
>> + if (keyLength == -1 && offset > 0) {
>> keyLength = offset;
>> }
>> - if (keyLength >= 0) {
>> - String temp = new String(buf, 0, offset);
>> - put(temp.substring(0, keyLength), temp.substring(keyLength));
>> - }
>> - }
>> -
>> + if (keyLength >= 0) {
>> + String temp = new String(buf, 0, offset);
>> + put(temp.substring(0, keyLength), temp.substring(keyLength));
>> + }
>> + }
>> +
>> /**
>> * Loads properties from the specified InputStream. The properties are of
>> * the form <code>key=value</code>, one property per line. It may be not
>> @@ -477,7 +477,8 @@
>> }
>> } else if (count <= 4) {
>> // luni.09=Invalid Unicode sequence: illegal character
>> - throw new IllegalArgumentException(Messages.getString("luni.09"));
>> + throw new IllegalArgumentException(Messages
>> + .getString("luni.09")); //$NON-NLS-1$
>> }
>> mode = NONE;
>> buf[offset++] = (char) unicode;
>> @@ -522,11 +523,13 @@
>> if (firstChar) {
>> while (true) {
>> intVal = br.read();
>> - if (intVal == -1) break;
>> + if (intVal == -1)
>> + break;
>> nextChar = (char) intVal; // & 0xff
>> - // not
>> - // required
>> - if (nextChar == '\r' || nextChar == '\n' || nextChar == '\u0085') {
>> + // not
>> + // required
>> + if (nextChar == '\r' || nextChar == '\n'
>> + || nextChar == '\u0085') {
>> break;
>> }
>> }
>> @@ -538,7 +541,7 @@
>> mode = IGNORE; // Ignore whitespace on the next line
>> continue;
>> }
>> - // fall into the next case
>> + // fall into the next case
>> case '\u0085':
>> case '\r':
>> mode = NONE;
>> @@ -600,32 +603,32 @@
>> String temp = new String(buf, 0, offset);
>> put(temp.substring(0, keyLength), temp.substring(keyLength));
>> }
>> - }
>> + }
>>
>> - /**
>> + /**
>> * Answers all of the property names that this Properties contains.
>> *
>> * @return an Enumeration containing the names of all properties
>> */
>> - public Enumeration<?> propertyNames() {
>> - if (defaults == null) {
>> + public Enumeration<?> propertyNames() {
>> + if (defaults == null) {
>> return keys();
>> }
>>
>> Hashtable<Object, Object> set = new Hashtable<Object, Object>(defaults
>> .size()
>> + size());
>> - Enumeration<?> keys = defaults.propertyNames();
>> - while (keys.hasMoreElements()) {
>> - set.put(keys.nextElement(), set);
>> - }
>> - keys = keys();
>> - while (keys.hasMoreElements()) {
>> - set.put(keys.nextElement(), set);
>> - }
>> - return set.keys();
>> - }
>> -
>> + Enumeration<?> keys = defaults.propertyNames();
>> + while (keys.hasMoreElements()) {
>> + set.put(keys.nextElement(), set);
>> + }
>> + keys = keys();
>> + while (keys.hasMoreElements()) {
>> + set.put(keys.nextElement(), set);
>> + }
>> + return set.keys();
>> + }
>> +
>> /**
>> * Answers a set of keys in this property list whoes key and value are
>> * strings.
>> @@ -633,108 +636,109 @@
>> * @return a set of keys in the property list
>> *
>> * @since 1.6
>> - */
>> - public Set<String> stringPropertyNames(){
>> - HashSet<String> set = new HashSet<String>();
>> + */
>> + public Set<String> stringPropertyNames() {
>> + HashSet<String> set = new HashSet<String>();
>> Enumeration<?> keys = propertyNames();
>> while (keys.hasMoreElements()) {
>> - Object key = keys.nextElement();
>> + Object key = keys.nextElement();
>> if (key instanceof String) {
>> Object value = this.get(key);
>> - if (value == null){
>> + if (value == null) {
>> value = this.defaults.get(key);
>> }
>> - if (value instanceof String){
>> - set.add((String)key);
>> + if (value instanceof String) {
>> + set.add((String) key);
>> }
>> - }
>> + }
>> }
>> return Collections.unmodifiableSet(set);
>> }
>>
>> - /**
>> - * Saves the mappings in this Properties to the specified OutputStream,
>> - * putting the specified comment at the beginning. The output from this
>> - * method is suitable for being read by the load() method.
>> - *
>> - * @param out
>> - * the OutputStream
>> - * @param comment
>> - * the comment
>> - *
>> - * @exception ClassCastException
>> - * when the key or value of a mapping is not a String
>> - *
>> - * @deprecated Does not throw an IOException, use store()
>> - */
>> - @Deprecated
>> + /**
>> + * Saves the mappings in this Properties to the specified OutputStream,
>> + * putting the specified comment at the beginning. The output from this
>> + * method is suitable for being read by the load() method.
>> + *
>> + * @param out
>> + * the OutputStream
>> + * @param comment
>> + * the comment
>> + *
>> + * @exception ClassCastException
>> + * when the key or value of a mapping is not a String
>> + *
>> + * @deprecated Does not throw an IOException, use store()
>> + */
>> + @Deprecated
>> public void save(OutputStream out, String comment) {
>> - try {
>> - store(out, comment);
>> - } catch (IOException e) {
>> - }
>> - }
>> -
>> - /**
>> - * Maps the specified key to the specified value. If the key already exists,
>> - * the old value is replaced. The key and value cannot be null.
>> - *
>> - * @param name
>> - * the key
>> - * @param value
>> - * the value
>> - * @return the old value mapped to the key, or null
>> - */
>> - public Object setProperty(String name, String value) {
>> - return put(name, value);
>> - }
>> -
>> - private static String lineSeparator;
>> -
>> - /**
>> - * Stores the mappings in this Properties to the specified OutputStream,
>> - * putting the specified comment at the beginning. The output from this
>> - * method is suitable for being read by the load() method.
>> - *
>> - * @param out
>> - * the OutputStream
>> - * @param comment
>> - * the comment
>> - * @throws IOException
>> - *
>> - * @exception ClassCastException
>> - * when the key or value of a mapping is not a String
>> - */
>> - public synchronized void store(OutputStream out, String comments)
>> - throws IOException {
>> - if (lineSeparator == null) {
>> - lineSeparator = AccessController
>> - .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
>> - }
>> -
>> - StringBuilder buffer = new StringBuilder(200);
>> - OutputStreamWriter writer = new OutputStreamWriter(out, "ISO8859_1"); //$NON-NLS-1$
>> - if (comments != null) {
>> + try {
>> + store(out, comment);
>> + } catch (IOException e) {
>> + // ignore
>> + }
>> + }
>> +
>> + /**
>> + * Maps the specified key to the specified value. If the key already exists,
>> + * the old value is replaced. The key and value cannot be null.
>> + *
>> + * @param name
>> + * the key
>> + * @param value
>> + * the value
>> + * @return the old value mapped to the key, or null
>> + */
>> + public Object setProperty(String name, String value) {
>> + return put(name, value);
>> + }
>> +
>> + private static String lineSeparator;
>> +
>> + /**
>> + * Stores the mappings in this Properties to the specified OutputStream,
>> + * putting the specified comment at the beginning. The output from this
>> + * method is suitable for being read by the load() method.
>> + *
>> + * @param out
>> + * the OutputStream
>> + * @param comment
>> + * the comment
>> + * @throws IOException
>> + *
>> + * @exception ClassCastException
>> + * when the key or value of a mapping is not a String
>> + */
>> + public synchronized void store(OutputStream out, String comments)
>> + throws IOException {
>> + if (lineSeparator == null) {
>> + lineSeparator = AccessController
>> + .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
>> + }
>> +
>> + StringBuilder buffer = new StringBuilder(200);
>> + OutputStreamWriter writer = new OutputStreamWriter(out, "ISO8859_1"); //$NON-NLS-1$
>> + if (comments != null) {
>> writer.write("#"); //$NON-NLS-1$
>> writer.write(comments);
>> - writer.write(lineSeparator);
>> + writer.write(lineSeparator);
>> }
>> writer.write("#"); //$NON-NLS-1$
>> writer.write(new Date().toString());
>> - writer.write(lineSeparator);
>> + writer.write(lineSeparator);
>> +
>> + for (Map.Entry<Object, Object> entry : entrySet()) {
>> + String key = (String) entry.getKey();
>> + dumpString(buffer, key, true);
>> + buffer.append('=');
>> + dumpString(buffer, (String) entry.getValue(), false);
>> + buffer.append(lineSeparator);
>> + writer.write(buffer.toString());
>> + buffer.setLength(0);
>> + }
>> + writer.flush();
>> + }
>>
>> - for (Map.Entry<Object, Object> entry : entrySet()) {
>> - String key = (String) entry.getKey();
>> - dumpString(buffer, key, true);
>> - buffer.append('=');
>> - dumpString(buffer, (String) entry.getValue(), false);
>> - buffer.append(lineSeparator);
>> - writer.write(buffer.toString());
>> - buffer.setLength(0);
>> - }
>> - writer.flush();
>> - }
>> -
>> /**
>> * Stores the mappings in this Properties to the specified OutputStream,
>> * putting the specified comment at the beginning. The output from this
>> @@ -744,11 +748,12 @@
>> * the writer
>> * @param comments
>> * the comment
>> - * @throws IOException
>> - * if any I/O exception occurs
>> - * @since 1.6
>> + * @throws IOException
>> + * if any I/O exception occurs
>> + * @since 1.6
>> */
>> - public synchronized void store(Writer writer, String comments) throws IOException {
>> + public synchronized void store(Writer writer, String comments)
>> + throws IOException {
>> if (lineSeparator == null) {
>> lineSeparator = AccessController
>> .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
>> @@ -757,11 +762,11 @@
>> if (comments != null) {
>> writer.write("#"); //$NON-NLS-1$
>> writer.write(comments);
>> - writer.write(lineSeparator);
>> + writer.write(lineSeparator);
>> }
>> writer.write("#"); //$NON-NLS-1$
>> writer.write(new Date().toString());
>> - writer.write(lineSeparator);
>> + writer.write(lineSeparator);
>>
>> for (Map.Entry<Object, Object> entry : entrySet()) {
>> String key = (String) entry.getKey();
>> @@ -775,23 +780,23 @@
>> writer.flush();
>> }
>>
>> - public synchronized void loadFromXML(InputStream in)
>> - throws IOException, InvalidPropertiesFormatException {
>> + public synchronized void loadFromXML(InputStream in) throws IOException,
>> + InvalidPropertiesFormatException {
>> if (in == null) {
>> throw new NullPointerException();
>> }
>> -
>> +
>> if (builder == null) {
>> DocumentBuilderFactory factory = DocumentBuilderFactory
>> .newInstance();
>> factory.setValidating(true);
>> -
>> +
>> try {
>> builder = factory.newDocumentBuilder();
>> } catch (ParserConfigurationException e) {
>> throw new Error(e);
>> }
>> -
>> +
>> builder.setErrorHandler(new ErrorHandler() {
>> public void warning(SAXParseException e) throws SAXException {
>> throw e;
>> @@ -805,7 +810,7 @@
>> throw e;
>> }
>> });
>> -
>> +
>> builder.setEntityResolver(new EntityResolver() {
>> public InputSource resolveEntity(String publicId,
>> String systemId) throws SAXException, IOException {
>> @@ -820,20 +825,20 @@
>> }
>> });
>> }
>> -
>> +
>> try {
>> Document doc = builder.parse(in);
>> - NodeList entries = doc.getElementsByTagName("entry");
>> + NodeList entries = doc.getElementsByTagName("entry");
>> if (entries == null) {
>> return;
>> }
>> int entriesListLength = entries.getLength();
>> -
>> +
>> for (int i = 0; i < entriesListLength; i++) {
>> Element entry = (Element) entries.item(i);
>> String key = entry.getAttribute("key");
>> String value = entry.getTextContent();
>> -
>> +
>> /*
>> * key != null & value != null but key or(and) value can be
>> * empty String
>> @@ -846,25 +851,25 @@
>> throw new InvalidPropertiesFormatException(e);
>> }
>> }
>> -
>> +
>> public void storeToXML(OutputStream os, String comment) throws IOException {
>> storeToXML(os, comment, "UTF-8");
>> }
>> -
>> +
>> public synchronized void storeToXML(OutputStream os, String comment,
>> String encoding) throws IOException {
>>
>> if (os == null || encoding == null) {
>> throw new NullPointerException();
>> }
>> -
>> +
>> /*
>> * We can write to XML file using encoding parameter but note that some
>> * aliases for encodings are not supported by the XML parser. Thus we
>> * have to know canonical name for encoding used to store data in XML
>> * since the XML parser must recognize encoding name used to store data.
>> */
>> -
>> +
>> String encodingCanonicalName;
>> try {
>> encodingCanonicalName = Charset.forName(encoding).name();
>> @@ -880,17 +885,17 @@
>>
>> PrintStream printStream = new PrintStream(os, false,
>> encodingCanonicalName);
>> -
>> +
>> printStream.print("<?xml version=\"1.0\" encoding=\"");
>> printStream.print(encodingCanonicalName);
>> printStream.println("\"?>");
>> -
>> +
>> printStream.print("<!DOCTYPE properties SYSTEM \"");
>> printStream.print(PROP_DTD_NAME);
>> printStream.println("\">");
>> -
>> +
>> printStream.println("<properties>");
>> -
>> +
>> if (comment != null) {
>> printStream.print("<comment>");
>> printStream.print(substitutePredefinedEntries(comment));
>> @@ -909,9 +914,9 @@
>> printStream.println("</properties>");
>> printStream.flush();
>> }
>> -
>> +
>> private String substitutePredefinedEntries(String s) {
>> -
>> +
>> /*
>> * substitution for predefined character entities to use them safely in
>> * XML
>> @@ -919,5 +924,5 @@
>> return s.replaceAll("&", "&").replaceAll("<", "<").replaceAll(
>> ">", ">").replaceAll("\u0027", "'").replaceAll("\"",
>> """);
>> - }
>> + }
>> }
>>
>>
>>
>
--
Best Regards,
Regis.
Re: svn commit: r768169 - /harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java
Posted by Tim Ellison <t....@gmail.com>.
Isn't this just going to cause merge pain?
Better to reformat the HEAD and after merging format the Java 6 code
similarly.
Regards,
Tim
regisxu@apache.org wrote:
> Author: regisxu
> Date: Fri Apr 24 06:36:03 2009
> New Revision: 768169
>
> URL: http://svn.apache.org/viewvc?rev=768169&view=rev
> Log:
> Format code of Properties.java, no functional change
>
> Modified:
> harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java
>
> Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java?rev=768169&r1=768168&r2=768169&view=diff
> ==============================================================================
> --- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java (original)
> +++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Properties.java Fri Apr 24 06:36:03 2009
> @@ -58,13 +58,13 @@
> * @see Hashtable
> * @see java.lang.System#getProperties
> */
> -public class Properties extends Hashtable<Object,Object> {
> -
> - private static final long serialVersionUID = 4112578634029874840L;
> +public class Properties extends Hashtable<Object, Object> {
> +
> + private static final long serialVersionUID = 4112578634029874840L;
>
> private transient DocumentBuilder builder = null;
>
> - private static final String PROP_DTD_NAME = "http://java.sun.com/dtd/properties.dtd";
> + private static final String PROP_DTD_NAME = "http://java.sun.com/dtd/properties.dtd"; //$NON-NLS-1$
>
> private static final String PROP_DTD = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
> + " <!ELEMENT properties (comment?, entry*) >"
> @@ -72,203 +72,203 @@
> + " <!ELEMENT comment (#PCDATA) >"
> + " <!ELEMENT entry (#PCDATA) >"
> + " <!ATTLIST entry key CDATA #REQUIRED >";
> -
> - /**
> - * The default values for this Properties.
> - */
> - protected Properties defaults;
> -
> - private static final int NONE = 0, SLASH = 1, UNICODE = 2, CONTINUE = 3,
> - KEY_DONE = 4, IGNORE = 5;
> -
> - /**
> - * Constructs a new Properties object.
> - */
> - public Properties() {
> - super();
> - }
> -
> - /**
> - * Constructs a new Properties object using the specified default
> - * properties.
> - *
> - * @param properties
> - * the default properties
> - */
> - public Properties(Properties properties) {
> - defaults = properties;
> - }
>
> - @SuppressWarnings("nls")
> + /**
> + * The default values for this Properties.
> + */
> + protected Properties defaults;
> +
> + private static final int NONE = 0, SLASH = 1, UNICODE = 2, CONTINUE = 3,
> + KEY_DONE = 4, IGNORE = 5;
> +
> + /**
> + * Constructs a new Properties object.
> + */
> + public Properties() {
> + super();
> + }
> +
> + /**
> + * Constructs a new Properties object using the specified default
> + * properties.
> + *
> + * @param properties
> + * the default properties
> + */
> + public Properties(Properties properties) {
> + defaults = properties;
> + }
> +
> + @SuppressWarnings("nls")
> private void dumpString(StringBuilder buffer, String string, boolean key) {
> - int i = 0;
> - if (!key && i < string.length() && string.charAt(i) == ' ') {
> - buffer.append("\\ "); //$NON-NLS-1$
> - i++;
> - }
> -
> - for (; i < string.length(); i++) {
> - char ch = string.charAt(i);
> - switch (ch) {
> - case '\t':
> - buffer.append("\\t"); //$NON-NLS-1$
> - break;
> - case '\n':
> - buffer.append("\\n"); //$NON-NLS-1$
> - break;
> - case '\f':
> - buffer.append("\\f"); //$NON-NLS-1$
> - break;
> - case '\r':
> - buffer.append("\\r"); //$NON-NLS-1$
> - break;
> - default:
> - if ("\\#!=:".indexOf(ch) >= 0 || (key && ch == ' ')) {
> + int i = 0;
> + if (!key && i < string.length() && string.charAt(i) == ' ') {
> + buffer.append("\\ "); //$NON-NLS-1$
> + i++;
> + }
> +
> + for (; i < string.length(); i++) {
> + char ch = string.charAt(i);
> + switch (ch) {
> + case '\t':
> + buffer.append("\\t"); //$NON-NLS-1$
> + break;
> + case '\n':
> + buffer.append("\\n"); //$NON-NLS-1$
> + break;
> + case '\f':
> + buffer.append("\\f"); //$NON-NLS-1$
> + break;
> + case '\r':
> + buffer.append("\\r"); //$NON-NLS-1$
> + break;
> + default:
> + if ("\\#!=:".indexOf(ch) >= 0 || (key && ch == ' ')) {
> buffer.append('\\');
> }
> - if (ch >= ' ' && ch <= '~') {
> - buffer.append(ch);
> - } else {
> - String hex = Integer.toHexString(ch);
> - buffer.append("\\u"); //$NON-NLS-1$
> - for (int j = 0; j < 4 - hex.length(); j++) {
> + if (ch >= ' ' && ch <= '~') {
> + buffer.append(ch);
> + } else {
> + String hex = Integer.toHexString(ch);
> + buffer.append("\\u"); //$NON-NLS-1$
> + for (int j = 0; j < 4 - hex.length(); j++) {
> buffer.append("0"); //$NON-NLS-1$
> }
> - buffer.append(hex);
> - }
> - }
> - }
> - }
> -
> - /**
> - * Searches for the property with the specified name. If the property is not
> - * found, look in the default properties. If the property is not found in
> - * the default properties, answer null.
> - *
> - * @param name
> - * the name of the property to find
> - * @return the named property value
> - */
> - public String getProperty(String name) {
> - Object result = super.get(name);
> - String property = result instanceof String ? (String) result : null;
> - if (property == null && defaults != null) {
> - property = defaults.getProperty(name);
> - }
> - return property;
> - }
> -
> - /**
> - * Searches for the property with the specified name. If the property is not
> - * found, look in the default properties. If the property is not found in
> - * the default properties, answer the specified default.
> - *
> - * @param name
> - * the name of the property to find
> - * @param defaultValue
> - * the default value
> - * @return the named property value
> - */
> - public String getProperty(String name, String defaultValue) {
> - Object result = super.get(name);
> - String property = result instanceof String ? (String) result : null;
> - if (property == null && defaults != null) {
> - property = defaults.getProperty(name);
> - }
> - if (property == null) {
> + buffer.append(hex);
> + }
> + }
> + }
> + }
> +
> + /**
> + * Searches for the property with the specified name. If the property is not
> + * found, look in the default properties. If the property is not found in
> + * the default properties, answer null.
> + *
> + * @param name
> + * the name of the property to find
> + * @return the named property value
> + */
> + public String getProperty(String name) {
> + Object result = super.get(name);
> + String property = result instanceof String ? (String) result : null;
> + if (property == null && defaults != null) {
> + property = defaults.getProperty(name);
> + }
> + return property;
> + }
> +
> + /**
> + * Searches for the property with the specified name. If the property is not
> + * found, look in the default properties. If the property is not found in
> + * the default properties, answer the specified default.
> + *
> + * @param name
> + * the name of the property to find
> + * @param defaultValue
> + * the default value
> + * @return the named property value
> + */
> + public String getProperty(String name, String defaultValue) {
> + Object result = super.get(name);
> + String property = result instanceof String ? (String) result : null;
> + if (property == null && defaults != null) {
> + property = defaults.getProperty(name);
> + }
> + if (property == null) {
> return defaultValue;
> }
> - return property;
> - }
> + return property;
> + }
>
> - /**
> - * Lists the mappings in this Properties to the specified PrintStream in a
> - * human readable form.
> - *
> - * @param out
> - * the PrintStream
> - */
> - public void list(PrintStream out) {
> - if (out == null) {
> + /**
> + * Lists the mappings in this Properties to the specified PrintStream in a
> + * human readable form.
> + *
> + * @param out
> + * the PrintStream
> + */
> + public void list(PrintStream out) {
> + if (out == null) {
> throw new NullPointerException();
> }
> - StringBuffer buffer = new StringBuffer(80);
> - Enumeration<?> keys = propertyNames();
> - while (keys.hasMoreElements()) {
> - String key = (String) keys.nextElement();
> - buffer.append(key);
> - buffer.append('=');
> - String property = (String) super.get(key);
> - Properties def = defaults;
> - while (property == null) {
> - property = (String) def.get(key);
> - def = def.defaults;
> - }
> - if (property.length() > 40) {
> - buffer.append(property.substring(0, 37));
> - buffer.append("..."); //$NON-NLS-1$
> - } else {
> + StringBuffer buffer = new StringBuffer(80);
> + Enumeration<?> keys = propertyNames();
> + while (keys.hasMoreElements()) {
> + String key = (String) keys.nextElement();
> + buffer.append(key);
> + buffer.append('=');
> + String property = (String) super.get(key);
> + Properties def = defaults;
> + while (property == null) {
> + property = (String) def.get(key);
> + def = def.defaults;
> + }
> + if (property.length() > 40) {
> + buffer.append(property.substring(0, 37));
> + buffer.append("..."); //$NON-NLS-1$
> + } else {
> buffer.append(property);
> }
> - out.println(buffer.toString());
> - buffer.setLength(0);
> - }
> - }
> -
> - /**
> - * Lists the mappings in this Properties to the specified PrintWriter in a
> - * human readable form.
> - *
> - * @param writer
> - * the PrintWriter
> - */
> - public void list(PrintWriter writer) {
> - if (writer == null) {
> + out.println(buffer.toString());
> + buffer.setLength(0);
> + }
> + }
> +
> + /**
> + * Lists the mappings in this Properties to the specified PrintWriter in a
> + * human readable form.
> + *
> + * @param writer
> + * the PrintWriter
> + */
> + public void list(PrintWriter writer) {
> + if (writer == null) {
> throw new NullPointerException();
> }
> - StringBuffer buffer = new StringBuffer(80);
> - Enumeration<?> keys = propertyNames();
> - while (keys.hasMoreElements()) {
> - String key = (String) keys.nextElement();
> - buffer.append(key);
> - buffer.append('=');
> - String property = (String) super.get(key);
> - Properties def = defaults;
> - while (property == null) {
> - property = (String) def.get(key);
> - def = def.defaults;
> - }
> - if (property.length() > 40) {
> - buffer.append(property.substring(0, 37));
> - buffer.append("..."); //$NON-NLS-1$
> - } else {
> + StringBuffer buffer = new StringBuffer(80);
> + Enumeration<?> keys = propertyNames();
> + while (keys.hasMoreElements()) {
> + String key = (String) keys.nextElement();
> + buffer.append(key);
> + buffer.append('=');
> + String property = (String) super.get(key);
> + Properties def = defaults;
> + while (property == null) {
> + property = (String) def.get(key);
> + def = def.defaults;
> + }
> + if (property.length() > 40) {
> + buffer.append(property.substring(0, 37));
> + buffer.append("..."); //$NON-NLS-1$
> + } else {
> buffer.append(property);
> }
> - writer.println(buffer.toString());
> - buffer.setLength(0);
> - }
> - }
> -
> - /**
> - * Loads properties from the specified InputStream. The properties are of
> - * the form <code>key=value</code>, one property per line.
> - *
> - * @param in
> - * the input stream
> - * @throws IOException
> - */
> - public synchronized void load(InputStream in) throws IOException {
> - if (in == null) {
> - throw new NullPointerException();
> - }
> - int mode = NONE, unicode = 0, count = 0;
> - char nextChar, buf[] = new char[40];
> - int offset = 0, keyLength = -1, intVal;
> - boolean firstChar = true;
> - BufferedInputStream bis = new BufferedInputStream(in);
> + writer.println(buffer.toString());
> + buffer.setLength(0);
> + }
> + }
> +
> + /**
> + * Loads properties from the specified InputStream. The properties are of
> + * the form <code>key=value</code>, one property per line.
> + *
> + * @param in
> + * the input stream
> + * @throws IOException
> + */
> + public synchronized void load(InputStream in) throws IOException {
> + if (in == null) {
> + throw new NullPointerException();
> + }
> + int mode = NONE, unicode = 0, count = 0;
> + char nextChar, buf[] = new char[40];
> + int offset = 0, keyLength = -1, intVal;
> + boolean firstChar = true;
> + BufferedInputStream bis = new BufferedInputStream(in);
>
> - while (true) {
> - intVal = bis.read();
> + while (true) {
> + intVal = bis.read();
> if (intVal == -1) {
> // if mode is UNICODE but has less than 4 hex digits, should
> // throw an IllegalArgumentException
> @@ -284,18 +284,18 @@
> }
> break;
> }
> - nextChar = (char) (intVal & 0xff);
> + nextChar = (char) (intVal & 0xff);
>
> - if (offset == buf.length) {
> - char[] newBuf = new char[buf.length * 2];
> - System.arraycopy(buf, 0, newBuf, 0, offset);
> - buf = newBuf;
> - }
> - if (mode == UNICODE) {
> - int digit = Character.digit(nextChar, 16);
> - if (digit >= 0) {
> - unicode = (unicode << 4) + digit;
> - if (++count < 4) {
> + if (offset == buf.length) {
> + char[] newBuf = new char[buf.length * 2];
> + System.arraycopy(buf, 0, newBuf, 0, offset);
> + buf = newBuf;
> + }
> + if (mode == UNICODE) {
> + int digit = Character.digit(nextChar, 16);
> + if (digit >= 0) {
> + unicode = (unicode << 4) + digit;
> + if (++count < 4) {
> continue;
> }
> } else if (count <= 4) {
> @@ -303,127 +303,127 @@
> throw new IllegalArgumentException(Messages
> .getString("luni.09")); //$NON-NLS-1$
> }
> - mode = NONE;
> - buf[offset++] = (char) unicode;
> - if (nextChar != '\n') {
> - continue;
> - }
> - }
> - if (mode == SLASH) {
> - mode = NONE;
> - switch (nextChar) {
> - case '\r':
> - mode = CONTINUE; // Look for a following \n
> - continue;
> - case '\n':
> - mode = IGNORE; // Ignore whitespace on the next line
> - continue;
> - case 'b':
> - nextChar = '\b';
> - break;
> - case 'f':
> - nextChar = '\f';
> - break;
> - case 'n':
> - nextChar = '\n';
> - break;
> - case 'r':
> - nextChar = '\r';
> - break;
> - case 't':
> - nextChar = '\t';
> - break;
> - case 'u':
> - mode = UNICODE;
> - unicode = count = 0;
> - continue;
> - }
> - } else {
> - switch (nextChar) {
> - case '#':
> - case '!':
> - if (firstChar) {
> - while (true) {
> - intVal = bis.read();
> - if (intVal == -1) break;
> - nextChar = (char) intVal; // & 0xff
> - // not
> - // required
> - if (nextChar == '\r' || nextChar == '\n') {
> - break;
> - }
> - }
> - continue;
> - }
> - break;
> - case '\n':
> - if (mode == CONTINUE) { // Part of a \r\n sequence
> - mode = IGNORE; // Ignore whitespace on the next line
> - continue;
> - }
> - // fall into the next case
> - case '\r':
> - mode = NONE;
> - firstChar = true;
> - if (offset > 0) {
> - if (keyLength == -1) {
> - keyLength = offset;
> - }
> - String temp = new String(buf, 0, offset);
> - put(temp.substring(0, keyLength), temp
> - .substring(keyLength));
> - }
> - keyLength = -1;
> - offset = 0;
> - continue;
> - case '\\':
> - if (mode == KEY_DONE) {
> - keyLength = offset;
> - }
> - mode = SLASH;
> - continue;
> - case ':':
> - case '=':
> - if (keyLength == -1) { // if parsing the key
> - mode = NONE;
> - keyLength = offset;
> - continue;
> - }
> - break;
> - }
> - if (Character.isWhitespace(nextChar)) {
> - if (mode == CONTINUE) {
> + mode = NONE;
> + buf[offset++] = (char) unicode;
> + if (nextChar != '\n') {
> + continue;
> + }
> + }
> + if (mode == SLASH) {
> + mode = NONE;
> + switch (nextChar) {
> + case '\r':
> + mode = CONTINUE; // Look for a following \n
> + continue;
> + case '\n':
> + mode = IGNORE; // Ignore whitespace on the next line
> + continue;
> + case 'b':
> + nextChar = '\b';
> + break;
> + case 'f':
> + nextChar = '\f';
> + break;
> + case 'n':
> + nextChar = '\n';
> + break;
> + case 'r':
> + nextChar = '\r';
> + break;
> + case 't':
> + nextChar = '\t';
> + break;
> + case 'u':
> + mode = UNICODE;
> + unicode = count = 0;
> + continue;
> + }
> + } else {
> + switch (nextChar) {
> + case '#':
> + case '!':
> + if (firstChar) {
> + while (true) {
> + intVal = bis.read();
> + if (intVal == -1)
> + break;
> + // & 0xff not required
> + nextChar = (char) intVal;
> + if (nextChar == '\r' || nextChar == '\n') {
> + break;
> + }
> + }
> + continue;
> + }
> + break;
> + case '\n':
> + if (mode == CONTINUE) { // Part of a \r\n sequence
> + mode = IGNORE; // Ignore whitespace on the next line
> + continue;
> + }
> + // fall into the next case
> + case '\r':
> + mode = NONE;
> + firstChar = true;
> + if (offset > 0) {
> + if (keyLength == -1) {
> + keyLength = offset;
> + }
> + String temp = new String(buf, 0, offset);
> + put(temp.substring(0, keyLength), temp
> + .substring(keyLength));
> + }
> + keyLength = -1;
> + offset = 0;
> + continue;
> + case '\\':
> + if (mode == KEY_DONE) {
> + keyLength = offset;
> + }
> + mode = SLASH;
> + continue;
> + case ':':
> + case '=':
> + if (keyLength == -1) { // if parsing the key
> + mode = NONE;
> + keyLength = offset;
> + continue;
> + }
> + break;
> + }
> + if (Character.isWhitespace(nextChar)) {
> + if (mode == CONTINUE) {
> mode = IGNORE;
> }
> - // if key length == 0 or value length == 0
> - if (offset == 0 || offset == keyLength || mode == IGNORE) {
> + // if key length == 0 or value length == 0
> + if (offset == 0 || offset == keyLength || mode == IGNORE) {
> continue;
> }
> - if (keyLength == -1) { // if parsing the key
> - mode = KEY_DONE;
> - continue;
> - }
> - }
> - if (mode == IGNORE || mode == CONTINUE) {
> + if (keyLength == -1) { // if parsing the key
> + mode = KEY_DONE;
> + continue;
> + }
> + }
> + if (mode == IGNORE || mode == CONTINUE) {
> mode = NONE;
> }
> - }
> - firstChar = false;
> - if (mode == KEY_DONE) {
> - keyLength = offset;
> - mode = NONE;
> - }
> - buf[offset++] = nextChar;
> - }
> - if(keyLength==-1 && offset>0){
> + }
> + firstChar = false;
> + if (mode == KEY_DONE) {
> + keyLength = offset;
> + mode = NONE;
> + }
> + buf[offset++] = nextChar;
> + }
> + if (keyLength == -1 && offset > 0) {
> keyLength = offset;
> }
> - if (keyLength >= 0) {
> - String temp = new String(buf, 0, offset);
> - put(temp.substring(0, keyLength), temp.substring(keyLength));
> - }
> - }
> -
> + if (keyLength >= 0) {
> + String temp = new String(buf, 0, offset);
> + put(temp.substring(0, keyLength), temp.substring(keyLength));
> + }
> + }
> +
> /**
> * Loads properties from the specified InputStream. The properties are of
> * the form <code>key=value</code>, one property per line. It may be not
> @@ -477,7 +477,8 @@
> }
> } else if (count <= 4) {
> // luni.09=Invalid Unicode sequence: illegal character
> - throw new IllegalArgumentException(Messages.getString("luni.09"));
> + throw new IllegalArgumentException(Messages
> + .getString("luni.09")); //$NON-NLS-1$
> }
> mode = NONE;
> buf[offset++] = (char) unicode;
> @@ -522,11 +523,13 @@
> if (firstChar) {
> while (true) {
> intVal = br.read();
> - if (intVal == -1) break;
> + if (intVal == -1)
> + break;
> nextChar = (char) intVal; // & 0xff
> - // not
> - // required
> - if (nextChar == '\r' || nextChar == '\n' || nextChar == '\u0085') {
> + // not
> + // required
> + if (nextChar == '\r' || nextChar == '\n'
> + || nextChar == '\u0085') {
> break;
> }
> }
> @@ -538,7 +541,7 @@
> mode = IGNORE; // Ignore whitespace on the next line
> continue;
> }
> - // fall into the next case
> + // fall into the next case
> case '\u0085':
> case '\r':
> mode = NONE;
> @@ -600,32 +603,32 @@
> String temp = new String(buf, 0, offset);
> put(temp.substring(0, keyLength), temp.substring(keyLength));
> }
> - }
> + }
>
> - /**
> + /**
> * Answers all of the property names that this Properties contains.
> *
> * @return an Enumeration containing the names of all properties
> */
> - public Enumeration<?> propertyNames() {
> - if (defaults == null) {
> + public Enumeration<?> propertyNames() {
> + if (defaults == null) {
> return keys();
> }
>
> Hashtable<Object, Object> set = new Hashtable<Object, Object>(defaults
> .size()
> + size());
> - Enumeration<?> keys = defaults.propertyNames();
> - while (keys.hasMoreElements()) {
> - set.put(keys.nextElement(), set);
> - }
> - keys = keys();
> - while (keys.hasMoreElements()) {
> - set.put(keys.nextElement(), set);
> - }
> - return set.keys();
> - }
> -
> + Enumeration<?> keys = defaults.propertyNames();
> + while (keys.hasMoreElements()) {
> + set.put(keys.nextElement(), set);
> + }
> + keys = keys();
> + while (keys.hasMoreElements()) {
> + set.put(keys.nextElement(), set);
> + }
> + return set.keys();
> + }
> +
> /**
> * Answers a set of keys in this property list whoes key and value are
> * strings.
> @@ -633,108 +636,109 @@
> * @return a set of keys in the property list
> *
> * @since 1.6
> - */
> - public Set<String> stringPropertyNames(){
> - HashSet<String> set = new HashSet<String>();
> + */
> + public Set<String> stringPropertyNames() {
> + HashSet<String> set = new HashSet<String>();
> Enumeration<?> keys = propertyNames();
> while (keys.hasMoreElements()) {
> - Object key = keys.nextElement();
> + Object key = keys.nextElement();
> if (key instanceof String) {
> Object value = this.get(key);
> - if (value == null){
> + if (value == null) {
> value = this.defaults.get(key);
> }
> - if (value instanceof String){
> - set.add((String)key);
> + if (value instanceof String) {
> + set.add((String) key);
> }
> - }
> + }
> }
> return Collections.unmodifiableSet(set);
> }
>
> - /**
> - * Saves the mappings in this Properties to the specified OutputStream,
> - * putting the specified comment at the beginning. The output from this
> - * method is suitable for being read by the load() method.
> - *
> - * @param out
> - * the OutputStream
> - * @param comment
> - * the comment
> - *
> - * @exception ClassCastException
> - * when the key or value of a mapping is not a String
> - *
> - * @deprecated Does not throw an IOException, use store()
> - */
> - @Deprecated
> + /**
> + * Saves the mappings in this Properties to the specified OutputStream,
> + * putting the specified comment at the beginning. The output from this
> + * method is suitable for being read by the load() method.
> + *
> + * @param out
> + * the OutputStream
> + * @param comment
> + * the comment
> + *
> + * @exception ClassCastException
> + * when the key or value of a mapping is not a String
> + *
> + * @deprecated Does not throw an IOException, use store()
> + */
> + @Deprecated
> public void save(OutputStream out, String comment) {
> - try {
> - store(out, comment);
> - } catch (IOException e) {
> - }
> - }
> -
> - /**
> - * Maps the specified key to the specified value. If the key already exists,
> - * the old value is replaced. The key and value cannot be null.
> - *
> - * @param name
> - * the key
> - * @param value
> - * the value
> - * @return the old value mapped to the key, or null
> - */
> - public Object setProperty(String name, String value) {
> - return put(name, value);
> - }
> -
> - private static String lineSeparator;
> -
> - /**
> - * Stores the mappings in this Properties to the specified OutputStream,
> - * putting the specified comment at the beginning. The output from this
> - * method is suitable for being read by the load() method.
> - *
> - * @param out
> - * the OutputStream
> - * @param comment
> - * the comment
> - * @throws IOException
> - *
> - * @exception ClassCastException
> - * when the key or value of a mapping is not a String
> - */
> - public synchronized void store(OutputStream out, String comments)
> - throws IOException {
> - if (lineSeparator == null) {
> - lineSeparator = AccessController
> - .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
> - }
> -
> - StringBuilder buffer = new StringBuilder(200);
> - OutputStreamWriter writer = new OutputStreamWriter(out, "ISO8859_1"); //$NON-NLS-1$
> - if (comments != null) {
> + try {
> + store(out, comment);
> + } catch (IOException e) {
> + // ignore
> + }
> + }
> +
> + /**
> + * Maps the specified key to the specified value. If the key already exists,
> + * the old value is replaced. The key and value cannot be null.
> + *
> + * @param name
> + * the key
> + * @param value
> + * the value
> + * @return the old value mapped to the key, or null
> + */
> + public Object setProperty(String name, String value) {
> + return put(name, value);
> + }
> +
> + private static String lineSeparator;
> +
> + /**
> + * Stores the mappings in this Properties to the specified OutputStream,
> + * putting the specified comment at the beginning. The output from this
> + * method is suitable for being read by the load() method.
> + *
> + * @param out
> + * the OutputStream
> + * @param comment
> + * the comment
> + * @throws IOException
> + *
> + * @exception ClassCastException
> + * when the key or value of a mapping is not a String
> + */
> + public synchronized void store(OutputStream out, String comments)
> + throws IOException {
> + if (lineSeparator == null) {
> + lineSeparator = AccessController
> + .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
> + }
> +
> + StringBuilder buffer = new StringBuilder(200);
> + OutputStreamWriter writer = new OutputStreamWriter(out, "ISO8859_1"); //$NON-NLS-1$
> + if (comments != null) {
> writer.write("#"); //$NON-NLS-1$
> writer.write(comments);
> - writer.write(lineSeparator);
> + writer.write(lineSeparator);
> }
> writer.write("#"); //$NON-NLS-1$
> writer.write(new Date().toString());
> - writer.write(lineSeparator);
> + writer.write(lineSeparator);
> +
> + for (Map.Entry<Object, Object> entry : entrySet()) {
> + String key = (String) entry.getKey();
> + dumpString(buffer, key, true);
> + buffer.append('=');
> + dumpString(buffer, (String) entry.getValue(), false);
> + buffer.append(lineSeparator);
> + writer.write(buffer.toString());
> + buffer.setLength(0);
> + }
> + writer.flush();
> + }
>
> - for (Map.Entry<Object, Object> entry : entrySet()) {
> - String key = (String) entry.getKey();
> - dumpString(buffer, key, true);
> - buffer.append('=');
> - dumpString(buffer, (String) entry.getValue(), false);
> - buffer.append(lineSeparator);
> - writer.write(buffer.toString());
> - buffer.setLength(0);
> - }
> - writer.flush();
> - }
> -
> /**
> * Stores the mappings in this Properties to the specified OutputStream,
> * putting the specified comment at the beginning. The output from this
> @@ -744,11 +748,12 @@
> * the writer
> * @param comments
> * the comment
> - * @throws IOException
> - * if any I/O exception occurs
> - * @since 1.6
> + * @throws IOException
> + * if any I/O exception occurs
> + * @since 1.6
> */
> - public synchronized void store(Writer writer, String comments) throws IOException {
> + public synchronized void store(Writer writer, String comments)
> + throws IOException {
> if (lineSeparator == null) {
> lineSeparator = AccessController
> .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
> @@ -757,11 +762,11 @@
> if (comments != null) {
> writer.write("#"); //$NON-NLS-1$
> writer.write(comments);
> - writer.write(lineSeparator);
> + writer.write(lineSeparator);
> }
> writer.write("#"); //$NON-NLS-1$
> writer.write(new Date().toString());
> - writer.write(lineSeparator);
> + writer.write(lineSeparator);
>
> for (Map.Entry<Object, Object> entry : entrySet()) {
> String key = (String) entry.getKey();
> @@ -775,23 +780,23 @@
> writer.flush();
> }
>
> - public synchronized void loadFromXML(InputStream in)
> - throws IOException, InvalidPropertiesFormatException {
> + public synchronized void loadFromXML(InputStream in) throws IOException,
> + InvalidPropertiesFormatException {
> if (in == null) {
> throw new NullPointerException();
> }
> -
> +
> if (builder == null) {
> DocumentBuilderFactory factory = DocumentBuilderFactory
> .newInstance();
> factory.setValidating(true);
> -
> +
> try {
> builder = factory.newDocumentBuilder();
> } catch (ParserConfigurationException e) {
> throw new Error(e);
> }
> -
> +
> builder.setErrorHandler(new ErrorHandler() {
> public void warning(SAXParseException e) throws SAXException {
> throw e;
> @@ -805,7 +810,7 @@
> throw e;
> }
> });
> -
> +
> builder.setEntityResolver(new EntityResolver() {
> public InputSource resolveEntity(String publicId,
> String systemId) throws SAXException, IOException {
> @@ -820,20 +825,20 @@
> }
> });
> }
> -
> +
> try {
> Document doc = builder.parse(in);
> - NodeList entries = doc.getElementsByTagName("entry");
> + NodeList entries = doc.getElementsByTagName("entry");
> if (entries == null) {
> return;
> }
> int entriesListLength = entries.getLength();
> -
> +
> for (int i = 0; i < entriesListLength; i++) {
> Element entry = (Element) entries.item(i);
> String key = entry.getAttribute("key");
> String value = entry.getTextContent();
> -
> +
> /*
> * key != null & value != null but key or(and) value can be
> * empty String
> @@ -846,25 +851,25 @@
> throw new InvalidPropertiesFormatException(e);
> }
> }
> -
> +
> public void storeToXML(OutputStream os, String comment) throws IOException {
> storeToXML(os, comment, "UTF-8");
> }
> -
> +
> public synchronized void storeToXML(OutputStream os, String comment,
> String encoding) throws IOException {
>
> if (os == null || encoding == null) {
> throw new NullPointerException();
> }
> -
> +
> /*
> * We can write to XML file using encoding parameter but note that some
> * aliases for encodings are not supported by the XML parser. Thus we
> * have to know canonical name for encoding used to store data in XML
> * since the XML parser must recognize encoding name used to store data.
> */
> -
> +
> String encodingCanonicalName;
> try {
> encodingCanonicalName = Charset.forName(encoding).name();
> @@ -880,17 +885,17 @@
>
> PrintStream printStream = new PrintStream(os, false,
> encodingCanonicalName);
> -
> +
> printStream.print("<?xml version=\"1.0\" encoding=\"");
> printStream.print(encodingCanonicalName);
> printStream.println("\"?>");
> -
> +
> printStream.print("<!DOCTYPE properties SYSTEM \"");
> printStream.print(PROP_DTD_NAME);
> printStream.println("\">");
> -
> +
> printStream.println("<properties>");
> -
> +
> if (comment != null) {
> printStream.print("<comment>");
> printStream.print(substitutePredefinedEntries(comment));
> @@ -909,9 +914,9 @@
> printStream.println("</properties>");
> printStream.flush();
> }
> -
> +
> private String substitutePredefinedEntries(String s) {
> -
> +
> /*
> * substitution for predefined character entities to use them safely in
> * XML
> @@ -919,5 +924,5 @@
> return s.replaceAll("&", "&").replaceAll("<", "<").replaceAll(
> ">", ">").replaceAll("\u0027", "'").replaceAll("\"",
> """);
> - }
> + }
> }
>
>
>