package edu.berkeley.nlp.syntax;
import java.util.List;
public class TreePath<L> {
public enum Direction {
UP,
DOWN,
DOWN_LEFT,
DOWN_RIGHT;
}
public static class Transition<L> {
private Tree<L> fromNode;
private Tree<L> toNode;
private Direction direction;
public Transition(Tree<L> fromNode, Tree<L> toNode, Direction direction) {
this.fromNode = fromNode;
this.toNode = toNode;
this.direction = direction;
}
public Tree<L> getFromNode() {
return fromNode;
}
public Tree<L> getToNode() {
return toNode;
}
public Direction getDirection() {
return direction;
}
}
private Tree<L> startNode;
private Tree<L> endNode;
private List<Transition<L>> transitions;
public TreePath(List<Transition<L>> transitions) {
if (transitions == null || transitions.size() == 0) {
throw new IllegalArgumentException("Cannot have empty transitions list");
}
this.transitions = transitions;
startNode = transitions.get(0).fromNode;
endNode = transitions.get(transitions.size()-1).toNode;
}
public Tree<L> getStartNode() {
return startNode;
}
public Tree<L> getEndNode() {
return endNode;
}
public List<Transition<L>> getTransitions() {
return transitions;
}
private String cacheStr = null;
@Override
public String toString() {
if (cacheStr == null) {
StringBuilder sb = new StringBuilder();
sb.append("[ ");
for (Transition<L> transition : transitions) {
sb.append(transition.fromNode.getLabel() + " " + transition.direction + " ");
}
sb.append(endNode.getLabel() + " ]");
cacheStr = sb.toString();
}
return cacheStr;
}
}