/* © 2010 Stephan Reichholf <stephan at reichholf dot net>
*
* Licensed under the Create-Commons Attribution-Noncommercial-Share Alike 3.0 Unported
* http://creativecommons.org/licenses/by-nc-sa/3.0/
*/
package net.reichholf.dreamdroid.helpers;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.HashMap;
/**
* @author sreichholf
*
*/
//public class ExtendedHashMap extends HashMap<String, Object> implements Serializable {
public class ExtendedHashMap extends HashMap<String, Object> implements Parcelable {
private static final long serialVersionUID = 1391952383782876012L;
public ExtendedHashMap() {
super();
}
public ExtendedHashMap(Parcel in){
super();
@SuppressWarnings("unchecked")
HashMap<String, Object> map = (HashMap<String,Object>) in.readSerializable();
putAll(map);
}
public ExtendedHashMap(HashMap<String,Object> map){
super();
if(map != null)
putAll(map);
}
@Override
public ExtendedHashMap clone() {
return (ExtendedHashMap) super.clone();
}
public void putOrConcat(String prefix, String key, Object value){
key = prefix.concat(key);
putOrConcat(key, value);
}
/**
* Like standard put but concatenates the value if value is a
* "java.lang.String" and there already was a String value for the key
*
* @param key
* @param value
* @return
*/
public void putOrConcat(String key, Object value) {
// Exceptions are very expensive in terms of runtime so let's try to
// avoid them
if (containsKey(key)) {
try {
if (value.getClass().equals(Class.forName("java.lang.String"))) {
Object old = get(key);
if ((old.getClass().equals(Class.forName("java.lang.String")))) {
String oldval = (String) old;
String val = (String) value;
value = oldval.concat(val);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
put(key, value);
}
/**
* @param key
* @return
*/
public String getString(String key) {
return (String) get(key);
}
/**
* @param key
* @param defaultString
* @return
*/
public String getString(String key, String defaultString) {
String retVal = (String) get(key);
if(retVal == null){
retVal = defaultString;
}
return retVal;
}
public static final Parcelable.Creator<ExtendedHashMap> CREATOR
= new Parcelable.Creator<ExtendedHashMap>() {
public ExtendedHashMap createFromParcel(Parcel in) {
return new ExtendedHashMap(in);
}
public ExtendedHashMap[] newArray(int size) {
return new ExtendedHashMap[size];
}
};
/* (non-Javadoc)
* @see android.os.Parcelable#describeContents()
*/
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see android.os.Parcelable#writeToParcel(android.os.Parcel, int)
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeSerializable(this);
}
}