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
137
138
139
140
141
package foundation.json;
 
import java.util.List;
import java.util.Set;
 
import org.json.JSONArray;
import org.json.JSONObject;
 
import foundation.util.Util;
 
public abstract class JSONReader implements Iterable<JSONReader>, IJSONProvider{
 
    protected String name;
    protected JType type;
    
    public abstract boolean isEmpty();
    
    public abstract boolean hasChildren();
    
    public abstract boolean has(String name);
    
    public abstract JType getType(String name);
    
    public abstract Object getValue();
    
    public abstract Object getValue(String name);
    
    public abstract Object getValue(String name, Object defaultValue);
    
    public abstract String getRawString(String name);
    
    public abstract String getString(String name);
    
    public abstract String getString(String name, String defaultValue);
    
    public abstract String getDecodeString(String name);
    
    public abstract String getDecodeString(String name, String defaultValue);
    
    public abstract Set<String> getStringSet();
    
    public abstract List<String> getStringList();
    
    public abstract Set<String> getStringSet(String name);
    
    public abstract List<String> getStringList(String name);
    
    public abstract Integer getInteger(Integer defaultValue);
    
    public abstract Integer getInteger(String name, Integer defaultValue);
    
    public abstract boolean getBoolean(boolean defaultValue);
    
    public abstract boolean getBoolean(String name, boolean defaultValue);
    
    public abstract <T extends JSONReader> T getReader(String name, JType type); 
    
    public void put(String name, Object value) {
        if (value instanceof JSONReader) {
            putReader(name, (JSONReader)value);
            return;
        }
        
        JType type = JType.getInstance(value);
        
        if (JType.Array == type) {
            JArrayReader reader = new JArrayReader(name, (JSONArray)value);
            putReader(name, reader);
        }
        else if (JType.Object == type) {
            JObjectReader reader = new JObjectReader(name, (JSONObject)value);
            putReader(name, reader);
        }
        else {
            putValue(name, value);
        }
    }
    
    protected abstract void putReader(String name, JSONReader reader);
    
    protected abstract void putValue(String name, Object value);
    
    protected abstract void putValue(Object value);
    
    public String getName() {
        return name;
    }
    
    public JType getType() {
        return type;
    }
 
    public static JType readType(String content) {
        if (Util.isEmpty(content)) {
            return JType.Empty;
        }
        
        int max = content.length();
        
        for (int i = 0; i < max; i++) {
            char c = content.charAt(i);
            
            if (' ' == c) {
                continue;
            }
            else if ('{' == c) {
                return JType.Object;
            }
            else if ('[' == c) {
                return JType.Array;
            }
            else {
                return JType.Unknown;
            }
        }
        
        return JType.Unknown;
    }
 
    public void writeJSON(IJSONWriter writer) {
        if (JType.Array == type) {
            JSONArray jsonArray = (JSONArray)getValue(name);
            writer.beginArray(name);
            for(Object json: jsonArray) {
                JSONReader jsonReader = (JSONReader)json;
                jsonReader.writeJSON(writer);
            }
            writer.endArray();
        }
        else if (JType.Object == type) {
            writer.beginObject(name);
            JSONReader jsonReader = (JSONReader)getValue(name);
            jsonReader.writeJSON(writer);
            writer.endObject();
        }
        else {
            writer.write(name, getString(name));
        }
    }
    
}