package fr.orsay.lri.varna.models.treealign;
/**
* The type of node values in an alignment.
* Contains a reference to both original nodes.
* This class implements GraphvizDrawableNodeValue but it will only work
* if the original nodes implement it.
* @author Raphael Champeimont
* @param <OriginalNodeValueType1> The type of values in the original first tree.
* @param <OriginalNodeValueType2> The type of values in the original second tree.
*/
public class AlignedNode<OriginalNodeValueType1, OriginalNodeValueType2> implements GraphvizDrawableNodeValue {
private Tree<OriginalNodeValueType1> leftNode;
private Tree<OriginalNodeValueType2> rightNode;
public Tree<OriginalNodeValueType1> getLeftNode() {
return leftNode;
}
public void setLeftNode(Tree<OriginalNodeValueType1> leftNode) {
this.leftNode = leftNode;
}
public Tree<OriginalNodeValueType2> getRightNode() {
return rightNode;
}
public void setRightNode(Tree<OriginalNodeValueType2> rightNode) {
this.rightNode = rightNode;
}
private String maybeNodeToGraphvizNodeName(Tree <? extends GraphvizDrawableNodeValue> tree) {
return (tree != null && tree.getValue() != null) ? tree.getValue().toGraphvizNodeName() : "_";
}
/**
* This method will work only if the left and right node
* already implement GraphvizDrawableNodeValue.
*/
@SuppressWarnings("unchecked")
public String toGraphvizNodeName() {
return "(" + maybeNodeToGraphvizNodeName((Tree) leftNode)
+ "," + maybeNodeToGraphvizNodeName((Tree) rightNode) + ")";
}
}