com.ibm.commons.preferences.Preferences Maven / Gradle / Ivy
The newest version!
/*
* © Copyright IBM Corp. 2012-2013
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.ibm.commons.preferences;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Map;
import com.ibm.commons.util.FastStringBuffer;
import com.ibm.commons.util.StringUtil;
/**
* Preferences object.
* A preference object is storing and retrieving preferences.
* @ibm-not-published
*/
public class Preferences {
private HashMap _properties;
public Preferences() {
this._properties = new HashMap();
}
// ======================================================================
// Getters
// ======================================================================
public String getString(String key) {
String s = _properties.get(key);
if(s==null) {
s="";
}
return s;
}
public int getInteger(String key) {
String s = _properties.get(key);
if(StringUtil.isNotEmpty(s)) {
try {
return Integer.parseInt(s);
} catch(NumberFormatException ex) {}
}
return 0;
}
public long getLong(String key) {
String s = _properties.get(key);
if(StringUtil.isNotEmpty(s)) {
try {
return Long.parseLong(s);
} catch(NumberFormatException ex) {}
}
return 0;
}
public double getDouble(String key) {
String s = _properties.get(key);
if(StringUtil.isNotEmpty(s)) {
try {
return Double.parseDouble(s);
} catch(NumberFormatException ex) {}
}
return 0.0;
}
public boolean getBoolean(String key) {
String s = _properties.get(key);
if(StringUtil.isNotEmpty(s)) {
return s.equalsIgnoreCase("true"); // $NON-NLS-1$
}
return false;
}
// ======================================================================
// Setters
// ======================================================================
public void putString(String key, String value) {
checkKey(key);
checkValue(value);
if(StringUtil.isNotEmpty(value)) {
_properties.put(key, value);
} else {
_properties.remove(key);
}
}
public void putInteger(String key, int value) {
checkKey(key);
if(value!=0) {
_properties.put(key, Integer.toString(value));
} else {
_properties.remove(key);
}
}
public void putLong(String key, long value) {
checkKey(key);
if(value!=0) {
_properties.put(key, Long.toString(value));
} else {
_properties.remove(key);
}
}
public void putDouble(String key, double value) {
checkKey(key);
if(value!=0) {
_properties.put(key, Double.toString(value));
} else {
_properties.remove(key);
}
}
public void putBoolean(String key, boolean value) {
checkKey(key);
if(value) {
_properties.put(key, "true"); // $NON-NLS-1$
} else {
_properties.remove(key);
}
}
private void checkKey(String key) {
if(StringUtil.isEmpty(key)) {
throw new IllegalArgumentException("Empty key"); // $NLS-Preferences.Emptykey-1$
}
if(key.indexOf((char)0)>=0) {
throw new IllegalArgumentException("Key cannot contain '\\0' character"); // $NLS-Preferences.Keycannotcontaina0character-1$
}
if(key.indexOf('=')>=0) {
throw new IllegalArgumentException("Key cannot contain '=' character"); // $NLS-Preferences.Keycannotcontainancharacter-1$
}
}
private void checkValue(String value) {
if(StringUtil.isNotEmpty(value)) {
if(value.indexOf((char)0)>=0) {
throw new IllegalArgumentException("Value cannot contain '\\0' character"); // $NLS-Preferences.Valuecannotcontaina0character-1$
}
}
}
// ======================================================================
// Initialization
// ======================================================================
// public Iterator keys() {
// return _properties.keySet().iterator();
// }
public void remove(String key) {
checkKey(key);
_properties.remove(key);
}
public void clear() {
_properties.clear();
}
public void reset(Preferences prefs) {
_properties.clear();
if(prefs!=null) {
for( Map.Entry e: prefs._properties.entrySet() ) {
String key = e.getKey();
String value = e.getValue();
_properties.put(key, value);
}
}
}
// ======================================================================
// Serialization
// ======================================================================
public String writeToString() {
FastStringBuffer b = new FastStringBuffer(4096);
for( Map.Entry e: _properties.entrySet() ) {
String key = e.getKey();
String value = e.getValue();
if(b.length()>0) {
b.append((char)0);
}
b.append(key);
b.append('=');
b.append(value);
}
return b.toString();
}
public void readFromString(String s) {
_properties.clear();
int len = s.length();
int pos = 0;
while(pos0 && idx e: _properties.entrySet() ) {
String key = e.getKey();
String value = e.getValue();
out.print(key);
out.print("=");
out.println(value);
}
}
public static void main(String[] args) {
Preferences p = new Preferences();
p.putString("s1", "value1"); // $NON-NLS-1$ $NON-NLS-2$
p.putString("s1.s2", "value2=toto"); // $NON-NLS-1$ $NON-NLS-2$
p.putString("s1.s2.s3", "value2\ntoto"); // $NON-NLS-1$ $NON-NLS-2$
System.out.println("Initial:"); // $NON-NLS-1$
p.dump(System.out);
String s = p.writeToString();
System.out.println("\nSerialization:"); // $NON-NLS-1$
System.out.println(s);
Preferences p2 = new Preferences();
p2.readFromString(s);
System.out.println("\nRead:"); // $NON-NLS-1$
p2.dump(System.out);
}
}