package fr.opensagres.nosql.ide.ui.internal.actions;
import java.util.Iterator;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.actions.SelectionProviderAction;
public abstract class AbstractTreeNodeAction extends SelectionProviderAction {
protected AbstractTreeNodeAction(ISelectionProvider provider, String text) {
super(provider, text);
setEnabled(false);
}
public void run() {
IStructuredSelection selection = getStructuredSelection();
if (selection.isEmpty())
return;
Object obj = selection.getFirstElement();
if (accept(obj)) {
perform(obj);
}
selectionChanged(selection);
}
/**
* Update the enabled state.
*
* @param sel
* a selection
*/
@Override
public void selectionChanged(IStructuredSelection sel) {
if (sel.isEmpty()) {
setEnabled(false);
return;
}
boolean enabled = false;
Iterator iterator = sel.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
if (accept(obj)) {
enabled = true;
}
}
setEnabled(enabled);
}
protected abstract boolean accept(Object obj);
protected abstract void perform(Object obj);
}