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 }