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 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(); } } }