blob: 8361a21164569c3679e6f35b8de2ad443287ba61 [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.model.Activity;
import org.eclipse.bpel.model.Flow;
import org.eclipse.bpel.model.Link;
import org.eclipse.bpel.ui.IBPELUIConstants;
import org.eclipse.bpel.ui.Policy;
import org.eclipse.bpel.ui.commands.util.AutoUndoCommand;
import org.eclipse.bpel.ui.util.FlowLinkUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.commands.Command;
public class AddLinkCommand extends AutoUndoCommand {
protected Flow flow;
protected Activity source;
protected Activity target;
protected Link link;
protected Command setNameCmd;
protected boolean addNewObjectMode = false;
public void setAddNewObjectMode(boolean addNewObjectMode) {
this.addNewObjectMode = addNewObjectMode;
}
public AddLinkCommand(Command setNameCmd, EObject modelRoot) {
super(IBPELUIConstants.CMD_ADD_LINK, modelRoot);
this.setNameCmd = setNameCmd;
}
@Override
public boolean canDoExecute() {
if (link == null || source == null || target == null)
return false;
if (source == target) return false;
if (FlowLinkUtil.getCommonFlow(source, target) == null && !addNewObjectMode)
return false;
return true;
}
@Override
public void doExecute() {
if (setNameCmd != null) {
// This is a hack.
// TODO: Fix this when we stop using canExecute()==false for no-op commands.
if (!setNameCmd.canExecute()) setNameCmd = null;
}
flow = FlowLinkUtil.getCommonFlow(source, target);
if (flow == null) {
if (Policy.DEBUG) System.out.println("No common flow found!!"); //$NON-NLS-1$
return;
}
if (setNameCmd != null) setNameCmd.execute();
FlowLinkUtil.setLinkSource(link, source);
FlowLinkUtil.setLinkTarget(link, target);
if (link.eContainer() != null) {
Flow oldParent = (Flow)link.eContainer().eContainer();
if (oldParent != null) {
FlowLinkUtil.removeFlowLink(oldParent, link);
}
}
FlowLinkUtil.addFlowLink(flow, link);
}
public Link getLink() { return link; }
public void setSource(Activity source) { this.source = source; }
public void setTarget(Activity target) { this.target = target; }
public void setLink(Link link) { this.link = link; }
}