| package org.eclipse.uml2.diagram.clazz.action; |
| |
| import java.util.Collections; |
| |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.gef.EditPart; |
| import org.eclipse.gef.EditPartViewer; |
| import org.eclipse.gef.Request; |
| import org.eclipse.gef.commands.Command; |
| import org.eclipse.gef.commands.CompoundCommand; |
| import org.eclipse.gef.commands.UnexecutableCommand; |
| import org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction; |
| import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart; |
| import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewRequest.ConnectionViewDescriptor; |
| import org.eclipse.gmf.runtime.notation.View; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.uml2.diagram.clazz.edit.commands.ChangeDependencyTypeCommand; |
| import org.eclipse.uml2.diagram.clazz.providers.UMLElementTypes; |
| |
| public class ChangeDependencyType extends DiagramAction { |
| |
| EClass dependencyType; |
| |
| public ChangeDependencyType(IWorkbenchPage workbenchPage, EClass type, String actionId) { |
| super(workbenchPage); |
| setId(actionId); |
| dependencyType = type; |
| } |
| |
| @Override |
| public void init() { |
| super.init(); |
| setText(dependencyType.getInstanceTypeName()); |
| setImageDescriptor(UMLElementTypes.getImageDescriptor(UMLElementTypes.getElement(UMLElementTypes.Interface_2010))); |
| } |
| |
| @Override |
| protected Request createTargetRequest() { |
| return null; |
| } |
| |
| @Override |
| protected boolean calculateEnabled() { |
| return super.calculateEnabled() && dependencyType != null && false == dependencyType.equals(getDependencyType()); |
| } |
| |
| @Override |
| protected Command getCommand() { |
| ConnectionEditPart editPart = getSelectedEditPart(); |
| if (editPart == null) { |
| return UnexecutableCommand.INSTANCE; |
| } |
| CompoundCommand command = new CompoundCommand(); |
| ChangeDependencyTypeCommand changeTypeCommand = new ChangeDependencyTypeCommand(getSelectedEditPart(), dependencyType, getPreferencesHint()); |
| command.add(changeTypeCommand); |
| Command selectCommand = new SelectEditPartCommand(getDiagramGraphicalViewer(), changeTypeCommand.getElementDescriptor()); |
| command.add(selectCommand); |
| return command; |
| } |
| |
| @Override |
| protected boolean isSelectionListener() { |
| return true; |
| } |
| |
| private ConnectionEditPart getSelectedEditPart() { |
| for (Object ob : getSelectedObjects()) { |
| if (ob instanceof ConnectionEditPart) { |
| return (ConnectionEditPart) ob; |
| } |
| } |
| return null; |
| } |
| |
| private EClass getDependencyType() { |
| ConnectionEditPart editPart = getSelectedEditPart(); |
| if (editPart == null) { |
| return null; |
| } |
| View view = (View) editPart.getModel(); |
| if (view == null) { |
| return null; |
| } |
| return view.getElement().eClass(); |
| } |
| |
| private static class SelectEditPartCommand extends Command { |
| |
| private EditPartViewer viewer; |
| |
| private ConnectionViewDescriptor descriptor; |
| |
| SelectEditPartCommand(EditPartViewer viewer, ConnectionViewDescriptor descriptor) { |
| this.viewer = viewer; |
| this.descriptor = descriptor; |
| } |
| |
| @Override |
| public void execute() { |
| super.execute(); |
| EditPart editPart = getEditPart(); |
| if (viewer == null || editPart == null) { |
| return; |
| } |
| viewer.setSelection(new StructuredSelection(Collections.singletonList(editPart))); |
| } |
| |
| private EditPart getEditPart() { |
| View view = (View) descriptor.getAdapter(View.class); |
| EditPart editPart = (EditPart) viewer.getEditPartRegistry().get(view); |
| return editPart; |
| } |
| } |
| } |