package org.csstudio.sds.ui.internal.refactoringparticipants;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
import org.eclipse.ltk.core.refactoring.participants.DeleteParticipant;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.FileEditorInput;
public class SdsFileDeleteParticipant extends DeleteParticipant {
private IFile _deletedFile;
public SdsFileDeleteParticipant() {
}
@Override
protected boolean initialize(Object element) {
if (element instanceof IFile) {
IFile file = (IFile) element;
if (file.getFileExtension().equalsIgnoreCase("css-sds")) {
_deletedFile = file;
return true;
}
}
return false;
}
@Override
public String getName() {
return "SDS File Delete Participant";
}
@Override
public RefactoringStatus checkConditions(IProgressMonitor pm,
CheckConditionsContext context) throws OperationCanceledException {
RefactoringStatus status = new RefactoringStatus();
IWorkbenchPage activePage = findActiveWorkbenchPage();
final IEditorPart editor = findOpenEditor(activePage, _deletedFile);
if (editor != null) {
closeOpenEditor(activePage, editor);
}
return status;
}
private void closeOpenEditor(final IWorkbenchPage activePage, final IEditorPart editor) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
activePage.closeEditor(editor, false);
}
});
}
private IEditorPart findOpenEditor(IWorkbenchPage activePage, IFile openFile) {
IEditorPart editor = activePage
.findEditor(new FileEditorInput(openFile));
if (editor != null) {
return editor;
}
return null;
}
private IWorkbenchPage findActiveWorkbenchPage() {
IWorkbenchWindow[] workbenchWindows = PlatformUI.getWorkbench()
.getWorkbenchWindows();
for (IWorkbenchWindow window : workbenchWindows) {
if (window.getActivePage() != null) {
return window.getActivePage();
}
}
return null;
}
@Override
public Change createChange(IProgressMonitor pm) throws CoreException,
OperationCanceledException {
return null;
}
}