package org.bundlemaker.core.ui.mvn;
import org.bundlemaker.core.mvn.content.MvnContentProvider;
import org.bundlemaker.core.ui.ErrorDialogUtil;
import org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditorElement;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.progress.IProgressService;
/**
* <p>
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*/
public abstract class AbstractMvnProjectContentProviderEditorAction extends Action {
/** the editor */
private MvnProjectContentProviderEditor _editor;
/**
* <p>
* Creates a new instance of type {@link AbstractMvnProjectContentProviderEditorAction}.
* </p>
*
* @param text
* @param editor
*/
public AbstractMvnProjectContentProviderEditorAction(String text, MvnProjectContentProviderEditor editor) {
super(text);
// assert
Assert.isNotNull(editor);
//
_editor = editor;
}
/**
* {@inheritDoc}
*/
@Override
public void run() {
// get the progress services
IProgressService ps = PlatformUI.getWorkbench().getProgressService();
/** - */
final Exception[] exception = new Exception[1];
//
try {
ps.busyCursorWhile(new IRunnableWithProgress() {
public void run(IProgressMonitor pm) {
for (IProjectContentProviderEditorElement element : _editor.getCurrentSelection()) {
//
try {
doWithMvnContentProvider((MvnContentProvider) element.getProjectContentProvider());
} catch (Exception e) {
exception[0] = e;
}
}
}
});
if (exception[0] != null) {
throw exception[0];
}
} catch (Exception e) {
ErrorDialogUtil.errorDialogWithStackTrace("Error", e.getMessage(), Activator.PLUGIN_ID,
ErrorDialogUtil.getNestedNonCoreThrowable(e));
}
}
/**
* <p>
* Must be overridden to
* </p>
*
* @param element
*/
protected abstract void doWithMvnContentProvider(MvnContentProvider element) throws Exception;
}