@Override
public <P, R> void visit(DaC<P, R> skeleton) {
strace.add(skeleton);
mxCell conVert = (mxCell) graph.insertVertex(parent,null,CONDITION,0,SKEL_SIDE*1.5,MUS_SIDE-2,MUS_SIDE-2,STYLE_MUS);
conVert.setConnectable(false);
mxCell splVert = (mxCell) graph.insertVertex(parent,null,SPLIT,MUS_SIDE,SKEL_SIDE*1.5,MUS_SIDE-2,MUS_SIDE-2,STYLE_MUS);
splVert.setConnectable(false);
mxCell subSkelGroup = (mxCell) graph.insertVertex(parent,null,"",MUS_SIDE*2,SKEL_SIDE*1.5,0,0,STYLE_NOSHAPE);
subSkelGroup.setConnectable(false);
SkeletonTreeBuilder subSkelBuilder = new SkeletonTreeBuilder(controller,graph,subSkelGroup,strace);
skeleton.getSkeleton().accept(subSkelBuilder);
mxCell subSkelVert = subSkelBuilder.getSkelVert();
double w = subSkelGroup.getGeometry().getWidth();
mxCell merVert = (mxCell) graph.insertVertex(parent,null,MERGE,(MUS_SIDE*2)+w,SKEL_SIDE*1.5,MUS_SIDE-2,MUS_SIDE-2,STYLE_MUS);
merVert.setConnectable(false);
double x = (MUS_SIDE + w)/2;
skelVert = (mxCell) graph.insertVertex(parent,null,"D&C",x,0,SKEL_SIDE,SKEL_SIDE,STYLE_SKEL);
skelVert.setConnectable(false);
graph.insertEdge(parent, null, "", skelVert, conVert, STYLE_EDGE);
graph.insertEdge(parent, null, "", skelVert, splVert, STYLE_EDGE);
graph.insertEdge(parent, null, "", skelVert, subSkelVert, STYLE_EDGE);
graph.insertEdge(parent, null, "", skelVert, merVert, STYLE_EDGE);
Skeleton<?,?>[] straceArray = getStraceAsArray();
HashMap<Where,mxCell> traceMap = new HashMap<Where,mxCell>();
mxCell skelTraceVert = (mxCell) graph.insertVertex(parent,null,"",x,0,1.25*SKEL_SIDE,SKEL_SIDE,STYLE_NOSHAPE);
skelTraceVert.setConnectable(false);
traceMap.put(Where.SKELETON, skelTraceVert);
mxCell conTraceVert = (mxCell) graph.insertVertex(parent,null,"",0,SKEL_SIDE*1.5+MUS_SIDE,MUS_SIDE-2,SKEL_SIDE,STYLE_NOSHAPE);
conTraceVert.setConnectable(false);
traceMap.put(Where.CONDITION, conTraceVert);
mxCell splTraceVert = (mxCell) graph.insertVertex(parent,null,"",MUS_SIDE,SKEL_SIDE*1.5+MUS_SIDE,MUS_SIDE-2,SKEL_SIDE,STYLE_NOSHAPE);
splTraceVert.setConnectable(false);
traceMap.put(Where.SPLIT, splTraceVert);
mxCell merTraceVert = (mxCell) graph.insertVertex(parent,null,"",(MUS_SIDE*2)+w,SKEL_SIDE*1.5+MUS_SIDE,MUS_SIDE-2,SKEL_SIDE,STYLE_NOSHAPE);
merTraceVert.setConnectable(false);
traceMap.put(Where.MERGE, merTraceVert);
controller.initTrace(straceArray,traceMap);
}