/*******************************************************************************
* Copyright (c) 2010 SAP AG.
* 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:
* Emil Simeonov - initial API and implementation.
* Dimitar Donchev - initial API and implementation.
* Dimitar Tenev - initial API and implementation.
* Nevena Manova - initial API and implementation.
* Georgi Konstantinov - initial API and implementation.
*******************************************************************************/
package org.eclipse.wst.sse.sieditor.test.smoke;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.wst.sse.sieditor.test.model.Constants;
import org.eclipse.wst.sse.sieditor.test.util.SIEditorBaseTest;
import org.junit.Test;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.AddFaultCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.AddInParameterCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.AddNewSchemaCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.AddOperationCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.AddOutParameterCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.AddServiceInterfaceCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.DeleteFaultCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.DeleteInParameterCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.DeleteOperationCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.DeleteOutParameterCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.DeleteServiceInterfaceCommand;
import org.eclipse.wst.sse.sieditor.command.emf.wsdl.RemoveSchemaCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.AddAttributeCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.AddElementCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.AddFacetCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.AddSimpleTypeCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.AddStructureTypeCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.DeleteElementCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.FacetsCommandFactory;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.SetElementNillableCommand;
import org.eclipse.wst.sse.sieditor.command.emf.xsd.SetElementOccurences;
import org.eclipse.wst.sse.sieditor.model.api.IModelRoot;
import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot;
import org.eclipse.wst.sse.sieditor.model.api.IXSDModelRoot;
import org.eclipse.wst.sse.sieditor.model.impl.XSDFactory;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IFault;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IParameter;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IServiceInterface;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.OperationType;
import org.eclipse.wst.sse.sieditor.model.wsdl.impl.Description;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IElement;
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
import org.eclipse.wst.sse.sieditor.model.xsd.impl.AbstractType;
import org.eclipse.wst.sse.sieditor.model.xsd.impl.AbstractXSDComponent;
import org.eclipse.wst.sse.sieditor.model.xsd.impl.StructureType;
@SuppressWarnings("nls")
public class SIEditorSmokeTest extends SIEditorBaseTest {
protected static final String WSDL_FILE_NAME = "ECC_CUSTOMER002QR.wsdl";
protected static final int NUMBER_OF_INTERFACES_IN_FILE = 1;
protected static final String INTERFACE_NAME = "CustomerSimpleByNameAndAddressQueryResponse_In";
protected static final String CREATED_INTERFACE_NAME = "SmokeInterface";
protected static final int NUMBER_OF_CONTAINED_SCHEMAS = 2;
protected static final int NUMBER_OF_VISIBLE_SCHEMAS = 3;
protected static final String SCHEMA_FOR_SCHEMANS = "http://www.w3.org/2001/XMLSchema";
protected static final String[] SCHEMA_NAMESPACES = new String[] { "http://sap.com/xi/APPL/SE/Global",
"http://sap.com/xi/SAPGlobal20/Global" };
protected static final int NUMBER_OF_REFERENCED_SERVICES = 0;
protected static final String DESCRIPTION_LOCATION = "/SIEditorSmokeTest/data/ECC_CUSTOMER002QR.wsdl";
protected static final String DESCRIPTION_NAMESPACE = "http://sap.com/xi/APPL/SE/Global";
protected static final int NUMBER_OF_OPERATIONS = 1;
protected static final String TESTED_OPERATION = "CustomerSimpleByNameAndAddressQueryResponse_In";
protected static final OperationType OPERATION_TYPE = OperationType.REQUEST_RESPONSE;
protected static final int NUMBER_OF_INPUT_PARAMETERS = 1;
protected static final String TESTED_INPUT_PARAMETER = "parameters";
protected static final int NUMBER_OF_OUTPUT_PARAMETERS = 1;
protected static final String TESTED_OUTPUT_PARAMETER = "parameters";
protected static final int NUMBER_OF_FAULTS = 1;
protected static final String TESTED_FAULT = "exception00";
protected static final int NUMBER_OF_PARAMETERS_IN_FAULT = 1;
protected static final String TESTED_PARAMETER_IN_FAULT = "exception00";
protected static final String OPERATION_NAME = "SmokeReqResponseOperation";
protected static final String FAULT_NAME = "Smokefault";
protected static final String IN_PARAM_NAME = "SmokeInputParameter";
protected static final String OUT_PARAM_NAME = "SmokeOutputParameter";
protected static final String ELEMENT_NAME = "SmokeElement";
protected static final String SIMPLE_TYPE_NAME = "SmokeSimpleType";
protected static final String STRUCTURE_TYPE_NAME = "SmokeStructureType";
protected String getProjectName() {
return "SIEditorSmokeTest";
}
@Test
public void test_ModelAccess() throws Exception {
final IWsdlModelRoot root = copyAndGetModelRoot(WSDL_FILE_NAME);
assertNotNull("Model could not be acquired", root);
assertNotNull("Description could not be acquired", root.getDescription());
}
@Test
public void test_Description() throws Exception {
IWsdlModelRoot root = getModelRoot(WSDL_FILE_NAME);
IDescription description = root.getDescription();
String nameSpace = description.getNamespace();
assertEquals(DESCRIPTION_NAMESPACE, nameSpace);
Collection<IServiceInterface> interfaces = description.getAllInterfaces();
assertTrue(interfaces.size() + " interfaces returned instead of " + NUMBER_OF_INTERFACES_IN_FILE,
NUMBER_OF_INTERFACES_IN_FILE == interfaces.size()); // @Test-0001
interfaces = description.getAllInterfaces();
assertTrue(interfaces.size() + " interfaces returned instead of " + NUMBER_OF_INTERFACES_IN_FILE,
NUMBER_OF_INTERFACES_IN_FILE == interfaces.size()); // @Test-0001
assertFalse(description.getInterface(INTERFACE_NAME).isEmpty());
IServiceInterface service1 = description.getInterface(INTERFACE_NAME).get(0);
assertNotNull("Null returned for getInterface", service1); // @Test-0002
assertTrue("Interface exists with name foo", description.getInterface("foo").isEmpty()); // @Test-0002
Collection<ISchema> schemas = description.getContainedSchemas();
assertTrue(schemas.size() + " Contained schemas returned instead of " + NUMBER_OF_CONTAINED_SCHEMAS,
NUMBER_OF_CONTAINED_SCHEMAS == schemas.size()); // @Test-0003
Collection<ISchema> visibleSchemas = description.getAllVisibleSchemas();
assertTrue(visibleSchemas.size() + " Visible Schemas returned instead of " + NUMBER_OF_VISIBLE_SCHEMAS,
NUMBER_OF_VISIBLE_SCHEMAS == visibleSchemas.size()); // @Test-0004
boolean exists = false;
for(ISchema schema : visibleSchemas) {
if(SCHEMA_FOR_SCHEMANS.equals(schema.getNamespace())) {
exists = true;
break;
}
}
assertTrue("Return Visible schema is not schema for schema", exists);
for (String schemans : SCHEMA_NAMESPACES) {
ISchema[] schemaArray = description.getSchema(schemans);
assertTrue("No schema returned for namespace '" + schemans + "'", 1 == schemaArray.length); // @Test-0005
assertEquals("Wrong Schema returned for namespace '" + schemans + "'", schemans, schemaArray[0].getNamespace());
}
ISchema[] schemaArray = description.getSchema("foo");
assertTrue("Schemas exists for namespace 'foo'", 0 == schemaArray.length); // @Test-0005
Collection<IDescription> referencedServices = description.getReferencedServices();
assertTrue("Referenced services exist", NUMBER_OF_REFERENCED_SERVICES == referencedServices.size()); // @Test-0006
String location = description.getLocation();
assertTrue(location.endsWith(DESCRIPTION_LOCATION)); // @Test-007
String namespace = description.getNamespace();
assertEquals("'" + namespace + "' returned as namespace instead of '" + DESCRIPTION_NAMESPACE + "'",
DESCRIPTION_NAMESPACE, namespace); // @Test-0008
assertTrue(description.getParent() == null);
assertTrue(description.getRoot() == null);
}
@Test
public void test_ServiceInterface() throws Exception {
IWsdlModelRoot root = getModelRoot(WSDL_FILE_NAME);
IDescription description = root.getDescription();
assertFalse("No interface returned for name " + INTERFACE_NAME + " is null", description.getInterface(INTERFACE_NAME).isEmpty());
IServiceInterface service = description.getInterface(INTERFACE_NAME).get(0);
assertTrue("Wrong interface returned for name " + INTERFACE_NAME, INTERFACE_NAME.equals(service.getName()));
Collection<IOperation> operations = service.getAllOperations();
assertEquals(operations.size() + " operations returned instead of " + NUMBER_OF_OPERATIONS, NUMBER_OF_OPERATIONS,
operations.size()); // @Test-0009
operations = service.getAllOperations();
assertEquals(operations.size() + " operations returned instead of " + NUMBER_OF_OPERATIONS, NUMBER_OF_OPERATIONS,
operations.size()); // @Test-0009
List<IOperation> ops = service.getOperation(TESTED_OPERATION);
assertFalse(ops.isEmpty());
IOperation operation = ops.get(0);
assertNotNull("No operation returned for name " + TESTED_OPERATION, operation); // @Test-0010
assertTrue("Wrong Operaiton returned for name " + TESTED_OPERATION, TESTED_OPERATION.equals(operation.getName()));
assertTrue(description == service.getParent());
assertTrue(description == service.getRoot());
}
@Test
public void test_Operation() throws Exception {
IWsdlModelRoot root = getModelRoot(WSDL_FILE_NAME);
IDescription description = root.getDescription();
IServiceInterface service = description.getInterface(INTERFACE_NAME).get(0);
IOperation operation = service.getOperation(TESTED_OPERATION).get(0);
OperationType operationType = operation.getOperationStyle();
assertTrue("Returned operation is not Request-Response", OPERATION_TYPE == operationType); // @Test-0012
Collection<IParameter> inputParameters = operation.getAllInputParameters();
assertEquals(inputParameters.size() + " in parameters returned instead of " + NUMBER_OF_INPUT_PARAMETERS,
NUMBER_OF_INPUT_PARAMETERS, inputParameters.size()); // @Test-0013
inputParameters = operation.getAllInputParameters();
assertEquals(inputParameters.size() + " in parameters returned instead of " + NUMBER_OF_INPUT_PARAMETERS,
NUMBER_OF_INPUT_PARAMETERS, inputParameters.size()); // @Test-0013
List<IParameter> params = operation.getInputParameter(TESTED_INPUT_PARAMETER);
assertFalse(params.isEmpty());
IParameter inputParameter = params.get(0);
assertNotNull("No input parameter returned for name " + TESTED_INPUT_PARAMETER, inputParameter); // @Test-0014
assertTrue("Wrong in parameter returned for name " + TESTED_INPUT_PARAMETER, TESTED_INPUT_PARAMETER.equals(inputParameter
.getName()));
assertTrue(operation == inputParameter.getParent());
assertTrue(description == inputParameter.getRoot());
Collection<IParameter> outputParameters = operation.getAllOutputParameters();
assertEquals(outputParameters.size() + " out parameters returned instead of " + NUMBER_OF_OUTPUT_PARAMETERS,
NUMBER_OF_OUTPUT_PARAMETERS, outputParameters.size()); // @Test-0015
outputParameters = operation.getAllOutputParameters();
assertEquals(outputParameters.size() + " out parameters returned instead of " + NUMBER_OF_OUTPUT_PARAMETERS,
NUMBER_OF_OUTPUT_PARAMETERS, outputParameters.size()); // @Test-0015
params = operation.getOutputParameter(TESTED_OUTPUT_PARAMETER);
assertFalse(params.isEmpty());
IParameter outputParameter = params.get(0);
assertNotNull("No out parameter returned for name " + TESTED_OUTPUT_PARAMETER, outputParameter); // @Test-0016
assertTrue("Wrong out parameter returned for name " + TESTED_OUTPUT_PARAMETER, TESTED_OUTPUT_PARAMETER
.equals(outputParameter.getName()));
assertTrue(operation == outputParameter.getParent());
assertTrue(description == outputParameter.getRoot());
Collection<IFault> faults = operation.getAllFaults();
assertEquals(faults.size() + " faults returned instead of " + NUMBER_OF_FAULTS, NUMBER_OF_FAULTS, faults.size()); // @Test-0017
faults = operation.getAllFaults();
assertEquals(faults.size() + " faults returned instead of " + NUMBER_OF_FAULTS, NUMBER_OF_FAULTS, faults.size()); // @Test-0017
List<IFault> flts = operation.getFault(TESTED_FAULT);
assertFalse(flts.isEmpty());
IFault fault = flts.get(0);
assertNotNull("No Fault returned for name " + TESTED_FAULT, fault); // @Test-0018
assertTrue("Wrong fault returned for name " + TESTED_FAULT, TESTED_FAULT.equals(fault.getName()));
assertTrue(operation == fault.getParent());
assertTrue(description == fault.getRoot());
assertTrue(service == operation.getParent());
assertTrue(description == operation.getRoot());
}
@Test
public void test_OperationParameter() throws Exception {
IWsdlModelRoot root = getModelRoot(WSDL_FILE_NAME);
IDescription description = root.getDescription();
IServiceInterface service = description.getInterface(INTERFACE_NAME).get(0);
IOperation operation = service.getOperation(TESTED_OPERATION).get(0);
IParameter parameter = operation.getInputParameter(TESTED_INPUT_PARAMETER).get(0);
String name = parameter.getName();
assertNotNull("Null returned for name", name);
assertTrue("Wrong name returned for parameter " + TESTED_INPUT_PARAMETER, TESTED_INPUT_PARAMETER.equals(name));
IType type = parameter.getType();
assertNotNull("Null returned for type" + type); // @Test-0019
assertTrue("Wrong type returned for parameter", "CustomerSimpleByNameAndAddressQuery_sync".equals(type.getName()));
assertTrue("Type must be StructureType", type instanceof StructureType);
parameter = operation.getOutputParameter(TESTED_OUTPUT_PARAMETER).get(0);
name = parameter.getName();
assertNotNull("Null returned for name", name);
assertTrue("Wrong name returned for parameter " + TESTED_OUTPUT_PARAMETER, TESTED_OUTPUT_PARAMETER.equals(name));
type = parameter.getType();
assertNotNull("Null returned for type" + type); // @Test-0019
assertTrue("Wrong type returned for parameter", "CustomerSimpleByNameAndAddressResponse_sync".equals(type.getName()));
assertTrue("Type must be StructureType", type instanceof StructureType);
assertTrue("Returned Type is not an Element", ((StructureType) type).isElement());
}
@Test
public void test_OperationFault() throws Exception {
IWsdlModelRoot root = getModelRoot(WSDL_FILE_NAME);
IDescription description = root.getDescription();
IServiceInterface service = description.getInterface(INTERFACE_NAME).get(0);
IOperation operation = service.getOperation(TESTED_OPERATION).get(0);
IFault fault = operation.getFault(TESTED_FAULT).get(0);
final String name = fault.getName();
assertNotNull("Null returned for name", name);
assertEquals("Wrong fault name returned ", TESTED_FAULT, name);
Collection<IParameter> parameters = fault.getParameters();
assertEquals(parameters.size() + " Fault parameters returned instead of " + NUMBER_OF_PARAMETERS_IN_FAULT,
NUMBER_OF_PARAMETERS_IN_FAULT, parameters.size()); // @Test-0020
IParameter parameter = fault.getParameter(TESTED_PARAMETER_IN_FAULT).get(0);
parameters = fault.getParameters();
assertEquals(parameters.size() + " Fault parameters returned instead of " + NUMBER_OF_PARAMETERS_IN_FAULT,
NUMBER_OF_PARAMETERS_IN_FAULT, parameters.size()); // @Test-0020
assertTrue(operation == fault.getParent());
assertTrue(description == fault.getRoot());
assertNotNull("No parameter returned for name " + TESTED_PARAMETER_IN_FAULT, parameter); // @Test-0021
assertEquals("Wrong parameter returned for name " + TESTED_PARAMETER_IN_FAULT, TESTED_PARAMETER_IN_FAULT, parameter
.getName());
}
@Test
public void test_AddNewServiceInterface() throws Exception {
IWsdlModelRoot modelRoot = getModelRoot(WSDL_FILE_NAME);
IDescription description = modelRoot.getDescription();
IServiceInterface interfaceObj = description.getInterface(INTERFACE_NAME).get(0);
addSI(modelRoot, description, CREATED_INTERFACE_NAME);
((Description) description).save();
assertEquals("http://sap.com/xi/APPL/SE/Global", interfaceObj.getNamespace());
assertFalse("Could not find service new SI", description.getInterface(CREATED_INTERFACE_NAME).isEmpty());
}
@Test
public void test_AddNewOperation() throws Exception {
org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation operation;
IWsdlModelRoot modelRoot = getModelRoot(WSDL_FILE_NAME);
IDescription description = modelRoot.getDescription();
IServiceInterface interfaceObj =description.getInterface(CREATED_INTERFACE_NAME).get(0);
operation = addOperation(modelRoot, interfaceObj, OPERATION_NAME, OperationType.REQUEST_RESPONSE);
((Description) description).save();
assertNotNull("New operation 'SkomeReqResponseOperation' could not be added successfully", operation);
assertEquals(1, operation.getAllInputParameters().size());
assertEquals(1, operation.getAllOutputParameters().size());
assertEquals(0, operation.getAllFaults().size());
assertEquals(OPERATION_NAME, operation.getName());
assertEquals(OperationType.REQUEST_RESPONSE, operation.getOperationStyle());
assertEquals(operation.getParent(), interfaceObj);
assertEquals(operation.getRoot(), description);
assertEquals(1, interfaceObj.getAllOperations().size());
}
@Test
public void test_AddNewParameters() throws Exception {
org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation operation;
org.eclipse.wst.sse.sieditor.model.wsdl.api.IParameter parameter;
org.eclipse.wst.sse.sieditor.model.wsdl.api.IFault faultObj;
IWsdlModelRoot modelRoot = getModelRoot(WSDL_FILE_NAME);
IDescription description = modelRoot.getDescription();
IServiceInterface interfaceObj = description.getInterface(CREATED_INTERFACE_NAME).get(0);
operation = interfaceObj.getOperation(OPERATION_NAME).get(0);
parameter = addInputParameter(modelRoot, operation, IN_PARAM_NAME);
((Description) description).save();
assertEquals(2, operation.getAllInputParameters().size());
assertEquals(IN_PARAM_NAME, parameter.getName());
assertEquals(operation, parameter.getParent());
assertEquals(description, parameter.getRoot());
parameter = addOutputParameter(modelRoot, operation, OUT_PARAM_NAME);
((Description) description).save();
assertEquals(2, operation.getAllOutputParameters().size());
assertEquals(OUT_PARAM_NAME, parameter.getName());
assertEquals(operation, parameter.getParent());
assertEquals(description, parameter.getRoot());
faultObj = addFault(modelRoot, operation, FAULT_NAME);
((Description) description).save();
assertNotNull("New Fault is null", faultObj);
assertEquals(FAULT_NAME, faultObj.getName());
}
@Test
public void test_AddNewNamespace() throws Exception {
IWsdlModelRoot modelRoot = getModelRoot(WSDL_FILE_NAME);
org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription description;
org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema schema;
description = modelRoot.getDescription();
addNamespace(modelRoot, "http://SmokeNamespace");
((Description) description).save();
schema = description.getSchema("http://SmokeNamespace")[0];
assertEquals("http://SmokeNamespace", schema.getNamespace());
}
@Test
public void testAddNewSimpleType() throws Exception {
IWsdlModelRoot modelRoot = getModelRoot(WSDL_FILE_NAME);
org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription description;
org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema schema;
description = modelRoot.getDescription();
org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType simpleType;
schema = description.getSchema("http://SmokeNamespace")[0];
assertNotNull("Could not find schema", schema);
simpleType = addSimpleType(((AbstractXSDComponent)schema).getModelRoot(), schema, SIMPLE_TYPE_NAME);
((Description) description).save();
assertNotNull("Could not find Newly added type SmokeSimpleType", schema.getType(false, SIMPLE_TYPE_NAME));
setMinLength(modelRoot, simpleType, "1");
setMaxLength(modelRoot, simpleType, "10");
addEnumeration(modelRoot, simpleType, "value8");
addPattern(modelRoot, simpleType, "smoke*");
((Description) description).save();
assertEquals("1", simpleType.getMinLength());
assertEquals("10", simpleType.getMaxLength());
assertEquals("value8", simpleType.getEnumerations()[0].getValue());
assertEquals(1, simpleType.getPatterns().length);
assertEquals("smoke*", simpleType.getPatterns()[0].getValue());
}
@Test
public void testAddComplexType() throws Exception {
IWsdlModelRoot modelRoot = getModelRoot(WSDL_FILE_NAME);
org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription description;
org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema schema;
description = modelRoot.getDescription();
schema = description.getSchema("http://SmokeNamespace")[0];
addStructureType(((AbstractXSDComponent)schema).getModelRoot(), schema, STRUCTURE_TYPE_NAME, false, null);
((Description) description).save();
assertNotNull("Could not find Newly added type SmokeStructureType", schema.getType(false, "SmokeStructureType"));
}
@Test
public void testAddElement() throws Exception {
IWsdlModelRoot modelRoot = getModelRoot(WSDL_FILE_NAME);
org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription description;
org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema schema;
org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType structureType;
description = modelRoot.getDescription();
schema = description.getSchema("http://SmokeNamespace")[0];
structureType = (IStructureType) schema.getType(false, STRUCTURE_TYPE_NAME);
IElement element = addElement(modelRoot, structureType, ELEMENT_NAME);
((Description) description).save();
assertEquals(1, structureType.getAllElements().size());
setMinOccurs(modelRoot, element, 2);
((Description) description).save();
assertEquals(2, element.getMinOccurs());
assertEquals(1, element.getMaxOccurs());
setMaxOccurs(modelRoot, element, 4);
((Description) description).save();
assertEquals(4, element.getMaxOccurs());
assertEquals(false, element.getNillable());
setNillable(modelRoot, element, true);
((Description) description).save();
assertEquals(true, element.getNillable());
}
@Test
public void testAddAttribute() throws Exception {
IWsdlModelRoot modelRoot = getModelRoot(WSDL_FILE_NAME);
org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription description;
org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema schema;
org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType structureType;
description = modelRoot.getDescription();
schema = description.getSchema("http://SmokeNamespace")[0];
structureType = (IStructureType) schema.getType(false, STRUCTURE_TYPE_NAME);
IXSDModelRoot xsdmodelRoot = XSDFactory.getInstance().createXSDModelRoot(schema.getComponent());
addAttribute(xsdmodelRoot, structureType, "SmokeAttribute");
((Description) description).save();
assertEquals(2, structureType.getAllElements().size());
}
@Test
public void testDeleteAllCreatedObjects() throws Exception {
IWsdlModelRoot modelRoot = getModelRoot(WSDL_FILE_NAME);
org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription description;
org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema schema;
org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType structureType;
org.eclipse.wst.sse.sieditor.model.wsdl.api.IFault fault;
org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation operation;
description = modelRoot.getDescription();
IServiceInterface service = description.getInterface(CREATED_INTERFACE_NAME).get(0);
schema = description.getSchema("http://SmokeNamespace")[0];
structureType = (IStructureType) schema.getType(false, STRUCTURE_TYPE_NAME);
operation = service.getOperation(OPERATION_NAME).get(0);
List<IFault> flts = operation.getFault(FAULT_NAME);
assertFalse(flts.isEmpty());
fault = flts.get(0);
List<IParameter> prms = operation.getOutputParameter(OUT_PARAM_NAME);
assertFalse(prms.isEmpty());
IParameter parameterOutput = prms.get(0);
prms = operation.getInputParameter(IN_PARAM_NAME);
assertFalse(prms.isEmpty());
IParameter parameterInput = prms.get(0);
removeElement(modelRoot, structureType, ELEMENT_NAME);
((Description) description).save();
removeNamespace(modelRoot, schema);
((Description) description).save();
removeFault(modelRoot, operation, fault);
((Description) description).save();
removeOutputParameter(modelRoot, operation, parameterOutput);
((Description) description).save();
removeInputParameter(modelRoot, operation, parameterInput);
((Description) description).save();
removeOperation(modelRoot, service, operation);
((Description) description).save();
removeSI(modelRoot, description, CREATED_INTERFACE_NAME);
((Description) description).save();
}
private IWsdlModelRoot copyAndGetModelRoot(String fileName) throws Exception {
final String fullPath = Constants.DATA_PUBLIC_SELF_MIX2 + fileName;
final IWsdlModelRoot modelRoot = getWSDLModelRoot(fullPath, fileName);
assertNotNull("Could not Acquire Model Root for " + fullPath, modelRoot);
return modelRoot;
}
private IWsdlModelRoot getModelRoot (String fileName) throws Exception {
IFile file = this.getProject().getFolder("data").getFile(fileName);
final IWsdlModelRoot modelRoot = getWSDLModelRoot(file);
assertNotNull("Could not Acquire Model Root for " + file, modelRoot);
return modelRoot;
}
private static void addSI(IWsdlModelRoot modelRoot, IDescription description, String name) throws ExecutionException {
AddServiceInterfaceCommand cmd = new AddServiceInterfaceCommand(modelRoot, description, name);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static void removeSI(IWsdlModelRoot modelRoot, IDescription description, String name) throws ExecutionException {
List<IServiceInterface> interfaces = description.getInterface(name);
IServiceInterface service = interfaces.isEmpty()? null: interfaces.get(0);
DeleteServiceInterfaceCommand cmd = new DeleteServiceInterfaceCommand(modelRoot, description, service);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static IOperation addOperation(IWsdlModelRoot modelRoot, IServiceInterface serviceInterface, String name, OperationType operationType) throws ExecutionException {
AddOperationCommand cmd = new AddOperationCommand(modelRoot, serviceInterface, name, operationType);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
return cmd.getOperation();
}
private static void removeOperation(IWsdlModelRoot modelRoot, IServiceInterface serviceInterface, IOperation operation) throws ExecutionException {
DeleteOperationCommand cmd = new DeleteOperationCommand(modelRoot, serviceInterface, operation);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static IParameter addInputParameter(IWsdlModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation operation, String name) throws ExecutionException {
AddInParameterCommand cmd = new AddInParameterCommand(modelRoot, operation, name);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
return cmd.getParameter();
}
private static void removeInputParameter(IWsdlModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation operation, IParameter parameter) throws ExecutionException {
DeleteInParameterCommand cmd = new DeleteInParameterCommand(modelRoot, operation, parameter);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static IParameter addOutputParameter(IWsdlModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation operation, String name) throws ExecutionException {
AddOutParameterCommand cmd = new AddOutParameterCommand(modelRoot, operation, name);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
return cmd.getParameter();
}
private static void removeOutputParameter(IWsdlModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation operation, IParameter parameter) throws ExecutionException {
DeleteOutParameterCommand cmd = new DeleteOutParameterCommand(modelRoot, operation, parameter);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static IFault addFault(IWsdlModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation operation, String name) throws ExecutionException {
AddFaultCommand cmd = new AddFaultCommand(modelRoot, operation, name);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
return cmd.getFault();
}
private static void removeFault(IWsdlModelRoot modelRoot, IOperation operation, IFault fault) throws ExecutionException {
DeleteFaultCommand cmd = new DeleteFaultCommand(modelRoot, operation, fault);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static void addNamespace(IWsdlModelRoot modelRoot, String namespace) throws ExecutionException {
AddNewSchemaCommand cmd = new AddNewSchemaCommand(modelRoot, namespace);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static void removeNamespace(IWsdlModelRoot modelRoot, ISchema schema) throws ExecutionException {
RemoveSchemaCommand cmd = new RemoveSchemaCommand(modelRoot, schema);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static ISimpleType addSimpleType(IXSDModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema schema, String name) throws ExecutionException {
AddSimpleTypeCommand cmd = new AddSimpleTypeCommand(modelRoot, schema, name);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
return cmd.getSimpleType();
}
private static void addPattern(IModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType type, String value) throws ExecutionException {
AddFacetCommand cmd = FacetsCommandFactory.createAddPatternFacetCommand(modelRoot, type, value);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static final void setMinLength(IModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType type, String length) throws ExecutionException {
AddFacetCommand cmd = FacetsCommandFactory.createAddMinLengthFacetCommand(modelRoot, type, length);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static final void setMaxLength(IModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType type, String length) throws ExecutionException {
AddFacetCommand cmd = FacetsCommandFactory.createAddMaxLengthFacetCommand(modelRoot, type, length);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static void addEnumeration(IModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType type, String value) throws ExecutionException {
AddFacetCommand cmd = FacetsCommandFactory.createAddEnumerationFacetCommand(modelRoot, type, value);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static void addAttribute(IXSDModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType type ,String name )throws ExecutionException {
AddAttributeCommand cmd = new AddAttributeCommand(modelRoot, type, name);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static IElement addElement(IModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType type, String name) throws ExecutionException {
AddElementCommand cmd = new AddElementCommand(modelRoot, type, name);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
return cmd.getElement();
}
public static void removeElement(IModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType type, String elementName) throws ExecutionException {
IElement element = type.getElements(elementName).iterator().next();
DeleteElementCommand cmd = new DeleteElementCommand(modelRoot, type, element);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
}
private static IStructureType addStructureType(IXSDModelRoot modelRoot, org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema schema, String name, boolean element, AbstractType referencedType) throws ExecutionException {
AddStructureTypeCommand cmd = new AddStructureTypeCommand(modelRoot, schema, name, element, referencedType);
assertEquals(Status.OK_STATUS, modelRoot.getEnv().execute(cmd));
return cmd.getStructureType();
}
private static void setMinOccurs(IModelRoot modelRoot, IElement element, int value) throws ExecutionException {
setMinOccurs(modelRoot, element, value, Status.OK);
}
private static void setMinOccurs(IModelRoot modelRoot, IElement element, int value, int expectedSeverity) throws ExecutionException {
SetElementOccurences cmd = new SetElementOccurences(modelRoot, element, value, element.getMaxOccurs());
IStatus status = modelRoot.getEnv().execute(cmd);
assertEquals(expectedSeverity, status.getSeverity());
}
private static void setMaxOccurs(IModelRoot modelRoot, IElement element, int value) throws ExecutionException {
setMaxOccurs(modelRoot, element, value, IStatus.OK);
}
private static void setMaxOccurs(IModelRoot modelRoot, IElement element, int value, int expectedSeverity) throws ExecutionException {
SetElementOccurences cmd = new SetElementOccurences(modelRoot, element, element.getMinOccurs(), value);
IStatus status = modelRoot.getEnv().execute(cmd);
assertEquals(expectedSeverity, status.getSeverity());
}
private static void setNillable(IModelRoot modelRoot, IElement element, boolean nillable) throws ExecutionException {
setNillable(modelRoot, element, nillable, IStatus.OK);
}
private static void setNillable(IModelRoot modelRoot, IElement element, boolean nillable, int expectedSeverity) throws ExecutionException {
SetElementNillableCommand cmd = new SetElementNillableCommand(modelRoot, element, nillable);
IStatus status = modelRoot.getEnv().execute(cmd);
assertEquals(expectedSeverity, status.getSeverity());
}
}