package com.os4j.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class FastjsonArrayUtils extends FastjsonUtils {
private List<Object> insertList;
private List<Object> deleteList;
private List<Object> updateList;
public FastjsonArrayUtils() {
insertList = new ArrayList<Object>();
deleteList = new ArrayList<Object>();
updateList = new ArrayList<Object>();
}
public Map<String, Object> compartr(Map<String, Object> map, String key, JSONArray ja1, JSONArray ja2) {
List<Object> cl1;
List<Object> cl2;
String className,id;
if ("creditLine".equals(key)){
clear();
id = "id";
className = "com.os4j.model.CreditLine";
}else if ("materialList".equals(key)){
clear();
className = "com.os4j.model.MaterialCompart";
id = "materialId";
} else if ("attributeList".equals(key)){
clear();
className = "com.os4j.model.AttributeValueDTO";
id = "attributeDefinitionId";
} else {
return map;
}
Class clazz = super.getClassByName(className);
cl1 = super.JSONArray2JavaList(ja1,clazz);
cl2 = super.JSONArray2JavaList(ja2,clazz);
compartr(cl1, cl2);
Map<String,Object> tmap = new TreeMap<String,Object>();
if(!insertList.isEmpty())
tmap.put("insert", super.list2JSONArray(insertList));
if(!deleteList.isEmpty())
tmap.put("delete", super.list2JSONArray(deleteList));
cl1.retainAll(updateList);
cl2.retainAll(updateList);
Map cmap = new TreeMap();
for (Object c : cl1) {
Object cl = cl2.get(cl2.indexOf(c));
Map<String,Object> pmap = new TreeMap<String,Object>();
super.compartr(pmap, super.java2JSONOject(c), super.java2JSONOject(cl));
JSONObject json = super.java2JSONOject(cl);
if(!pmap.isEmpty())
cmap.put(json.get(id), pmap);
}
if(!cmap.isEmpty())
tmap.put("update", cmap);
if(!tmap.isEmpty())
map.put(key, tmap);
return map;
}
public void clear(){
insertList.clear();
deleteList.clear();
updateList.clear();
}
public void compartr(List<Object> l1,List<Object> l2){
if (l1 == null && l2 == null)
return;
// 全部删除
if (l2.isEmpty()) {
deleteList = l1;
return;
}
// 全部新增
if (l1.isEmpty()) {
insertList = l2;
return;
}
// 有新增+更新+删除
for (Object obj : l2) {
// 更新的
if (l1.contains(obj))
updateList.add(obj);
else
insertList.add(obj);// 新增的
}
// 要删的
for (Object obj : l1)
if (!l2.contains(obj))
deleteList.add(obj);
}
}