package org.geotools.util;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
/**
* A linked HashMap set up for easy construction.
* <p>
* Example: <code>KVP map = new KVP("foo",1,"bar,2);</code>
*
* @author jody
*
* @source $URL$
*/
public class KVP extends LinkedHashMap<String, Object> {
/**
*
*/
private static final long serialVersionUID = -387821381125137128L;
/**
* A linked HashMap set up for easy construction.
* <p>
* Example: <code>KVP map = new KVP("foo",1,"bar,2);</code>
*
* @param pairs
*/
public KVP(Object... pairs) {
if ((pairs.length & 1) != 0) {
throw new IllegalArgumentException("Pairs was not an even number");
}
for (int i = 0; i < pairs.length; i += 2) {
String key = (String) pairs[i];
Object value = pairs[i + 1];
add(key, value);
}
}
/**
* An additive version of put; will add additional values resulting
* in a list.
* @param key
* @param value
*/
@SuppressWarnings("unchecked")
public void add(String key, Object value) {
if( containsKey(key) ) {
Object existing = get( key );
if( existing instanceof List<?>){
List<Object> list = (List<Object>) existing;
list.add( value );
}
else {
List<Object> list = new ArrayList<Object>();
list.add( existing );
list.add( value );
put( key, list );
}
}
else {
put(key, value);
}
}
}