/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package org.absmodels.abs.plugin.navigator.actionProvider;
import static org.absmodels.abs.plugin.navigator.NavigatorUtils.updateDependencies;
import static org.absmodels.abs.plugin.util.Constants.MODULE_DECORATOR_ID;
import org.absmodels.abs.plugin.Activator;
import org.absmodels.abs.plugin.decorators.ModuleDecorator;
import org.absmodels.abs.plugin.navigator.ABSNavigator;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.window.IShellProvider;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.actions.RefreshAction;
import org.eclipse.ui.navigator.CommonViewer;
/**
* An action for refresh the package dependencies
* @author pwong
*
*/
public class RefreshDependenciesAction extends Action implements ISelectionChangedListener {
protected CommonViewer viewer;
protected ISelection selection;
protected final Shell shell;
protected final IShellProvider provider = new IShellProvider() {
public Shell getShell() {
return shell;
}
};
public RefreshDependenciesAction(Shell shell, ISelection iSelection) {
this(shell,iSelection,"Refresh");
}
public RefreshDependenciesAction(Shell shell, ISelection iSelection, String name) {
super(name);
this.shell = shell;
this.selection = iSelection;
}
public void selectionChanged(SelectionChangedEvent event) {
viewer = (CommonViewer) event.getSource();
selection = event.getSelection();
}
@Override
public void run(){
if (selection != null && selection instanceof TreeSelection){
TreeSelection ts = (TreeSelection) selection;
updateDependencies(ts);
RefreshAction action = new RefreshAction(provider);
action.refreshAll();
refreshLabelProvider();
}
}
private CommonViewer getCommonViewer() {
return viewer;
}
/**
* Updates the Common Viewer in an asynchronous execution.
* XXX copy from {@link ABSNavigator}
*/
private void refreshLabelProvider() {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
CommonViewer viewer = getCommonViewer();
if (viewer != null && !viewer.getControl().isDisposed()) {
viewer.refresh();
}
final IBaseLabelProvider baseLabelProvider =
Activator.
getDefault().
getWorkbench().
getDecoratorManager().
getBaseLabelProvider(MODULE_DECORATOR_ID);
if (baseLabelProvider instanceof ModuleDecorator) {
((ModuleDecorator) baseLabelProvider).refresh();
}
}
});
}
}