/******************************************************************************* * Copyright (C) 2003-2006, 2013, Guillaume Brocker * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Guillaume Brocker - Initial API and implementation * ******************************************************************************/ package eclox.ui.editor.internal; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IFileEditorInput; import eclox.ui.editor.Editor; /** * Implements a resource change listener that will trigger relevant actions * on the given editor when its input gets updated. * * @author Guillaume Brocker */ public class ResourceChangeListener implements IResourceChangeListener { /** * a reference on the editor to manage */ private Editor editor; /** * Constructor * * @param editor the editor to manage */ public ResourceChangeListener( Editor editor ) { this.editor = editor; } public void resourceChanged(IResourceChangeEvent event) { IEditorInput editorInput = editor.getEditorInput(); IFileEditorInput fileEditorInput = (IFileEditorInput) editorInput; IFile editorFile = fileEditorInput.getFile(); IResourceDelta doxyfileDelta = event.getDelta().findMember( editorFile.getFullPath() ); if( doxyfileDelta != null && doxyfileDelta.getKind() == IResourceDelta.REMOVED ) { closeEditor(); } } /** * Closes the editor. */ private void closeEditor() { editor.getSite().getShell().getDisplay().asyncExec( new Runnable() { public void run() { editor.getSite().getPage().closeEditor( editor, false ); } } ); } }