blob: a6a7802529a43871c3be4b84eb46805d0e5a6af2 [file] [log] [blame]
/*******************************************************************************
* 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 v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* 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();
}
}