package org.nutz.weixin.util;
import java.io.Reader;
import java.io.StringReader;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import org.nutz.json.Json;
import org.nutz.lang.FailToGetValueException;
import org.nutz.lang.Mirror;
import org.nutz.lang.util.NutMap;
public class BeanConfigures {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static final <T> T configure(T t, Object obj) {
if (t == null)
return t;
if (obj == null)
return t;
Map<String, Object> map = null;
if (obj instanceof Map) {
map = (Map<String, Object>)obj;
} else {
map = asConfigureMap(obj);
}
Mirror mirror = Mirror.me(t);
Mirror m2 = Mirror.me(obj);
for(Field field : mirror.getFields()) {
Object value = null;
if (map != null)
value = map.get(field.getName());
else {
try {
value = m2.getValue(obj, field.getName());
} catch (FailToGetValueException e) {
// skip;
}
}
if (value != null) {
mirror.setValue(t, field.getName(), value);
}
}
return t;
}
public static Map<String, Object> asConfigureMap(Object obj) {
Map<String, Object> map = null;
if (obj instanceof String) {
try {
map = Json.fromJsonAsMap(Object.class, (String)obj);
} catch (Exception e) {
try {
Properties p = new Properties();
p.load(new StringReader(obj.toString()));
map = toMap(p);
} catch (Exception e2) {
}
}
} else if (obj instanceof Reader) {
try {
map = Json.fromJsonAsMap(Object.class, (Reader)obj);
} catch (Exception e) {
try {
Properties p = new Properties();
p.load((Reader)obj);
map = toMap(p);
} catch (Exception e2) {
}
}
}
return map;
}
public static Map<String, Object> toMap(Properties properties) {
NutMap map = new NutMap();
for (Entry<Object, Object> en : properties.entrySet()) {
map.put(en.getKey().toString(), en.getValue());
}
if (map.isEmpty())
return null;
return map;
}
}