package dgm.trees;
import com.tinkerpop.blueprints.*;
import dgm.GraphUtilities;
/**
* A pair of values
*
* @author wires
*
* @param <A>
* @param <B>
*/
public class Pair<A,B>
{
public final A a;
public final B b;
public Pair(A a, B b)
{
this.a = a;
this.b = b;
}
@Override
public final String toString()
{
final StringBuilder s = new StringBuilder("<");
s.append(getStringRepresentation(a));
s.append(",");
s.append(getStringRepresentation(b));
s.append(">");
return s.toString();
}
// TODO it's a hack...
private static String getStringRepresentation(Object x)
{
if(x == null)
return "null";
if (x instanceof Vertex)
{
final Object value = ((Vertex)x).getProperty(GraphUtilities.IDENTIFIER);
return value != null ? value.toString().trim() : x.toString();
}
if (x instanceof Edge)
{
final Edge e = (Edge)x;
final StringBuilder sb = new StringBuilder();
sb.append(getStringRepresentation(e.getVertex(Direction.OUT)));
sb.append("---[");
sb.append(e.getLabel());
sb.append("]--->");
sb.append(getStringRepresentation(e.getVertex(Direction.IN)));
return sb.toString().trim();
}
return x.toString().trim();
}
}