/**
*
*/
package org.minnal.instrument.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.google.common.base.CaseFormat;
/**
* @author ganeshs
*
*/
public class DynaBean extends HashMap<String, Object> {
public DynaBean() {
}
DynaBean(Map<String, Object> map) {
for (Entry<String, Object> entry : map.entrySet()) {
set(entry.getKey(), entry.getValue());
}
}
@JsonAnyGetter
public Object get(String name) {
return super.get(name);
}
@Override
public Object put(String name, Object value) {
return set(name, value);
}
@SuppressWarnings("unchecked")
@JsonAnySetter
public Object set(String name, Object value) {
if (value instanceof Map) {
value = new DynaBean((Map<String, Object>) value);
} else if (value instanceof Collection) {
Collection<?> collection = (Collection<?>) value;
List<DynaBean> list = new ArrayList<DynaBean>();
if (! collection.isEmpty() && collection.iterator().next() instanceof Map) {
for (Object val : collection) {
list.add(new DynaBean((Map<String, Object>)val));
}
value = list;
}
}
return super.put(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name), value);
}
}