package com.sap.mi.tcs.editor.tree;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.ui.navigator.CommonActionProvider;
import org.eclipse.ui.navigator.ICommonActionExtensionSite;
import org.eclipse.ui.navigator.ICommonMenuConstants;
import com.sap.furcas.metamodel.TCS.ConcreteSyntax;
import com.sap.ide.treeprovider.GenericRefObjectNode;
import com.sap.mi.tcs.editor.action.GenerateGrammarAction;
/**
* ActionProvider that provides actions for context menus based on the current
* tree selection and underlying meta model.
*
* @author D046040
*
*/
public class TcsActionProviderContainmentTree extends CommonActionProvider
{
/**
* @generated
*/
private List<Object> mMenuItems;
public static final String NEW_SUBMENU_ID = TcsActionProviderContainmentTree.class
.getName()
+ ".new.submenu.id";
@Override
public void init(ICommonActionExtensionSite site)
{
super.init(site);
}
/**
* @generated
*/
@Override
public void setContext(ActionContext context)
{
super.setContext(context);
if(mMenuItems == null)
{
mMenuItems = new ArrayList<Object>();
}
else
{
mMenuItems.clear();
}
if(context != null)
{
// createActions(context);
}
}
/**
* Adds the applicable actions to a part's action bars, including setting
* any global action handlers.
*
* @generated
*/
@Override
public void fillActionBars(IActionBars actionBars)
{
}
/**
* Adds the applicable actions to a context menu, based on the state of the
* <code>ActionContext</code>.
*
* @generated
*/
@Override
public void fillContextMenu(IMenuManager menu)
{
ActionContext context = getContext();
if(context != null)
{
for(Object item : mMenuItems)
{
if(item instanceof IAction)
{
IAction action = (IAction) item;
}
else if(item instanceof ActionGroup)
{
((ActionGroup) item).fillContextMenu(menu);
}
else if(item instanceof GroupMarker)
{
menu.add((GroupMarker) item);
}
else if(item instanceof Separator)
{
menu.add((Separator) item);
}
else
{
throw new IllegalStateException("Unrecognized Menu Item "
+ item);
}
}
// selection specific actions
TreeSelection selection = (TreeSelection) context.getSelection();
if(selection.size() == 1)
{
MenuManager subMenuManager = new MenuManager("TCS",
NEW_SUBMENU_ID);
Object firstElement = selection.getFirstElement();
if(firstElement instanceof GenericRefObjectNode)
{
GenericRefObjectNode node = (GenericRefObjectNode) firstElement;
EObject modelElement = node.getValue();
if(modelElement instanceof ConcreteSyntax) {
GenerateGrammarAction action = new GenerateGrammarAction((ConcreteSyntax) modelElement, true);
subMenuManager.add(action);
}
}
menu.insertAfter(ICommonMenuConstants.GROUP_NEW, subMenuManager);
}
}
}
/**
* The dispose method has to be called in order to de-register any listeners
*
* @generated
*/
@Override
public void dispose()
{
for(Object item : mMenuItems)
{
if(item instanceof ActionGroup)
{
((ActionGroup) item).dispose();
}
}
mMenuItems.clear();
super.dispose();
}
/**
* Creates the user defined actions according to the current selection
*
* @param context
* the context to use
*/
public void createActions(ActionContext context)
{
}
/**
* Helper which adds the the given menu item to the list of context menu
* items.
*
* @param item
* the menu item to add, the value might be <code>null</code>.
* @generated
*/
public void addToContextMenu(Object item)
{
if(item != null)
{
mMenuItems.add(item);
}
}
}