/******************************************************************************* * 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.ToPart; import org.eclipse.bpel.model.ToParts; 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 ToParts of Invoke / Reply. It handles the following scenarios: * * (1) If the ToParts element of the target object doesn't contains a ToPart for the given Part * - create a new ToPart * - set the given Part to the ToPart * - set the given variable to the ToPart's fromVariable * - add the new ToPart to the ToParts (ToParts will be created if necessary) * * (2) If the ToParts element of the target object already contains a ToPart for the given Part * - set the fromVariable of the existing ToPart to the given variable * * @author Michael Illiger */ public class AddToPartCommand extends AutoUndoCommand { private Variable variable; private Part part; private EObject target; public AddToPartCommand(EObject target, Variable variable, Part part) { super("Set toPart", target); this.variable = variable; this.part = part; this.target = target; } private List<ToPart> getList() { ToParts toParts = ModelHelper.getToParts(target); return (toParts == null) ? null : toParts.getChildren(); } private void createList() { ModelHelper.setToParts(target, BPELFactory.eINSTANCE.createToParts()); } @Override public void doExecute() { if (this.part == null) throw new IllegalStateException(); List<ToPart> list = getList(); if (list == null || list.isEmpty()) { createList(); list = getList(); } for (ToPart toPart : list) { if (this.part.equals(toPart.getPart())) { // we already have a toPart for the given part -> just replace the variable toPart.setFromVariable(variable); return; } } // if we get here we need a new toPart ToPart toPart = BPELFactory.eINSTANCE.createToPart(); toPart.setPart(part); toPart.setFromVariable(variable); list.add(toPart); } }