/******************************************************************************* | |
* Copyright (c) 2007, 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 java.util.List; | |
import org.eclipse.bpel.model.BPELFactory; | |
import org.eclipse.bpel.model.FromPart; | |
import org.eclipse.bpel.model.FromParts; | |
import org.eclipse.bpel.model.Variable; | |
import org.eclipse.bpel.ui.commands.util.AutoUndoCommand; | |
import org.eclipse.bpel.ui.util.ModelHelper; | |
import org.eclipse.emf.ecore.EObject; | |
import org.eclipse.wst.wsdl.Part; | |
/** | |
* This command modifies the FromParts of an Invoke / Receive / OnEvent / OnMessage. It handles the | |
* following scenarios: | |
* | |
* (1) If the FromParts element of the target object doesn't contains a FromPart for the given Part | |
* - create a new FromPart - set the given Part to the FromPart | |
* - set the given variable to the FromPart's toVariable | |
* - add the new FromPart to the FromParts (FromParts will be created if necessary) | |
* | |
* (2) If the FromParts element of the target object already contains a FromPart for the given Part | |
* - set the toVariable of the existing FromPart to the given variable | |
* | |
* @author Michael Illiger | |
*/ | |
public class AddFromPartCommand extends AutoUndoCommand { | |
private Variable variable; | |
private Part part; | |
private EObject target; | |
public AddFromPartCommand(EObject target, Variable variable, Part part) { | |
super("Set fromPart", target); | |
this.variable = variable; | |
this.part = part; | |
this.target = target; | |
} | |
private List<FromPart> getList() { | |
FromParts fromParts = ModelHelper.getFromParts(target); | |
return (fromParts == null) ? null : fromParts.getChildren(); | |
} | |
private void createList() { | |
ModelHelper.setFromParts(target, BPELFactory.eINSTANCE.createFromParts()); | |
} | |
private void deleteList() { | |
ModelHelper.setFromParts(target, null); | |
} | |
@Override | |
public void doExecute() { | |
if (this.part == null) | |
throw new IllegalStateException(); | |
List<FromPart> list = getList(); | |
if (list == null || list.isEmpty()) { | |
createList(); | |
list = getList(); | |
} | |
for (FromPart fromPart : list) { | |
if (this.part.equals(fromPart.getPart())) { | |
// we already have a fromPart for the given part -> just replace the variable | |
fromPart.setToVariable(variable); | |
return; | |
} | |
} | |
// if we get here we need a new fromPart | |
FromPart fromPart = BPELFactory.eINSTANCE.createFromPart(); | |
fromPart.setPart(part); | |
fromPart.setToVariable(variable); | |
list.add(fromPart); | |
} | |
} |