package org.maltparser.parser.history; import java.util.ArrayList; import org.maltparser.core.exception.MaltChainedException; import org.maltparser.parser.history.action.ActionDecision; import org.maltparser.parser.history.action.GuideUserAction; /** * * @author Johan Hall */ public class HistoryTreeNode implements HistoryNode { private GuideUserAction action; private HistoryTreeNode parent; private int depth; private ArrayList<HistoryTreeNode> children; // private double score; public HistoryTreeNode(HistoryNode previousNode, GuideUserAction action) { setPreviousNode(parent); setAction(action); children = new ArrayList<HistoryTreeNode>(); } // public HistoryTreeNode(HistoryNode previousNode, GuideUserAction action, double score) { // setPreviousNode(parent); // setAction(action); // setScore(score); // children = new ArrayList<HistoryTreeNode>(); // } public GuideUserAction getAction() { return action; } public void setAction(GuideUserAction action) { this.action = action; } public HistoryNode getPreviousNode() { return parent; } public void setPreviousNode(HistoryNode node) { if (node instanceof HistoryTreeNode) { this.parent = (HistoryTreeNode) node; parent.addChild(this); setDepth(parent.getDepth() + 1); } } public int getDepth() { return depth; } public void setDepth(int depth) { this.depth = depth; } public void addChild(HistoryTreeNode child) { children.add(child); } public void removeChild(HistoryTreeNode child) { children.remove(child); } public HistoryTreeNode getChild(ActionDecision childDecision) { for (HistoryTreeNode c : children) { if (c.getAction().equals(childDecision)) { return c; } } return null; } // public double getScore() { // return score; // } // // public void setScore(double score) { // this.score = score; // } public int getPosition() { return depth; } public void clear() throws MaltChainedException { if (parent != null) { parent.removeChild(this); } setAction(null); setPreviousNode(null); children.clear(); } @Override public boolean equals(Object obj) { return super.equals(obj); } @Override public int hashCode() { return super.hashCode(); } @Override public String toString() { final StringBuilder sb = new StringBuilder(); for (int i = 0; i <= depth; i++) { sb.append(" "); } sb.append(action); sb.append('\n'); for (int i = 0; i < children.size(); i++) { sb.append(children.get(i)); } return sb.toString(); } }