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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package foundation.variant.provider;
 
import java.util.HashSet;
import java.util.Set;
 
import foundation.util.Util;
 
public class VariantLink { 
 
    public static void fillOnConsumer(DataEvent dataEvent, IVariantsConsumer consumer, IVariantsProvider... providers) throws Exception {
        if (providers == null) {
            return;
        }
        
        Set<String> nameList = consumer.getVariantNames();
        
        for (String name: nameList) {
            //如果已经有值就不重新添加了
            if (!consumer.isVariantNull(name)) {
                continue;
            }
            
            for (IVariantsProvider provider: providers) {
                if (provider == null) {
                    continue;
                }
                
                if (provider.containsVariant(name)) {
                    Object value = provider.getVariantValue(dataEvent, name);
                    setCustomerValue(dataEvent, consumer, name, value);
                }
            }
        }
    }
    
    public static void overWriteOnConsumer(DataEvent dataEvent, IVariantsConsumer consumer, IVariantsProvider... providers) throws Exception {
        if (providers == null) {
            return;
        }
        
        Set<String> nameList = consumer.getVariantNames();
        
        for (String name: nameList) {
            for (IVariantsProvider provider: providers) {
                if (provider == null) {
                    continue;
                }
                
                if (provider.containsVariant(name)) {
                    Object value = provider.getVariantValue(dataEvent, name);
                    setCustomerValue(dataEvent, consumer, name, value);
                }
 
            }
        }
    }
    
    public static boolean moveOnConsumer(DataEvent dataEvent, IVariantsProvider provider, IVariantsConsumer consumer, Set<String> excludeNames) throws Exception {
        boolean excluded = false;
        
        Set<String> nameList = consumer.getVariantNames();
        
        if (nameList == null) {
            return excluded;
        }
        
        //1. to lower 
        Set<String> lowerSet = new HashSet<String>();
        for (String one: excludeNames) {
            lowerSet.add(one.toLowerCase());
        }
 
        //2. compare
        for (String name: nameList) {
            if (lowerSet.contains(name)) {
                excluded = true;
                continue;
            }
            
            if (provider.containsVariant(name)) {
                Object value = provider.getVariantValue(dataEvent, name);
                setCustomerValue(dataEvent, consumer, name, value);
            }
        }        
        
        return excluded;
    }
    
 
    public static void moveOnProvider(DataEvent dataEvent, IVariantsProvider provider, IVariantsConsumer consumer) throws Exception {
        Set<String> nameList = provider.getVariantNames();
        
        for (String name: nameList) {
            if (consumer.containsVariant(name)) {
                Object value = provider.getVariantValue(dataEvent, name);
                setCustomerValue(dataEvent, consumer, name, value);
            }
        }
    }
    
    public static boolean moveOnProvider(DataEvent dataEvent, IVariantsProvider provider, IVariantsConsumer consumer, Set<String> excludeNames) throws Exception {
        boolean excluded = false;
        
        Set<String> lowerSet = new HashSet<String>();
        for (String one: excludeNames) {
            lowerSet.add(one.toLowerCase());
        }
        
        Set<String> nameList = provider.getVariantNames();
        
        for (String name: nameList) {
            if (lowerSet.contains(name)) {
                excluded = true;
                continue;
            }
            
            if (consumer.containsVariant(name)) {
                Object value = provider.getVariantValue(dataEvent, name);
                setCustomerValue(dataEvent, consumer, name, value);
            }
        }        
        
        return excluded;
    }
 
    private static void setCustomerValue(DataEvent dataEvent, IVariantsConsumer consumer, String name, Object value) throws Exception {
        if (Util.isEmpty(value)) {
            return;
        }
        
        consumer.setVariant(dataEvent, name, value);        
    }
 
}