package org.eclipse.dltk.tcl.internal.ui.actions; import java.util.Iterator; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.dltk.core.DLTKCore; import org.eclipse.dltk.core.IScriptProject; import org.eclipse.dltk.core.ISourceModule; import org.eclipse.dltk.core.ModelException; import org.eclipse.dltk.tcl.internal.core.packages.DefaultVariablesRegistry; import org.eclipse.dltk.tcl.internal.core.packages.TclVariableResolver; import org.eclipse.dltk.tcl.internal.core.sources.TclSourcesSourceModule; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; public class RemoveSourceAssociation implements IWorkbenchWindowActionDelegate { private IStructuredSelection selection; public RemoveSourceAssociation() { } @Override public void dispose() { } @Override public void init(IWorkbenchWindow window) { } @Override public void run(IAction action) { if (selection == null) { return; } Iterator<?> iterator = selection.iterator(); for (; iterator.hasNext();) { ISourceModule element = (ISourceModule) iterator.next(); try { element.delete(false, new NullProgressMonitor()); } catch (ModelException e) { DLTKCore.error("Failed to remove source association", e); } } } @Override public void selectionChanged(IAction action, ISelection selection) { if (selection != null && selection instanceof IStructuredSelection) { this.selection = (IStructuredSelection) selection; action.setEnabled(checkEnablement()); } } private boolean checkEnablement() { for (Iterator<?> iterator = selection.iterator(); iterator.hasNext();) { TclSourcesSourceModule module = (TclSourcesSourceModule) iterator .next(); // Check for direct source references String originalName = module.getOriginalName(); if (!originalName.contains("$")) { return false; } // Check for global variable related references IScriptProject scriptProject = ((ISourceModule) module) .getScriptProject(); TclVariableResolver variableResolver = new TclVariableResolver( new DefaultVariablesRegistry(scriptProject)); String value = variableResolver.resolve(originalName); // if( value.equals()) if (value != null && !value.contains("$")) { return false; // This is resolved variable. We can't delete // such associations. } } return true; } }