package foundation.data.rule; import java.util.List; import foundation.dao.bizlogic.ICodeProvider; import foundation.data.meta.field.Field; import foundation.data.meta.field.FieldsRuntime; import foundation.util.MapList; import foundation.util.Util; import foundation.variant.provider.DataEvent; public class FieldRules { private static MapList autoTemplates; private String dataName; private MapList valudateRules; private MapList defaultValueRules; static { autoTemplates = new MapList(); } public FieldRules(String dataName) { this.dataName = dataName; valudateRules = new MapList(); defaultValueRules = new MapList(); } public void loadOne(Field field, RuleSource source) throws Exception { String fieldName = field.getName(); //1. 加载校验规则 FieldValidateRule validateRule = FieldValidateRule.getInstance(field); if (validateRule != null) { valudateRules.add(fieldName, validateRule); } //2. 加载field中定义的默认值 if (field.hasDefaultValue()) { FieldDefaultValueRule defaultValueRule = new FieldDefaultValueRule(field, field.getDefaultValue(), source, field.getLabelChinese()); defaultValueRules.add(fieldName, defaultValueRule); } } public void loadOne(String fieldName, FieldDefaultValueRule defaultValueRule) throws Exception { defaultValueRules.add(fieldName, defaultValueRule); } public static void loadOneGlobalDefaultValueTemplate(GlobalDefaultValueTemplate template) { autoTemplates.add(template.getFieldName(), template); } public void loadGlobalDefaultValues(FieldsRuntime fieldsMeta) throws Exception { for (GlobalDefaultValueTemplate autoTemplate: autoTemplates) { String dataName = autoTemplate.getDataName(); if (!Util.isEmpty(dataName) && !dataName.equalsIgnoreCase(this.dataName)) { continue; } String fieldName = autoTemplate.getFieldName(); Field field = fieldsMeta.get(fieldName); if (!fieldsMeta.contains(fieldName)) { continue; } if (defaultValueRules.contains(fieldName)) { continue; } String defaultValue = autoTemplate.getValueCode(); DataEvent dataEvent = DataEvent.parse(autoTemplate.getDataEvent()); FieldDefaultValueRule defaultValueRule = new FieldDefaultValueRule(field, defaultValue, RuleSource.FieldMeta, autoTemplate.getRemark()); defaultValueRule.setDataEvent(dataEvent); defaultValueRules.add(fieldName, defaultValueRule); } } public List getValudateRules() { return valudateRules.getItemList(); } public List getDefaultValueRules() { return defaultValueRules.getItemList(); } public void clear() { //1. valudateRules.clear(); //2. MapList temp = new MapList(); for (FieldDefaultValueRule defaultRule: defaultValueRules) { if (RuleSource.FieldMeta != defaultRule.getSource()) { temp.add(defaultRule.getFieldName(), defaultRule); } } defaultValueRules = temp; } public ICodeProvider getCodeProvider() { for (FieldDefaultValueRule defaultValueRule: defaultValueRules) { if (FieldDefaultValueType.Code == defaultValueRule.getType()) { return defaultValueRule.getCodeProvider(); } } return null; } }