刘光辉
4 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
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
package jnpf.bizcommon.audit.service;
 
import com.alibaba.fastjson.JSON;
import jnpf.audit.diff.AuditFieldDiff;
import jnpf.bizcommon.audit.service.support.AuditHiddenFieldDiffFilter;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public final class AuditHiddenFieldDiffFilterProbe {
 
    private AuditHiddenFieldDiffFilterProbe() {
    }
 
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        Map<String, AuditFieldDiff.FieldMeta> metadata = new HashMap<>();
        metadata.put("secret", meta(true));
        metadata.put("childsecret", meta(true));
        metadata.put("hiddentable", meta(true));
        String diffs = "[{\"field\":\"secret\",\"newData\":\"private\"},"
                + "{\"field\":\"visible\",\"newData\":\"public\"},"
                + "{\"field\":\"table\",\"chidField\":[{\"prop\":\"childSecret\"},"
                + "{\"prop\":\"childVisible\"}],\"chidData\":[{\"childSecret\":\"private\","
                + "\"jnpf_old_childSecret\":\"old private\",\"childVisible\":\"public\"}]},"
                + "{\"field\":\"hiddenTable\",\"chidField\":[{\"prop\":\"visible\"}],"
                + "\"chidData\":[{\"visible\":\"private\"}]},"
                + "{\"field\":\"hiddenOnlyChange\",\"chidField\":[{\"prop\":\"childSecret\"},"
                + "{\"prop\":\"childVisible\"}],\"chidData\":[{\"childSecret\":\"private\"}]}]";
        List<Map<String, Object>> result = (List<Map<String, Object>>) JSON.parse(
                AuditHiddenFieldDiffFilter.filter(diffs, metadata));
        check(result.size() == 2, "hidden main field and hidden table removed");
        check("visible".equals(result.get(0).get("field")), "visible main field retained");
        Map<String, Object> table = result.get(1);
        List<Map<String, Object>> fields = (List<Map<String, Object>>) table.get("chidField");
        List<Map<String, Object>> rows = (List<Map<String, Object>>) table.get("chidData");
        check(fields.size() == 1 && "childVisible".equals(fields.get(0).get("prop")),
                "hidden child column removed");
        check(!rows.get(0).containsKey("childSecret")
                        && !rows.get(0).containsKey("jnpf_old_childSecret")
                        && "public".equals(rows.get(0).get("childVisible")),
                "hidden child values removed; visible value retained");
    }
 
    private static AuditFieldDiff.FieldMeta meta(boolean hidden) {
        return new AuditFieldDiff.FieldMeta(null, null, null,
                null, null, null, null, null, hidden);
    }
 
    private static void check(boolean condition, String message) {
        if (!condition) {
            throw new AssertionError(message);
        }
    }
}