GraphViewImpl viewCopy = new GraphViewImpl(dhns, viewId.getAndIncrement());
TreeStructure newStructure = viewCopy.getStructure();
dhns.writeLock();
for (TreeListIterator itr = new TreeListIterator(view.getStructure().getTree(), 1); itr.hasNext();) {
AbstractNode node = itr.next();
AbstractNode nodeCopy = new AbstractNode(node.getNodeData(), viewCopy.getViewId());
nodeCopy.setEnabled(node.isEnabled());
nodeCopy.setEnabledInDegree(node.getEnabledInDegree());
nodeCopy.setEnabledOutDegree(node.getEnabledOutDegree());
nodeCopy.setEnabledMutualDegree(node.getEnabledMutualDegree());
AbstractNode parentCopy = node.parent != null ? newStructure.getNodeAt(node.parent.getPre()) : null;
newStructure.insertAsChild(nodeCopy, parentCopy);
}
//Edges
ParamAVLIterator<AbstractEdge> edgeIterator = new ParamAVLIterator<AbstractEdge>();
for (TreeListIterator itr = new TreeListIterator(view.getStructure().getTree(), 1); itr.hasNext();) {
AbstractNode node = itr.next();
if (!node.getEdgesOutTree().isEmpty()) {
for (edgeIterator.setNode(node.getEdgesOutTree()); edgeIterator.hasNext();) {
AbstractEdge edge = edgeIterator.next();
AbstractNode sourceCopy = newStructure.getNodeAt(edge.getSource().getPre());
AbstractNode targetCopy = newStructure.getNodeAt(edge.getTarget().getPre());
sourceCopy.getEdgesOutTree().add(edge);
targetCopy.getEdgesInTree().add(edge);
addToDictionnary(edge);
}
}
}
viewCopy.setNodesEnabled(view.getNodesEnabled());