/*******************************************************************************
* Copyright (c) 2010-2015 Henshin developers. All rights reserved.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* TU Berlin, University of Luxembourg, SES S.A.
*******************************************************************************/
package de.tub.tfs.henshin.editor.actions.transSys;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import de.tub.tfs.henshin.editor.actions.condition.CreateAndAction;
import de.tub.tfs.henshin.editor.actions.condition.CreateApplicationConditionAction;
import de.tub.tfs.henshin.editor.actions.condition.CreateConditionAction;
import de.tub.tfs.henshin.editor.actions.condition.CreateNotAction;
import de.tub.tfs.henshin.editor.actions.condition.SetNegatedAction;
import de.tub.tfs.henshin.editor.actions.condition.SwapBinaryFormulaAction;
import de.tub.tfs.henshin.editor.actions.flow_diagram.CreateFlowDiagramAction;
import de.tub.tfs.henshin.editor.actions.flow_diagram.ExecuteFlowDiagramAction;
import de.tub.tfs.henshin.editor.actions.flow_diagram.FlowDiagram2UnitAction;
import de.tub.tfs.henshin.editor.actions.flow_diagram.SortFlowDiagramsAction;
import de.tub.tfs.henshin.editor.actions.flow_diagram.ValidateFlowDiagramAction;
import de.tub.tfs.henshin.editor.actions.flow_diagram.ValidateParameterMappingsAction;
import de.tub.tfs.henshin.editor.actions.graph.CreateAttributeAction;
import de.tub.tfs.henshin.editor.actions.graph.CreateEdgeAction;
import de.tub.tfs.henshin.editor.actions.graph.CreateGraphAction;
import de.tub.tfs.henshin.editor.actions.graph.CreateNodeAction;
import de.tub.tfs.henshin.editor.actions.graph.FilterMetaModelAction;
import de.tub.tfs.henshin.editor.actions.graph.ValidateGraphAction;
import de.tub.tfs.henshin.editor.actions.rule.AddMultiRuleAction;
import de.tub.tfs.henshin.editor.actions.rule.CreateAttributeConditionAction;
import de.tub.tfs.henshin.editor.actions.rule.CreateRuleAction;
import de.tub.tfs.henshin.editor.actions.rule.ExecuteRuleAction;
import de.tub.tfs.henshin.editor.actions.rule.ValidateRuleAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.AddTransformationUnitAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.CreateConditionalUnitAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.CreateConditionalUnitWithContentAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.CreateIndependentUnitAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.CreateLoopUnitAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.CreateLoopWithContentAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.CreateParameterAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.CreatePriorityUnitAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.CreatePriorityUnitWithContentAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.CreateSequentialUnitAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.CreateSequentialUnitWithContentAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.ExecuteTransformationUnitAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.MoveDownTransformationUnitAction;
import de.tub.tfs.henshin.editor.actions.transformation_unit.MoveUpTransformationUnitAction;
import de.tub.tfs.muvitor.ui.ContextMenuProviderWithActionRegistry;
/**
* The Class HenshinTreeContextMenuProvider.
*/
public class HenshinTreeContextMenuProvider extends
ContextMenuProviderWithActionRegistry {
private static final String ID_GROUP_NEW = "henshin.id.menu.group.new";
private static final String ID_GROUP_IEXPORT = "henshin.id.menu.group.iexport";
/**
* Instantiates a new henshin tree context menu provider.
*
* @param viewer
* Edit part viewer to show the context menu.
* @param actionRegistry
* the action registry
*/
public HenshinTreeContextMenuProvider(EditPartViewer viewer,
ActionRegistry actionRegistry) {
super(viewer);
setActionRegistry(actionRegistry);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.gef.ContextMenuProvider#buildContextMenu(org.eclipse.jface
* .action.IMenuManager)
*/
@Override
public void buildContextMenu(IMenuManager menu) {
List<String> creationActions = new ArrayList<String>();
menu.insertBefore(GEFActionConstants.GROUP_UNDO, new Separator(
ID_GROUP_NEW));
menu.insertBefore(GEFActionConstants.GROUP_REST, new Separator(
ID_GROUP_IEXPORT));
creationActions.add(CreateGraphAction.ID);
creationActions.add(CreateRuleAction.ID);
creationActions.add(CreateConditionalUnitAction.ID);
creationActions.add(CreateIndependentUnitAction.ID);
creationActions.add(CreatePriorityUnitAction.ID);
creationActions.add(CreateSequentialUnitAction.ID);
creationActions.add(CreateLoopUnitAction.ID);
creationActions.add(CreateFlowDiagramAction.ID);
creationActions.add(CreateApplicationConditionAction.ID);
creationActions.add(CreateConditionAction.ID);
creationActions.add(CreateAndAction.ID);
creationActions.add(CreateNotAction.ID);
creationActions.add(CreateNodeAction.ID);
creationActions.add(CreateEdgeAction.ID);
creationActions.add(CreateParameterAction.ID);
creationActions.add(CreateAttributeAction.ID);
creationActions.add(CreateAttributeConditionAction.ID);
dynamicAddSubmenu(menu, creationActions, "New", ID_GROUP_NEW);
dynamicAppendActionToGroup(menu, ImportEcoreModelAction.ID,
ID_GROUP_IEXPORT);
dynamicAppendActionToGroup(menu, ImportInstanceModelAction.ID,
ID_GROUP_IEXPORT);
dynamicAppendActionToGroup(menu, ExportInstanceModelAction.ID,
ID_GROUP_IEXPORT);
String editGroup = GEFActionConstants.GROUP_EDIT;
dynamicAppendActionToGroup(menu, SetNegatedAction.ID, editGroup);
String otherGroup = GEFActionConstants.GROUP_REST;
dynamicAppendActionToGroup(menu, AddTransformationUnitAction.ID,
ID_GROUP_NEW);
dynamicAppendActionToGroup(menu, ExecuteRuleAction.ID, otherGroup);
dynamicAppendActionToGroup(menu, CreateLoopWithContentAction.ID, otherGroup);
dynamicAppendActionToGroup(menu, CreateSequentialUnitWithContentAction.ID, otherGroup);
dynamicAppendActionToGroup(menu, CreatePriorityUnitWithContentAction.ID, otherGroup);
dynamicAppendActionToGroup(menu, CreateConditionalUnitWithContentAction.ID, otherGroup);
dynamicAppendActionToGroup(menu, AddMultiRuleAction.ID, otherGroup);
dynamicAppendActionToGroup(menu, ExecuteTransformationUnitAction.ID,
otherGroup);
dynamicAppendActionToGroup(menu, FlowDiagram2UnitAction.ID, otherGroup);
dynamicAppendActionToGroup(menu, ExecuteFlowDiagramAction.ID,
otherGroup);
dynamicAppendActionToGroup(menu, ValidateFlowDiagramAction.ID,
otherGroup);
dynamicAppendActionToGroup(menu, ValidateParameterMappingsAction.ID,
otherGroup);
dynamicAppendActionToGroup(menu, ValidateGraphAction.ID, otherGroup);
dynamicAppendActionToGroup(menu, ValidateRuleAction.ID, otherGroup);
dynamicAppendActionToGroup(menu, MoveUpTransformationUnitAction.ID,
otherGroup);
dynamicAppendActionToGroup(menu, MoveDownTransformationUnitAction.ID,
otherGroup);
dynamicAppendActionToGroup(menu, SwapBinaryFormulaAction.ID, otherGroup);
String formatGroup = "henshin.menu.constants.groups.Format";
menu.add(new Separator(formatGroup));
dynamicAppendActionToGroup(menu, SortRulesAction.ID, formatGroup);
dynamicAppendActionToGroup(menu, SortGraphsAction.ID, formatGroup);
dynamicAppendActionToGroup(menu, SortFlowDiagramsAction.ID, formatGroup);
dynamicAppendActionToGroup(menu, FilterMetaModelAction.ID,
GEFActionConstants.GROUP_EDIT);
}
}