package foundation.dao;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.mapping.FieldMapping;
|
import foundation.json.JArrayReader;
|
import foundation.json.JSONReader;
|
import foundation.json.JType;
|
import foundation.util.Util;
|
|
public class JSONMapping {
|
private String id;
|
private String parentDataName;
|
private String dataName;
|
private String fromName;
|
private String typeCode;
|
private List<FieldMapping> fieldMappings;
|
|
public void load(Entity entity) {
|
this.id = entity.getId();
|
this.parentDataName = entity.getString("parent_dataname");
|
this.dataName = entity.getString("dataname");
|
this.fromName = entity.getString("json_name");
|
this.typeCode = entity.getString("type_code");
|
fieldMappings = new ArrayList<FieldMapping>();
|
}
|
|
public void loadMappings(EntitySet entitySet){
|
for (Entity entity : entitySet) {
|
FieldMapping mapping = new FieldMapping();
|
mapping.load(entity);
|
fieldMappings.add(mapping);
|
}
|
}
|
|
public JSONReader getJSONReader(JSONReader reader) {
|
if (".".equals(fromName)) {
|
return reader;
|
}
|
|
String[] objectNamelList = fromName.split("\\.");
|
|
for (String objectName : objectNamelList) {
|
int listStartPos = objectName.indexOf("[");
|
int listEndPos = objectName.indexOf("]");
|
|
//1. 当前层级为对象;不含[], 如data
|
if (listStartPos < 0) {
|
reader = reader.getReader(objectName, JType.Object);
|
continue;
|
}
|
|
String indexStr = objectName.substring(listStartPos + 1, listEndPos);
|
String listName = objectName.substring(0, listStartPos);
|
//2. 当前层级为列表且不指定索引,则返回列表;如data[index]
|
if (!Util.isInteger(indexStr)) {
|
JArrayReader arrayReader = reader.getReader(listName, JType.Array);
|
return arrayReader;
|
}
|
|
//3. 当前层级为列表且指定索引,则获取指定索引对象;如data[0]
|
int index = Integer.valueOf(indexStr);
|
|
JArrayReader arrayReader = reader.getReader(listName, JType.Array);
|
if (arrayReader != null && arrayReader.size() > index) {
|
reader = arrayReader.getReader(index);
|
}
|
}
|
|
return reader;
|
}
|
|
public String getId() {
|
return id;
|
}
|
|
public String getParentDataName() {
|
return parentDataName;
|
}
|
|
public String getDataName() {
|
return dataName;
|
}
|
|
public String getFromName() {
|
return fromName;
|
}
|
|
public String getTypeCode() {
|
return typeCode;
|
}
|
|
public List<FieldMapping> getFieldMappings() {
|
return fieldMappings;
|
}
|
|
public JType getType() {
|
if ("Master".equalsIgnoreCase(typeCode)) {
|
return JType.Object;
|
}
|
|
return JType.Array;
|
}
|
}
|