package org.cristalise.gui.lifecycle.desc; import org.cristalise.kernel.graph.model.DirectedEdge; import org.cristalise.kernel.graph.model.EdgeFactory; import org.cristalise.kernel.graph.model.GraphModelManager; import org.cristalise.kernel.graph.model.TypeNameAndConstructionInfo; import org.cristalise.kernel.graph.model.Vertex; import org.cristalise.kernel.lifecycle.NextDef; import org.cristalise.kernel.lifecycle.WfVertexDef; public class WfEdgeDefFactory implements EdgeFactory { @Override public void create( GraphModelManager graphModelManager, Vertex origin, Vertex terminus, TypeNameAndConstructionInfo typeNameAndConstructionInfo) { if (validCreation(graphModelManager, origin, terminus)) { NextDef nextDef = new NextDef((WfVertexDef) origin, (WfVertexDef) terminus); graphModelManager.getModel().addEdgeAndCreateId(nextDef, origin, terminus); } } private static boolean validCreation(GraphModelManager graphModelManager, Vertex origin, Vertex terminus) { DirectedEdge[] connectingEdgesAToB = graphModelManager.getModel().getConnectingEdges(origin.getID(), terminus.getID()); DirectedEdge[] connectingEdgesBToA = graphModelManager.getModel().getConnectingEdges(terminus.getID(), origin.getID()); return (origin != terminus) && (connectingEdgesAToB.length == 0) && (connectingEdgesBToA.length == 0); } }