Set<Node> nodesSet=new HashSet<Node>();
nodesSet.addAll(Arrays.asList(nodes));
//Assign edges to the new node:
Edge newEdge;
for (Node node : nodes) {
for (Edge edge : getNodeEdges(node)) {
if (edge.getSource() == node) {
if (nodesSet.contains(edge.getTarget())) {
newEdge = createEdge(newNode, newNode, edge.isDirected());//Self loop because of edge between merged nodes
} else {
newEdge = createEdge(newNode, edge.getTarget(), edge.isDirected());
}
} else {
if (nodesSet.contains(edge.getSource())) {
newEdge = createEdge(newNode, newNode, edge.isDirected());//Self loop because of edge between merged nodes
} else {
newEdge = createEdge(edge.getSource(), newNode, edge.isDirected());
}
}
if (newEdge != null) {//Edge may not be created if repeated
//Copy edge attributes:
AttributeRow row = (AttributeRow) edge.getAttributes();
for (int i = 0; i < row.countValues(); i++) {
if (row.getAttributeValueAt(i).getColumn().getIndex() != PropertiesColumn.EDGE_ID.getIndex()) {
newEdge.getAttributes().setValue(i, row.getValue(i));
}
}
}
}
}