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;
|
}
|
|
}
|