/*******************************************************************************
* Copyright (c) 2009 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.util;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.jboss.tools.common.CommonPlugin;
/**
* @author Alexey Kazakov
*/
public class EclipseUIUtil {
private static class SafeRunnableForActivePage extends SafeRunnable {
public ITextEditor activeTextEditor;
public IEditorPart activeEditor;
/*
* (non-Javadoc)
* @see org.eclipse.core.runtime.ISafeRunnable#run()
*/
@Override
public void run() throws Exception {
IWorkbenchWindow window = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow();
if (window != null) {
IWorkbenchPage page = window.getActivePage();
if (page != null) {
activeEditor = page.getActiveEditor();
if (activeEditor instanceof IEditorWrapper) {
activeEditor = ((IEditorWrapper) activeEditor).getEditor();
}
if (activeEditor instanceof ITextEditor) {
activeTextEditor = (ITextEditor) activeEditor;
} else {
activeTextEditor = activeEditor == null ? null : (ITextEditor)activeEditor.getAdapter(ITextEditor.class);
}
}
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.util.SafeRunnable#handleException(java.lang.Throwable)
*/
@Override
public void handleException(Throwable e) {
CommonPlugin.getDefault().logError(e);
}
}
public static boolean isActiveEditorDirty() {
SafeRunnableForActivePage sr = new SafeRunnableForActivePage();
SafeRunnable.run(sr);
IEditorPart editor = sr.activeEditor;
if(editor!=null) {
return editor.isDirty();
}
return false;
}
/**
* Returns the active text editor.
* @return
*/
public static ITextEditor getActiveEditor() {
SafeRunnableForActivePage sr = new SafeRunnableForActivePage();
SafeRunnable.run(sr);
return sr.activeTextEditor;
}
/**
* Returns true if the file is open in active editor.
*
* @param file
* @return
*/
public static boolean isOpenInActiveEditor(IFile file) {
if(file == null)
return false;
ITextEditor editor = EclipseUIUtil.getActiveEditor();
if (editor != null) {
IEditorInput editorInput = editor.getEditorInput();
if (editorInput instanceof IFileEditorInput) {
IFileEditorInput fileInput = (IFileEditorInput) editorInput;
return file.equals(fileInput.getFile());
}
}
return false;
}
/**
* Returns all the modified but not saved files which are opened with all the editors.
* @return
*/
public static Set<IFile> getDirtyFiles() {
return DirtyEditorTracker.getInstance().getDirtyFiles();
}
}