package monolipse.ui.views;
import monolipse.core.BooCore;
import monolipse.ui.actions.ConfigureBuildPathAction;
import monolipse.ui.actions.UseAsAssemblySourceAction;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.jdt.ui.IContextMenuConstants;
import org.eclipse.jdt.ui.actions.OpenEditorActionGroup;
import org.eclipse.jdt.ui.actions.OpenViewActionGroup;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.ui.actions.NewWizardMenu;
import org.eclipse.ui.actions.RefreshAction;
public class BooExplorerActionGroup extends ActionGroup {
private OpenEditorActionGroup _openEditorActionGroup;
private OpenViewActionGroup _openViewActionGroup;
private RefreshAction _refreshAction;
private BooExplorerView _view;
private Action _configureBuildPath;
private UseAsAssemblySourceAction _useAsAssemblySource;
public BooExplorerActionGroup(BooExplorerView view) {
_openEditorActionGroup = new OpenEditorActionGroup(view);
_openViewActionGroup = new OpenViewActionGroup(view);
_view = view;
_refreshAction = new RefreshAction(_view.getSite());
_configureBuildPath = new ConfigureBuildPathAction(view);
_useAsAssemblySource = new UseAsAssemblySourceAction(view);
}
private IWorkbenchWindow getActiveWorkbenchWindow() {
return _view.getWorkbench().getActiveWorkbenchWindow();
}
public void setContext(ActionContext context) {
super.setContext(context);
_openEditorActionGroup.setContext(context);
_openViewActionGroup.setContext(context);
}
public void fillContextMenu(IMenuManager menu) {
addNewWizards(menu);
_openEditorActionGroup.fillContextMenu(menu);
_openViewActionGroup.fillContextMenu(menu);
menu.insertAfter(IContextMenuConstants.GROUP_REORGANIZE, _refreshAction);
addBuildPathActions(menu);
}
private void addBuildPathActions(IMenuManager menu) {
Object selectedElement = getSingleSelectedElement();
boolean isFolder = selectedElement instanceof IFolder;
boolean isReference = isReferenceContainer(selectedElement);
boolean isSource = isAssemblySource(selectedElement);
IMenuManager buildPath = new MenuManager("Build Path");
if (isSource || isReference) buildPath.add(_configureBuildPath);
if (isFolder && !isSource) buildPath.add(_useAsAssemblySource);
menu.insertAfter(IContextMenuConstants.GROUP_BUILD, buildPath);
}
private boolean isAssemblySource(Object selectedElement) {
return BooCore.isAssemblySource(selectedElement);
}
private boolean isReferenceContainer(Object selectedElement) {
return (selectedElement instanceof ReferenceContainer);
}
static class NewWizard extends NewWizardMenu {
public NewWizard(IWorkbenchWindow window) {
super(window);
}
public void fill(IMenuManager menu) {
IContributionItem[] items = super.getContributionItems();
for (int i = 0; i < items.length; i++) {
menu.add(items[i]);
}
}
}
private void addNewWizards(IMenuManager menu) {
int count = getCurrentSelection().size();
boolean isNewProjectTarget = count >= 0 && count <=1;
boolean isNewExampleTarget = getSingleSelectedElement() instanceof IContainer;
if (!isNewProjectTarget && !isNewExampleTarget) return;
IMenuManager newMenu = new MenuManager("New");
NewWizard wizard = new NewWizard(getActiveWorkbenchWindow());
wizard.fill(newMenu);
menu.appendToGroup(IContextMenuConstants.GROUP_NEW, newMenu);
}
private Object getSingleSelectedElement() {
IStructuredSelection selection = getCurrentSelection();
return selection.size() > 1 ? null : selection.getFirstElement();
}
private IStructuredSelection getCurrentSelection() {
return (IStructuredSelection) getContext().getSelection();
}
}