package foundation.data.meta.property;
|
|
import java.util.Set;
|
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.meta.field.Field;
|
import foundation.data.meta.field.FieldExtension;
|
import foundation.data.meta.field.FieldsRuntime;
|
import foundation.data.meta.template.PropertyTemplate;
|
import foundation.data.object.DataObject;
|
import foundation.json.IJSONWriter;
|
import foundation.util.CaseInsensitiveSet;
|
import foundation.util.Util;
|
|
public class Property {
|
|
public static Set<String> ExcludeFields;
|
|
private String fieldName;
|
private String scene;
|
private String capacity;
|
private boolean list;
|
private boolean form;
|
private boolean exportable;
|
private boolean importable;
|
private int listOrderNo;
|
private int formOrderNo;
|
private int exportOrderNo;
|
private int importOrderNo;
|
private Field field;
|
private Entity data;
|
private Entity runtime;
|
|
static {
|
initExcludeFields();
|
}
|
|
public Property() {
|
}
|
|
public static void toEntity(String dataName, Field field, Entity entity, PropertyTemplate template) {
|
int indexNo = field.getIndexNo();
|
|
entity.set("id", createPropertyID(dataName, indexNo));
|
entity.set("dataName", dataName);
|
entity.set("field_name", field.getName());
|
entity.set("remark", field.getLabelChinese());
|
entity.set("is_list", true);
|
entity.set("is_form", true);
|
entity.set("is_exportable", true);
|
entity.set("is_importable", true);
|
entity.set("list_order_no", indexNo);
|
entity.set("form_order_no", indexNo);
|
|
FieldsRuntime fields = entity.getFieldsMeta();
|
|
if (template != null) {
|
Entity data = template.getData();
|
String[] names = data.getFieldsMeta().getFieldNames();
|
int max = names.length;
|
|
for (int i = 0; i < max; i++) {
|
String name = names[i];
|
|
//1. 如果在排除字段里面,跳过
|
if (PropertyTemplate.ExcludeNames.contains(name)) {
|
continue;
|
}
|
|
//2. 如果Property不包含该属性,跳过
|
if (!fields.contains(name)) {
|
continue;
|
}
|
|
//3. 如果Property已经设置了该属性,跳过
|
if (!entity.isEmptyValue(name)) {
|
continue;
|
}
|
|
//4. 如果模板里面的值是空的,跳过
|
Object value = data.getValue(i);
|
|
if (Util.isEmpty(value)) {
|
continue;
|
}
|
|
//5. 将模板的值设置到Property里面
|
entity.set(name, value);
|
}
|
}
|
}
|
|
public void load(Entity data) {
|
//1.
|
this.data = data;
|
this.runtime = data;
|
|
//2.
|
fieldName = data.getString("field_name");
|
scene = data.getString("scene_code");
|
capacity = data.getString("capacity_code");
|
|
list = data.getBoolean("is_list", false);
|
form = data.getBoolean("is_form", false);
|
exportable = data.getBoolean("is_exportable", false);
|
importable = data.getBoolean("is_importable", false);
|
|
listOrderNo = data.getInteger("list_order_no", 100);
|
formOrderNo = data.getInteger("form_order_no", 100);
|
exportOrderNo = data.getInteger("export_order_no", 100);
|
importOrderNo = data.getInteger("import_order_no", 100);
|
}
|
|
public void setMaster(Property masterProperty) {
|
//1.
|
Entity masterData = masterProperty.data;
|
runtime = new Entity(masterData.getFieldsMeta());
|
runtime.copyFrom(masterData);
|
|
//2.
|
if (data == null && data.isEmpty()) {
|
return;
|
}
|
|
//3.
|
int max = data.getFieldCount();
|
|
for (int i = 0; i < max; i++) {
|
Object value = data.getValue(i);
|
|
if (Util.isEmpty(value)) {
|
continue;
|
}
|
|
runtime.set(i, value);
|
}
|
}
|
|
public void setField(Field field) {
|
//1.
|
this.field = field;
|
|
//2.
|
if (runtime.isEmptyValue("label_chinese")) {
|
runtime.set("label_chinese", field.getLabelChinese());
|
}
|
|
if (runtime.isEmptyValue("label_english")) {
|
runtime.set("label_english", field.getLabelEnglish());
|
}
|
}
|
|
public String getFieldName() {
|
return fieldName;
|
}
|
|
public String getScene() {
|
return scene;
|
}
|
|
public String getCapacity() {
|
return capacity;
|
}
|
|
public boolean isList() {
|
return list;
|
}
|
|
public boolean isForm() {
|
return form;
|
}
|
|
public boolean isExportalbe() {
|
return exportable;
|
}
|
|
public boolean isImportable() {
|
return importable;
|
}
|
|
public int getListOrderNo() {
|
return listOrderNo;
|
}
|
|
public int getFormOrderNo() {
|
return formOrderNo;
|
}
|
|
public int getExportOrderNo() {
|
return exportOrderNo;
|
}
|
|
public int getImportOrderNo() {
|
return importOrderNo;
|
}
|
|
public static String createPropertyID(String dataName, int indexNo) {
|
String no = String.valueOf(indexNo);
|
|
while (no.length() < 3) {
|
no = "0" + no;
|
}
|
|
return dataName + "_" + no;
|
}
|
|
public void writeJSON(IJSONWriter writer, int[] idx, String[] names) {
|
writer.beginObject();
|
int max = idx.length;
|
|
//1. 如果有field,输出field信息
|
writer.write("field_name", fieldName);
|
|
if (field != null) {
|
FieldExtension extension = field.getExtention();
|
|
if (extension != null) {
|
extension.writeJSONBody(writer);
|
}
|
}
|
|
//2. 输出property定义
|
for (int i = 0; i < max; i++) {
|
writer.writeJSON(names[i], runtime.getJSONString(idx[i], "null"));
|
}
|
|
writer.endObject();
|
}
|
|
private static void initExcludeFields() {
|
try {
|
ExcludeFields = new CaseInsensitiveSet();
|
|
DataObject dataObject = DataObject.getInstance("sys_data_property_ignore");
|
EntitySet entitySet = dataObject.getTableEntitySet();
|
|
for (Entity entity: entitySet) {
|
ExcludeFields.add(entity.getString("field_name"));
|
}
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|