private void updateDataTreeNode( final StorableNode parent, final String renamedNodeNewPath, final Iterator<TreeNode<?>> children) { if (!children.hasNext()) { eventBus.fireEvent(NodeChangedEvent.createNodeRenamedEvent(parent.getParent())); return; } TreeNode treeNode = children.next(); if (treeNode instanceof UpdateTreeNodeDataIterable && treeNode instanceof StorableNode) { String newPath = solveNewPath(renamedNodeNewPath, ((StorableNode) treeNode).getPath()); if (treeNode.equals(parent)) { newPath = renamedNodeNewPath; } ((UpdateTreeNodeDataIterable) treeNode) .updateData( new AsyncCallback<Void>() { @Override public void onSuccess(Void aVoid) { updateDataTreeNode(parent, renamedNodeNewPath, children); } @Override public void onFailure(Throwable throwable) { Log.error(getClass(), "Error update treeNode data " + throwable); // eventBus.fireEvent(new RefreshProjectTreeEvent()); } }, newPath); return; } updateDataTreeNode(parent, renamedNodeNewPath, children); }