package org.eclipse.uml2.diagram.common.parameter;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction;
import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.uml2.diagram.common.Messages;
import org.eclipse.uml2.diagram.common.parameter.EditPropertyParametersDialog;
import org.eclipse.uml2.uml.Operation;
/*
* TODO :
* - old to new property parameters merge(probably in accordance with the name)
* - make action totally undoable (now only label refresh can be undone)
*/
public abstract class ShowPropertyParametersActionBase extends DiagramAction {
private IWorkbenchPage myWorkbechPage;
public ShowPropertyParametersActionBase(IWorkbenchPage workbenchPage) {
super(workbenchPage);
setText(Messages.ShowPropertyParametersActionBase_action_manage_parameters);
myWorkbechPage = workbenchPage;
}
@Override
protected void doRun(IProgressMonitor progressMonitor) {
EditPropertyParametersDialog dialog = createDialog(getShell(), getOperationToEdit());
dialog.create();
dialog.open();
execute(new RefreshEditPartCommand(getSelectedEditPart()), new NullProgressMonitor());
}
abstract protected EditPropertyParametersDialog createDialog(Shell shell, Operation operation);
@Override
protected Request createTargetRequest() {
return null;
}
@Override
protected Command getCommand() {
// return nothing because all functionality is implemented in #doRun(IProgressMonitor) method
return new Command(Messages.ShowPropertyParametersActionBase_command_empty) {
};
}
@Override
protected boolean isSelectionListener() {
return true;
}
private Shell getShell() {
return myWorkbechPage.getActivePart().getSite().getShell();
}
private GraphicalEditPart getSelectedEditPart() {
return (GraphicalEditPart) getStructuredSelection().getFirstElement();
}
private Operation getOperationToEdit() {
GraphicalEditPart selected = getSelectedEditPart();
return (Operation) selected.getNotationView().getElement();
}
private static class RefreshEditPartCommand extends Command {
private GraphicalEditPart myEditPart;
public RefreshEditPartCommand(GraphicalEditPart editPart) {
super(Messages.ShowPropertyParametersActionBase_command_refresh_property_label);
myEditPart = editPart;
}
@Override
public void execute() {
// refresh PropertyEditPArt
myEditPart.refresh();
// refresh parent Compartment
myEditPart.getParent().refresh();
}
}
}