package de.ovgu.cide.typing.internal; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorActionDelegate; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; import de.ovgu.cide.editor.ColoredTextEditor; import de.ovgu.cide.features.source.ColoredSourceFile; import de.ovgu.cide.typing.CIDETypingPlugin; public class ForceValidationAction implements IWorkbenchWindowActionDelegate, IObjectActionDelegate, IEditorActionDelegate { final List<IProject> projects = new ArrayList<IProject>(); private ColoredTextEditor activeEditor; public void run(IAction action) { IProject[] p; if (projects.isEmpty()) p = ResourcesPlugin.getWorkspace().getRoot().getProjects(); else p = projects.toArray(new IProject[projects.size()]); if (activeEditor != null) activeEditor.doSave(null); CIDETypingPlugin.getDefault().getTypingManager().recheckProjects(p); } public List<IProject> getProjects() { return projects; } /** * Selection in the workbench has been changed. We can change the state of * the 'real' action here if we want, but this can only happen after the * delegate has been created. * * @see IWorkbenchWindowActionDelegate#selectionChanged */ public void selectionChanged(IAction action, ISelection selection) { if (selection instanceof IStructuredSelection) { boolean alreadyCleared = false; for (Object selected : ((IStructuredSelection) selection).toArray()) { if (selected instanceof IProject) { if (!alreadyCleared) { activeEditor = null; projects.clear(); alreadyCleared = true; } projects.add((IProject) selected); } } } } /** * We can use this method to dispose of any system resources we previously * allocated. * * @see IWorkbenchWindowActionDelegate#dispose */ public void dispose() { } /** * We will cache window object in order to be able to provide parent shell * for the message dialog. * * @see IWorkbenchWindowActionDelegate#init */ public void init(IWorkbenchWindow window) { } public void setActivePart(IAction action, IWorkbenchPart targetPart) { } public void setActiveEditor(IAction action, IEditorPart targetEditor) { if (targetEditor instanceof ColoredTextEditor) { ColoredSourceFile sourceFile = ((ColoredTextEditor) targetEditor).getSourceFile(); if (sourceFile != null) { activeEditor = (ColoredTextEditor) targetEditor; projects.clear(); projects.add(sourceFile.getProject()); } } } }