package com.google.code.joto.util.graph;
import java.util.ArrayList;
import java.util.List;
import com.google.code.joto.util.attr.IAttributeSupport;
import com.google.code.joto.util.attr.IAttributeSupportDelegate;
/**
*
*/
public class DecoratorGraph<Vertex extends IAttributeSupportDelegate> implements IGraph<Vertex> {
private List<Vertex> vertexes = new ArrayList<Vertex>();
private static enum InnerGraphAttr{
ATTR_KEY_FROM_VERTEXES,
ATTR_KEY_TO_VERTEXES
}
// -------------------------------------------------------------------------
public DecoratorGraph() {
}
// -------------------------------------------------------------------------
public void addVertex(Vertex p) {
vertexes.add(p);
}
@SuppressWarnings("unchecked")
public void addLink(Vertex from, Vertex to) {
IAttributeSupport fromAttr = from.getAttributeSupport();
List<Vertex> vertexFrom_ToAttrList =
(List<Vertex>) fromAttr.getAttrOrPutNewInstance(InnerGraphAttr.ATTR_KEY_TO_VERTEXES, ArrayList.class);
vertexFrom_ToAttrList.add(to);
IAttributeSupport toAttr = to.getAttributeSupport();
List<Vertex> vertexTo_FromAttrList =
(List<Vertex>) toAttr.getAttrOrPutNewInstance(InnerGraphAttr.ATTR_KEY_FROM_VERTEXES, ArrayList.class);
vertexTo_FromAttrList.add(from);
}
public List<Vertex> getVertexes() {
return vertexes;
}
@SuppressWarnings("unchecked")
public List<Vertex> getVertexFromList(Vertex p) {
return (List<Vertex>) p.getAttributeSupport().getAttr(InnerGraphAttr.ATTR_KEY_FROM_VERTEXES);
}
@SuppressWarnings("unchecked")
public List<Vertex> getVertexToList(Vertex p) {
return (List<Vertex>) p.getAttributeSupport().getAttr(InnerGraphAttr.ATTR_KEY_TO_VERTEXES);
}
public IAttributeSupport getVertexAttributeSupport(Vertex p) {
return p.getAttributeSupport();
}
}