/*******************************************************************************
 * Copyright (c) 2005 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.PartnerLink;
import org.eclipse.bpel.ui.IBPELUIConstants;
import org.eclipse.bpel.ui.util.ModelHelper;
import org.eclipse.emf.ecore.EObject;

import org.eclipse.wst.wsdl.Operation;
import org.eclipse.wst.wsdl.PortType;

/** 
 * Sets the "partnerLink" property of a model object.  This is supported
 * for Invoke/Receive/Reply activities.
 */
public class SetPartnerLinkCommand extends SetCommand {

	public String getDefaultLabel() { return IBPELUIConstants.CMD_SELECT_PARTNERLINK; }

	public SetPartnerLinkCommand(EObject target, PartnerLink newPartnerLink)  {
		super(target, newPartnerLink);
	}

	@Override
	public Object get() {
		return ModelHelper.getPartnerLink(fTarget);
	}
	@Override
	public void set(Object o) {
	    PartnerLink pl = (PartnerLink)o;
		ModelHelper.setPartnerLink(fTarget, pl);
		
		Operation operation = null;
		
		if (pl != null) {
			PortType pt = null;
		    if (pl.getMyRole() != null){
		        pt = ModelHelper.getRolePortType(pl.getMyRole());	      
		    } else if (pl.getPartnerRole() != null){
		       pt = ModelHelper.getRolePortType(pl.getPartnerRole());
		    }
		    
		    if (pt != null){
		        List<Operation> ops = pt.getOperations();
		        if (ops.size() > 0) operation = ops.get(0);
		    }
		}
		// Not sure why we set an operation here.
		
        ModelHelper.setOperation(fTarget, operation);
	}
}
