/******************************************************************************* | |
* Copyright (c) 2005, 2012 IBM Corporation and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License 2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/legal/epl-2.0/ | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* Contributors: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.bpel.ui.commands; | |
import org.eclipse.bpel.common.ui.editmodel.AbstractEditModelCommand; | |
import org.eclipse.bpel.model.Process; | |
import org.eclipse.emf.ecore.resource.Resource; | |
import org.eclipse.gef.EditPartViewer; | |
import org.eclipse.gef.GraphicalEditPart; | |
import org.eclipse.gef.requests.DirectEditRequest; | |
/** | |
* Sets a unique name/display name to the model object and triggers direct edit afterwards. | |
*/ | |
public class SetNameAndDirectEditCommand extends SetUniqueNameCommand { | |
protected EditPartViewer viewer; | |
public SetNameAndDirectEditCommand(Object model, EditPartViewer viewer) { | |
super((Process)(viewer.getContents()).getModel(), model); | |
this.viewer = viewer; | |
} | |
@Override | |
public void execute() { | |
// we should only do direct edit if we were able to set a name or label | |
if (!getCommands().isEmpty()) { | |
// direct edit | |
add(new AbstractEditModelCommand() { | |
@Override | |
public void execute() { | |
// Before calling direct edit the figure and its border have to layout properly | |
// in order for the cell editor to appear in the correct location. So we postpone | |
// the direct edit using an async call. | |
viewer.getControl().getDisplay().asyncExec(new Runnable() { | |
public void run() { | |
// TODO: HACK HACK: since we used batched adapters to refresh the edit parts, | |
// this *only works* because of the asyncExec(). | |
GraphicalEditPart editPart = (GraphicalEditPart)viewer.getEditPartRegistry().get(model); | |
if (editPart != null) { | |
editPart.getFigure().getParent().getLayoutManager().invalidate(); | |
editPart.performRequest(new DirectEditRequest()); | |
} | |
} | |
}); | |
} | |
@Override | |
public Resource[] getResources() { return EMPTY_RESOURCE_ARRAY; } | |
@Override | |
public Resource[] getModifiedResources() { return EMPTY_RESOURCE_ARRAY; } | |
}); | |
} | |
// execute the contained commands. | |
super.execute(); | |
} | |
@Override | |
public boolean canExecute() { | |
if (getCommands().isEmpty()) { | |
// it will be a no-op but it is harmless since this command is always | |
// together with a command creating a model object | |
return true; | |
} | |
return super.canExecute(); | |
} | |
@Override | |
public boolean canUndo() { | |
if (getCommands().isEmpty()) { | |
// it will be a no-op but it is harmless since this command is always | |
// together with a command creating a model object | |
return true; | |
} | |
return super.canUndo(); | |
} | |
} |