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
135
136
package foundation.object.reader;
 
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
 
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
 
public abstract class EntityReader implements IEntityReader {
 
    protected static Logger logger;
    protected static Set<String> excludeMethods;
    private static Map<Class<?>, ObjectReader> objectReadercontainer;
    private static Map<Class<?>, MapReader> mapReaderContainer;
    private static Map<Class<?>, CollectionReader> collectionReaderContainer;
    protected Class<?> clazz;
 
    
    static {
        logger = LogManager.getLogger(ObjectReader.class);
        createExcludeMethodSet();
        
        objectReadercontainer = new HashMap<Class<?>, ObjectReader>();
        mapReaderContainer = new HashMap<Class<?>, MapReader>();
        collectionReaderContainer = new HashMap<Class<?>, CollectionReader>();
    }
 
    protected EntityReader(Class<?> clazz) {
        this.clazz = clazz;
    }
 
    public static IEntityReader getInstance(Class<?> clazz) throws Exception {
        if (Collection.class.isAssignableFrom(clazz)) {
            return getCollectionInstance(clazz);
        } 
        else if (Map.class.isAssignableFrom(clazz)) {
            return getMapInstance(clazz);
        } 
        else {
            return getObjectInstance(clazz);
        }
    }
 
    public static ObjectReader getObjectInstance(Class<?> clazz) throws Exception {
        ObjectReader result = objectReadercontainer.get(clazz);
        
        if (result == null) {
            synchronized (objectReadercontainer) {
                result = objectReadercontainer.get(clazz);
                
                if (result == null) {
                    result = new ObjectReader(clazz);
                    objectReadercontainer.put(clazz, result);
                }
            }
        }
        
        return result;
    }
    
    public static MapReader getMapInstance(Class<?> clazz) throws Exception {
        MapReader result = mapReaderContainer.get(clazz);
        
        if (result == null) {
            synchronized (mapReaderContainer) {
                result = mapReaderContainer.get(clazz);
                
                if (result == null) {
                    result = new MapReader(clazz);
                    mapReaderContainer.put(clazz, result);
                }
            }
        }
        
        return result;
    }
    
    public static CollectionReader getCollectionInstance(Class<?> clazz) throws Exception {
        CollectionReader result = collectionReaderContainer.get(clazz);
        
        if (result == null) {
            synchronized (collectionReaderContainer) {
                result = collectionReaderContainer.get(clazz);
                
                if (result == null) {
                    result = new CollectionReader(clazz);
                    collectionReaderContainer.put(clazz, result);
                }
            }
        }
        
        return result;
    }
 
    protected abstract void initValueReader(Class<?> dataType) throws Exception;
 
    public abstract String getString(Object entity);
 
    public abstract String getJSONString(Object entity) throws Exception;
 
    public Class<?> getEntityClass() {
        return clazz;
    }
 
    private static void createExcludeMethodSet() {
        excludeMethods = new HashSet<String>();
        excludeMethods.add("getclass");
        excludeMethods.add("getnames");
        excludeMethods.add("getsize");
        excludeMethods.add("containsproperty");
        excludeMethods.add("loaddata");
        excludeMethods.add("setdata");
        excludeMethods.add("setdataString");
        excludeMethods.add("getdata");
        excludeMethods.add("getString");
        excludeMethods.add("getjsonString");
        excludeMethods.add("getsqlString");
        excludeMethods.add("getvalue");
        excludeMethods.add("getdynamicdata");
        excludeMethods.add("iterator");
        excludeMethods.add("toString");
        excludeMethods.add("finalize");
        excludeMethods.add("wait");
        excludeMethods.add("hashcode");
        excludeMethods.add("clone");
        excludeMethods.add("registernatives");
        excludeMethods.add("equals");
        excludeMethods.add("notify");
        excludeMethods.add("notifyall");
        excludeMethods.add("getinstance");
    }
 
}