@Override public boolean evaluate(Graph graph, Edge edge) { if(edge.isDirected()) { DirectedGraph directedGraph = (DirectedGraph)graph; return directedGraph.getMutualEdge(edge) != null; } return false; }
@Override public Number[] getValues(Graph graph) { DirectedGraph dgraph = (DirectedGraph) graph; List<Integer> values = new ArrayList<>(dgraph.getNodeCount()); for (Node n : dgraph.getNodes()) { int degree = 0; for (Edge e : dgraph.getOutEdges(n)) { if (dgraph.getMutualEdge(e) != null) { degree++; } } values.add(degree); } return values.toArray(new Number[0]); }
@Override public boolean evaluate(Graph graph, Node node) { DirectedGraph dgraph = (DirectedGraph) graph; int degree = 0; for (Edge e : dgraph.getOutEdges(node)) { if (dgraph.getMutualEdge(e) != null) { degree++; } } return range.isInRange(degree); }
@Override public boolean evaluate(Graph graph, Edge edge) { DirectedGraph directedGraph = (DirectedGraph) graph; //Make sure the edge is not self loop if (!edge.isSelfLoop()) { //Get the potential mutual edge Edge mutualEdge = directedGraph.getMutualEdge(edge); //Remove the mutual edge if exists //Make sure only one of the two mutual edges will be removed if (mutualEdge != null && mutualEdge.getStoreId() < edge.getStoreId()) { return false; } } return true; }
@Override public Item[] getItems(Graph graph) { EdgeItem[] items = new EdgeItem[graph.getEdgeCount()]; int i = 0; for (Edge e : graph.getEdges()) { EdgeItem item = new EdgeItem(e); item.setData(EdgeItem.WEIGHT, e.getWeight(graph.getView())); item.setData(EdgeItem.DIRECTED, e.isDirected()); if (graph.isDirected(e)) { item.setData(EdgeItem.MUTUAL, ((DirectedGraph) graph).getMutualEdge(e) != null); } item.setData(EdgeItem.SELF_LOOP, e.isSelfLoop()); item.setData(EdgeItem.COLOR, e.alpha() == 0 ? null : e.getColor()); items[i++] = item; } return items; }