import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.beanutils.LazyDynaBean;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
/**
* @Title: DynaBeanUtils.java
* @Package
* @Description: DynaBean工具类
* @author 灵丰文体
* @date 2018年05月23日 下午4:59:34
* @version V1.0
*/
public class DynaBeanUtils {
/**
* 时间格式
*/
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* JsonConfig
*/
private static final JsonConfig jsonConfig = new JsonConfig();
/**
* 时间格式
*/
private static final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
/**
* bean 转换成map
*/
public static Map<String, Object> convertBeanToMap(DynaBean bean){
Map<String, Object> map = null;
if(bean != null){
map = new HashMap<String, Object>();
DynaProperty[] properties = bean.getDynaClass().getDynaProperties();
if(properties != null){
for(DynaProperty property : properties){
map.put(property.getName(), bean.get(property.getName()));
}
}
}
return map;
}
/**
* map 转换成bean
*/
public static DynaBean convertMapToDynaBean(Map<String, Object> map){
DynaBean bean = null;
if(map != null){
bean = new LazyDynaBean();
for(String key : map.keySet()){
bean.set(key, map.get(key));
}
}
return bean;
}
/**
*
* list<map> 转换成list<Dynabean>
*/
public static List<DynaBean> convertListMapToListDynaBean(List<Map<String,Object>> listMap){
List<DynaBean> beans = new LinkedList<DynaBean>();
if(null != listMap && !listMap.isEmpty()){
for(Map<String,Object> map : listMap ){
if(null != map){
DynaBean bean = DynaBeanUtils.convertMapToDynaBean(map);
beans.add(bean);
}
}
}
return beans;
}
/**
* json 转Map
*/
public static Map<String,Object> jsonToMap(JSONObject json) throws Exception{
Map<String,Object> map = new HashMap<String,Object>();
for(Object key : json.keySet()){
map.put(key.toString(),json.get(key.toString()));
}
return map;
}
/**
* dynaBean 转JsonObject
*/
public static JSONObject convertDynaBeanToJSONObject(DynaBean bean){
try {
return JSONObject.fromObject(bean, jsonConfig);
} catch (Exception e) {
return null;
}
}
/**
* List<DynaBean> 转JSONObject
*/
public static JSONObject convertListToJSONObject(List<DynaBean> list){
try {
if(list != null && !list.isEmpty()){
DynaProperty[] properties = list.get(0).getDynaClass().getDynaProperties();
String field = null;
JSONObject json = new JSONObject();
for(DynaBean bean : list){
JSONObject temp = new JSONObject();
for(DynaProperty property : properties){
String key = property.getName();
if(property.getName().startsWith("F_")){
field = bean.get(key).toString();
}else{
Object v = bean.get(property.getName());
if (v instanceof Timestamp) {
v = sdf.format((Timestamp) v);
}else if (v instanceof Date) {
v = sdf.format((Date) v);
}
temp.put(key, v);
}
}
Object value = json.opt(field);
if (value == null) {
if(temp.size() == 1){
json.put(field, temp.get(temp.keys().next()));
}else{
json.put(field, temp);
}
}else if(value instanceof JSONObject){
JSONArray array = new JSONArray();
array.add(value);
array.add(temp);
json.put(field, array);
}else if(value instanceof JSONArray){
JSONArray array = (JSONArray)value;
if (array.get(0) instanceof JSONObject){
array.add(temp);
}else{
array.add(temp.get(temp.keys().next()));
}
json.put(field, array);
}
}
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* List<DynaBean> 转JSONArray
*/
public static JSONArray convertListToJSONArray(List<DynaBean> list){
try {
if(list != null && !list.isEmpty()){
JSONArray array = new JSONArray();
DynaProperty[] properties = list.get(0).getDynaClass().getDynaProperties();
for(DynaBean bean : list){
JSONObject json = new JSONObject();
JSONObject temp = new JSONObject();
String field = null;
for(DynaProperty property : properties){
String key = property.getName();
if(key.startsWith("F_")){
field = bean.get(key).toString();
}else{
Object v = bean.get(key);
if (v instanceof Timestamp) {
v = sdf.format((Timestamp) v);
}else if (v instanceof Date) {
v = sdf.format((Date) v);
}
if(key.startsWith("D_")) {
temp.put(key, v);
}else{
json.put(key, v);
}
}
}
if(!temp.isEmpty()){
if(field != null){
Object value = temp;
if(temp.size() == 1){
value = temp.get(temp.keys().next());
}
int i = 0;
for (; i < array.size(); i++) {
JSONObject obj = array.optJSONObject(i);
if(obj.toString().replace("{","").replace("}","")
.contains(json.toString().replace("{","").replace("}",""))){
json = obj;
break;
}
}
json.put(field, value);
if(i == array.size()){
array.add(json);
}
}else{
json.putAll(temp);
array.add(json);
}
}
}
return array;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}