public int[] moveWidget( final int oldContainerOffset, final int oldContainerLength, final int oldContainerIndex, final int newContainerOffset, final int newContainerLength, final int newContainerIndex) { try { IEGLFile modelFile = (IEGLFile) EGLCore.create(currentFile); IEGLFile sharedWorkingCopy = (IEGLFile) modelFile.getSharedWorkingCopy(null, EGLUI.getBufferFactory(), null); sharedWorkingCopy.open(null); sharedWorkingCopy.reconcile(false, null); try { final Node oldContainer = DocumentUtil.getWidgetNode(currentDocument, oldContainerOffset, oldContainerLength); final Node newContainer = DocumentUtil.getWidgetNode(currentDocument, newContainerOffset, newContainerLength); final int newIndex = calculateNewIndex(oldContainer, newContainer, oldContainerIndex, newContainerIndex); oldContainer.accept( new DefaultASTVisitor() { public boolean visit(Handler handler) { // Assume this is a RUIHandler EGLRUIHandlerLocatorStrategy strategy = new EGLRUIHandlerLocatorStrategy(handler); final Node nodeToMove = strategy.locateIndex(oldContainerIndex); MoveNodeOperation moveOp = new MoveNodeOperation( oldContainerOffset, oldContainerLength, oldContainerIndex, newContainerOffset, newContainerIndex, newIndex); nodeToMove.accept(moveOp); return false; } public boolean visit(final NewExpression newExpression) { EGLContainerLocatorStrategy strategy = new EGLContainerLocatorStrategy(oldContainer); final Node nodeToMove = strategy.locateIndex(oldContainerIndex); MoveNodeOperation moveOp = new MoveNodeOperation( oldContainerOffset, oldContainerLength, oldContainerIndex, newContainerOffset, newContainerIndex, newIndex); nodeToMove.accept(moveOp); return false; } public boolean visit(final SimpleName simpleName) { EGLContainerLocatorStrategy strategy = new EGLContainerLocatorStrategy(oldContainer); final Node nodeToMove = strategy.locateIndex(oldContainerIndex); MoveNodeOperation moveOp = new MoveNodeOperation( oldContainerOffset, oldContainerLength, oldContainerIndex, newContainerOffset, newContainerIndex, newIndex); nodeToMove.accept(moveOp); return false; } }); } catch (Exception e) { Activator.getDefault() .getLog() .log( new Status( Status.ERROR, Activator.PLUGIN_ID, "Move Widget Reference: Error moving reference", e)); } finally { sharedWorkingCopy.destroy(); } } catch (EGLModelException e) { Activator.getDefault() .getLog() .log( new Status( Status.ERROR, Activator.PLUGIN_ID, "Move Widget Reference: Error creating working copy", e)); } return charactersChanged; }