| /******************************************************************************* |
| * 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(); |
| } |
| } |