package foundation.preload;
|
|
import java.util.Comparator;
|
|
import foundation.json.IJSONWriter;
|
import foundation.util.MapList;
|
|
public abstract class Node {
|
|
protected Node parent;
|
protected MapList<String, Node> children;
|
|
|
public Node() {
|
children = new MapList<String, Node>();
|
}
|
|
public abstract String getId();
|
|
public abstract String getParentId();
|
|
public void addOneChild(Node item) {
|
children.add(item.getId(), item);
|
}
|
|
public Comparator<Node> createComparator() {
|
return null;
|
}
|
|
public void sort(Comparator<Node> comparator) {
|
//1. 创建comparator
|
if (comparator == null) {
|
comparator = createComparator();
|
}
|
|
if (comparator == null) {
|
return;
|
}
|
|
//2. 递归调用子节点进行排序
|
for (Node child: children) {
|
|
if (child.containsChildren()) {
|
child.sort(comparator);
|
}
|
}
|
|
//3. 排序自己在子节点
|
children.sortList(comparator);
|
}
|
|
@Override
|
public String toString() {
|
return getId();
|
}
|
|
@SuppressWarnings("unchecked")
|
public <T> T getParent() {
|
return (T)parent;
|
}
|
|
public MapList<String, Node> getChildren() {
|
return children;
|
}
|
|
@SuppressWarnings("unchecked")
|
public <T> T getChild(String nodeId) {
|
String id = getId();
|
if (id.equals(nodeId)) {
|
return (T)this;
|
}
|
|
for(Node child : children) {
|
T targetNode = child.getChild(nodeId);
|
|
if (targetNode != null) {
|
return targetNode;
|
}
|
}
|
|
return null;
|
}
|
|
public MapList<String, Node> getLeafChildren(MapList<String, Node> result) {
|
if (children == null || children.isEmpty()) {
|
String id = getId();
|
result.add(id, this);
|
return result;
|
}
|
|
for (Node child : children) {
|
child.getLeafChildren(result);
|
}
|
|
return result;
|
}
|
|
public boolean containsChildren() {
|
return !children.isEmpty();
|
}
|
|
public abstract void writeJSON(IJSONWriter writer);
|
|
public abstract void writeJSONBody(IJSONWriter writer);
|
|
}
|