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
package foundation.json.tree;
 
import java.util.List;
 
import foundation.json.JSONBuilder;
import foundation.json.JSONReader;
import foundation.json.JType;
import foundation.util.MapList;
 
public abstract class JNode {
 
    protected JNode parent;
    protected String fullName;
    protected String name;
    protected JType type;
    protected MapList<String, JNode> children;
    protected int level;
    
    
    public JNode(String fullName, String name, JType type, int level) {
        this.fullName = fullName;
        this.name = name;
        this.type = type;
        this.level = level;
    }
 
    public static JNode newInstance(JType type, String fullName, String name, int level) {
        if (JType.Unknown == type) {
            return null;
        }
            
        if (JType.Array == type ) {
            return new JArrayNode(fullName, name, level);
        }
        else if (JType.Object == type ) {
            return new JObjectNode(fullName, name, level);
        }
        else {
            return new JValueNode(fullName, name, level);
        }
    }
    
    public List<JNode> getChildren() {
        if (children == null) {
            return null;
        }
        
        return children.getItemList();
    }
    
    public void addOneChild(String name, JNode node) {
        children.add(name, node);
    }
 
    public static JNode createInstance(JNode parent, String name, JType type, int level) {
        JNode result = null;
        
        String fullName = parent.getFullName() + "." + name;
                
        if (JType.Array == type) {
            result = new JArrayNode(fullName, name, level);
        }
        else if (JType.Object == type) {
            result = new JObjectNode(fullName, name, level);
        }
        else {
            result = new JValueNode(fullName, name, level);
        }
        
        parent.addOneChild(name, result);
        return result;
    }
 
    public void loadJSON(JSONReader parentReader, int level) {
        JType type; JNode node = null; String fullName, name;
        
        for (JSONReader reader: parentReader) {
            type = reader.getType();
            name = reader.getName();
                    
            if (JType.Array == type) {
                fullName = this.fullName + "." + name + "[]";
                
                node = new JArrayNode(fullName, name, level);
                children.add(fullName, node);
                
                node.loadJSON(reader, level + 1);
            }
            else if (JType.Object == type) {
                if (JType.Array == this.type) {
                    fullName = this.fullName + "." + name + "[" + children.size() + "]";
                }
                else {
                    fullName = this.fullName + "." + name;
                }
                
                node = new JObjectNode(fullName, parentReader.getName(), level);
                children.add(fullName, node);
                
                node.loadJSON(reader, level + 1);
            }
            else {
                fullName = parent.fullName + "." + name + "[]";
                
                node = new JValueNode(fullName, parentReader.getName(), level);
                children.add(fullName, node);
            }
        }
    }
 
    public abstract void toJSON(JSONBuilder builder);
    
    public abstract void toBand(JBand band);
    
    protected abstract void loadBandItem(JBand band, JBandItem bandItem);
 
    public boolean isSameName(String another) {
        return name.equalsIgnoreCase(another);
    }
    
    public String getFullName() {
        return fullName;
    }
 
    public String getName() {
        return name;
    }
 
}