blob: 8059fc2c7c82ee05cecc727af413a52e1fc2a916 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2004 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.wst.wsdl.ui.internal.commands;
import java.util.Iterator;
import org.eclipse.wst.wsdl.Fault;
import org.eclipse.wst.wsdl.Input;
import org.eclipse.wst.wsdl.Operation;
import org.eclipse.wst.wsdl.Output;
import org.eclipse.wst.wsdl.PortType;
import org.eclipse.wst.wsdl.WSDLElement;
import org.eclipse.wst.wsdl.WSDLFactory;
import org.eclipse.wst.wsdl.ui.internal.util.NameUtil;
public final class AddOperationCommand extends WSDLElementCommand
{
private PortType portType;
private String name;
private Operation operation;
private Operation originalOperation;
private boolean copyInOutFault;
private boolean createInput = false;
private boolean createOutput = false;
private boolean createFault = false;
private final String DEFAULT_INPUT_NAME = "";
private final String DEFAULT_OUTPUT_NAME = "";
private final String DEFAULT_FAULT_NAME = "";
public AddOperationCommand
(PortType portType,
String name)
{
this.portType = portType;
this.name = name;
}
public AddOperationCommand
(PortType portType,
String name,
boolean createInput,
boolean createOutput,
boolean createFault)
{
this.portType = portType;
this.name = name;
this.createInput = createInput;
this.createOutput = createOutput;
this.createFault = createFault;
}
/*
* Constructor used to create an Operation based on the given Operation. In essence, this will
* create a copy of the given Operation.
*/
public AddOperationCommand(PortType portType, Operation originalOperation, String name, boolean copyInOutFault) {
this.portType = portType;
this.originalOperation = originalOperation;
this.name = name;
this.copyInOutFault = copyInOutFault;
}
public void run()
{
operation = WSDLFactory.eINSTANCE.createOperation();
operation.setName(name);
operation.setEnclosingDefinition(portType.getEnclosingDefinition());
portType.addOperation(operation);
if (originalOperation == null) {
WSDLElementCommand command = null;
if (createInput)
{
command = new AddInputCommand(operation,DEFAULT_INPUT_NAME,true);
command.run();
}
if (createOutput)
{
command = new AddOutputCommand(operation,DEFAULT_OUTPUT_NAME,true);
command.run();
}
if (createFault)
{
command = new AddFaultCommand(operation,DEFAULT_FAULT_NAME,true);
command.run();
}
}
else {
// Do necessary copying of data from original operation to new operation
// Paramater ordering? Documentation? This part still needs to be worked on
// Copy 'kids' if necessary
if (copyInOutFault) {
WSDLElementCommand command = null;
if (originalOperation.getEOutput() != null)
{
Output output = originalOperation.getEOutput();
command = new AddOutputCommand(operation, output, NameUtil.buildUniqueOutputName(portType, operation.getName(), ""));
command.run();
}
if (originalOperation.getEInput() != null)
{
Input input = originalOperation.getEInput();
command = new AddInputCommand(operation, input, NameUtil.buildUniqueInputName(portType, operation.getName(), ""));
command.run();
}
if (originalOperation.getEFaults() != null)
{
Iterator it = originalOperation.getEFaults().iterator();
while (it.hasNext()) {
Fault fault = (Fault) it.next();
command = new AddFaultCommand(operation, fault, NameUtil.buildUniqueFaultName(originalOperation, fault.getName()));
command.run();
}
}
}
}
}
public WSDLElement getWSDLElement()
{
return operation;
}
public void setName(String name)
{
this.name = name;
}
}