blob: 5989f619bccd5e3ffadd4fd5a433be3e8565cf82 [file] [log] [blame]
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;
}
}
}