public Edge getEdgeByPathCaseID(String psid, String sid, String tid) {
        boolean flag = false;
        if (psid == null || psid.equals("null")) {
            flag = true; //source node is a process node
        }
        Graph2D view = graphViewer.view.getGraph2D();
        for (Edge edge : view.getEdgeArray()) {
            EdgeRealizer er = graphViewer.view.getGraph2D().getRealizer(edge);
            NodeRealizer nrs = er.getSourceRealizer();
            NodeRealizer nrt = er.getTargetRealizer();
            HashSet<String> s = nodeToPathCaseId.get(nrs.getNode());
            HashSet<String> t = nodeToPathCaseId.get(nrt.getNode());
            if (s.contains(sid) && t.contains(tid)) {
                if (flag) {
                    return edge;
                } else {
                    Node node = nrs.getNode();
                    NodeCursor nc = node.neighbors();
                    for (int i = 0; i < nc.size(); i++) {//see if the source node connected with the same process node
                        nc.cyclicNext();
                        Node tmpn = nc.node();
                        String tmpPid = nodeToPathCaseId.get(tmpn).iterator().next();//process node only has one PathCaseID associated
                        if (tmpPid.equals(psid)) {
                            return edge;
                        }
                    }
                }
            }
        }
        return null;
    }