P15GEN2\59518
2024-05-29 d4210c7c4b04abde20037ea8aa0f54ef8a2649aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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<String, GlobalDefaultValueTemplate> autoTemplates;
    private String dataName;
    private MapList<String, FieldValidateRule> valudateRules;
    private MapList<String, FieldDefaultValueRule> defaultValueRules;
    
    static {
        autoTemplates = new MapList<String, GlobalDefaultValueTemplate>();
    }
    
    public FieldRules(String dataName) {
        this.dataName = dataName;
        valudateRules = new MapList<String, FieldValidateRule>();
        defaultValueRules = new MapList<String, FieldDefaultValueRule>();
    }
 
    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<FieldValidateRule> getValudateRules() {
        return valudateRules.getItemList();
    }
 
    public List<FieldDefaultValueRule> getDefaultValueRules() {
        return defaultValueRules.getItemList();
    }
 
    public void clear() {
        //1. 
        valudateRules.clear();
        
        //2.
        MapList<String, FieldDefaultValueRule> temp = new MapList<String, FieldDefaultValueRule>();
        
        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;
    }
    
}