/** * Test whether the two vertices have equal properties and edge sets. * * @param a the first vertex * @param b the second vertex * @param checkIdEquality whether to check on vertex and edge ids * @return whether the two vertices are semantically the same */ public static boolean haveEqualNeighborhood(final Vertex a, final Vertex b, final boolean checkIdEquality) { if (checkIdEquality && !ElementHelper.haveEqualIds(a, b)) return false; return ElementHelper.haveEqualProperties(a, b) && haveEqualEdges(a, b, checkIdEquality); }
private static boolean hasEqualEdgeSets(final Set<Edge> aEdgeSet, final Set<Edge> bEdgeSet, final boolean checkIdEquality) { if (aEdgeSet.size() != bEdgeSet.size()) return false; for (Edge aEdge : aEdgeSet) { Edge tempEdge = null; for (Edge bEdge : bEdgeSet) { if (bEdge.getLabel().equals(aEdge.getLabel())) { if (checkIdEquality) { if (ElementHelper.haveEqualIds(aEdge, bEdge) && ElementHelper.haveEqualIds(aEdge.getVertex(Direction.IN), bEdge.getVertex(Direction.IN)) && ElementHelper.haveEqualIds(aEdge.getVertex(Direction.OUT), bEdge.getVertex(Direction.OUT)) && ElementHelper.haveEqualProperties(aEdge, bEdge)) { tempEdge = bEdge; break; } } else if (ElementHelper.haveEqualProperties(aEdge, bEdge)) { tempEdge = bEdge; break; } } } if (tempEdge == null) return false; else bEdgeSet.remove(tempEdge); } return bEdgeSet.size() == 0; } }