黄潞潞
2024-06-07 482f807361c9bc0dce2db949a29c755cf858548b
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
package foundation.data.rule;
 
import foundation.dao.bizlogic.ICodeProvider;
import foundation.data.entity.Entity;
import foundation.data.object.IParamProvider;
import foundation.util.MapList;
import foundation.variant.provider.DataEvent;
 
public abstract class FieldDefaultValueCreator {
    
    private static MapList<String, Class<? extends FieldDefaultValueCreator>> items;
    protected String fieldName;
    protected String category;
    protected String rule;
    protected FieldDefaultValueType type;
    
    static {
        items = new MapList<String, Class<? extends FieldDefaultValueCreator>>();
    }
 
    public static FieldDefaultValueCreator getInstance(String fieldName, String expression) throws Exception {
        String rule = expression;
        int pos = expression.indexOf(".");
        
        FieldDefaultValueCreator result = null;
        
        //1. 形如@{user.id}、@{newDate}这样的规则
        if (expression.startsWith("@{")) {
            result = new VariantDefaultValueCreator();
        }
        
        //2. 形如Code.OrderCode这样的规则
        else if (pos > 0) {
            String category = expression.substring(0, pos);
            rule = expression.substring(pos + 1);
            
            Class<? extends FieldDefaultValueCreator> clazz = items.get(category);
            if (clazz != null) {
                result = clazz.newInstance();
            }
        }
        else {
            result = new SimpleDefaultValueCreator();
        }
        
        if (result == null) {
            result = new SimpleDefaultValueCreator();
        }
        
        result.setFieldName(fieldName);
        result.setRule(rule);
        
        return result;
    }
    
    public abstract Object exec(DataEvent saveEvent, Entity entity, IParamProvider paramProvider);
 
    public static void registerOne(String category, Class<? extends FieldDefaultValueCreator> clazz) {
        if (category == null) {
            return;
        }
        
        items.add(category, clazz);        
    }
 
    protected void setRule(String rule) {
        this.rule = rule;
    }
 
    public String getFieldName() {
        return fieldName;
    }
 
    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }
 
    public FieldDefaultValueType getType() {
        return type;
    }
 
    public ICodeProvider getCodeProvider() {
        return null;
    }
 
}