/** * */ 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); } }