001    package org.maltparser.parser.history;
002    
003    import java.util.ArrayList;
004    
005    import org.maltparser.core.exception.MaltChainedException;
006    import org.maltparser.parser.history.action.ActionDecision;
007    import org.maltparser.parser.history.action.GuideUserAction;
008    /**
009     * 
010     * @author Johan Hall
011    */
012    public class HistoryTreeNode implements HistoryNode {
013            private GuideUserAction action;
014            private HistoryTreeNode parent;
015            private int depth;
016            private ArrayList<HistoryTreeNode> children;
017    //      private double score;
018            
019            public HistoryTreeNode(HistoryNode previousNode, GuideUserAction action) {
020                    setPreviousNode(parent);
021                    setAction(action);
022                    children = new ArrayList<HistoryTreeNode>();
023            }
024            
025    //      public HistoryTreeNode(HistoryNode previousNode, GuideUserAction action, double score) {
026    //              setPreviousNode(parent);
027    //              setAction(action);
028    //              setScore(score);
029    //              children = new ArrayList<HistoryTreeNode>();
030    //      }
031            
032            public GuideUserAction getAction() {
033                    return action;
034            }
035    
036            public void setAction(GuideUserAction action) {
037                    this.action = action;
038            }
039    
040            public HistoryNode getPreviousNode() {
041                    return parent;
042            }
043            
044            public void setPreviousNode(HistoryNode node) {
045                    if (node instanceof HistoryTreeNode) {
046                            this.parent = (HistoryTreeNode)node;
047                            parent.addChild(this);
048                            setDepth(parent.getDepth()+1);
049                    }
050            }
051            
052            public int getDepth() {
053                    return depth;
054            }
055    
056            public void setDepth(int depth) {
057                    this.depth = depth;
058            }
059    
060            public void addChild(HistoryTreeNode child) {
061                    children.add(child);
062            }
063            
064            public void removeChild(HistoryTreeNode child) {
065                    children.remove(child);
066            }
067            
068            public HistoryTreeNode getChild(ActionDecision childDecision) {
069                    for (HistoryTreeNode c : children) {
070                            if (c.getAction().equals(childDecision)) {
071                                    return c;
072                            }
073                    }
074                    return null;
075            }
076            
077    //      public double getScore() {
078    //              return score;
079    //      }
080    //
081    //      public void setScore(double score) {
082    //              this.score = score;
083    //      }
084            
085            public int getPosition() {
086                    return depth;
087            }
088            
089            public void clear() throws MaltChainedException {
090                    if (parent != null) {
091                            parent.removeChild(this);
092                    }
093                    setAction(null);
094                    setPreviousNode(null);
095                    children.clear();
096            }
097            
098            public boolean equals(Object obj) {
099                    return super.equals(obj);
100            }
101    
102            public int hashCode() {
103                    return super.hashCode();
104            }
105            
106            public String toString() {
107                    final StringBuilder sb = new StringBuilder();
108                    for (int i = 0; i <= depth; i++) {
109                            sb.append("  ");
110                    }
111                    sb.append(action);
112                    sb.append('\n');
113                    for (int i = 0; i < children.size(); i++) {
114                            sb.append(children.get(i));
115                    }
116                    return sb.toString();
117            }
118            
119    }