package com.xrosstools.xunit.editor;
import java.util.List;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import com.xrosstools.xunit.editor.actions.AssignClassNameAction;
import com.xrosstools.xunit.editor.actions.AssignDefaultAction;
import com.xrosstools.xunit.editor.actions.AssignReferenceNameAction;
import com.xrosstools.xunit.editor.actions.CreatePropertyAction;
import com.xrosstools.xunit.editor.actions.OpenClassAction;
import com.xrosstools.xunit.editor.actions.RemovePropertyAction;
import com.xrosstools.xunit.editor.actions.RenamePropertyAction;
import com.xrosstools.xunit.editor.actions.UnitActionConstants;
import com.xrosstools.xunit.editor.model.UnitConstants;
import com.xrosstools.xunit.editor.model.UnitNode;
import com.xrosstools.xunit.editor.model.UnitNodeDiagram;
import com.xrosstools.xunit.editor.model.UnitNodeProperties;
import com.xrosstools.xunit.editor.parts.BaseNodePart;
public class UnitContextMenuProvider extends ContextMenuProvider implements UnitActionConstants, UnitConstants {
private UnitDiagramGraphicalEditor editor;
public UnitContextMenuProvider(EditPartViewer viewer, UnitDiagramGraphicalEditor editor) {
super(viewer);
this.editor = editor;
}
public void buildContextMenu(IMenuManager menu) {
UnitNodeDiagram diagram = (UnitNodeDiagram)editor.getRootEditPart().getContents().getModel();
EditPartViewer viewer = this.getViewer();
List selected = viewer.getSelectedEditParts();
if(selected.size() == 1 && selected.get(0) instanceof BaseNodePart)
getNodeActions(menu, (BaseNodePart)selected.get(0));
else
addPropertiesActions(menu, diagram.getProperties());
}
private void getNodeActions(IMenuManager menu, BaseNodePart nodePart){
UnitNode node = (UnitNode)nodePart.getModel();
menu.add(new AssignClassNameAction(editor, nodePart));
menu.add(new OpenClassAction(editor, nodePart));
menu.add(new Separator());
menu.add(new AssignDefaultAction(editor, node));
menu.add(new Separator());
MenuManager sub = new MenuManager(ASSIGN_REFERENCE);
for(String name: node.getReferenceValues()){
if(EMPTY_VALUE.equals(name))
continue;
sub.add(new AssignReferenceNameAction(editor, node, name));
}
menu.add(sub);
addPropertiesActions(menu, node.getProperties());
}
private void addPropertiesActions(IMenuManager menu, UnitNodeProperties properties) {
menu.add(new Separator());
menu.add(new CreatePropertyAction(editor, properties));
MenuManager subRemove = new MenuManager(REMOVE_NODE_PROPERTY);
for(String name: properties.getNames()){
if(EMPTY_VALUE.equals(name))
continue;
subRemove.add(new RemovePropertyAction(editor, properties, name));
}
menu.add(subRemove);
MenuManager subRename = new MenuManager(RENAME_NODE_PROPERTY);
for(String name: properties.getNames()){
if(EMPTY_VALUE.equals(name))
continue;
subRename.add(new RenamePropertyAction(editor, name, properties));
}
menu.add(subRename);
}
}