package org.eclipse.wst.sse.sieditor.test.model.commands.wsdl; import org.eclipse.core.commands.operations.IUndoableOperation; import org.eclipse.core.runtime.IStatus; import org.eclipse.wst.sse.sieditor.command.common.AbstractNotificationOperation; import org.eclipse.wst.sse.sieditor.command.emf.wsdl.AddNewSchemaCommand; import org.eclipse.wst.sse.sieditor.command.emf.xsd.AddStructureTypeCommand; import org.eclipse.wst.sse.sieditor.command.emf.xsd.SetStructureTypeCommand; 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.xsd.api.ISchema; import org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType; import org.eclipse.wst.sse.sieditor.model.xsd.impl.Schema; import org.eclipse.wst.sse.sieditor.test.model.commands.AbstractCommandChainTest; public class ChangeGlobalElementTypeCommandChainTest extends AbstractCommandChainTest { private static final String HTTP_TEST_NAMESPACE = "http://test_namespace"; private static final String NEW_ELEMENT = "NewElement"; private AddNewSchemaCommand addSchemaCommand; private AddStructureTypeCommand addGlobalElementCommand; private SetStructureTypeCommand setStructureTypeCommand; @Override protected String getWsdlFilename() { return "NewWSDL.wsdl"; } @Override protected String getWsdlFoldername() { return "pub/csns/"; } @Override protected AbstractNotificationOperation getNextOperation(IWsdlModelRoot modelRoot) throws Exception { if (addSchemaCommand == null) { addSchemaCommand = new AddNewSchemaCommand(modelRoot, HTTP_TEST_NAMESPACE); return addSchemaCommand; } if (addGlobalElementCommand == null) { ISchema[] schema = modelRoot.getDescription().getSchema(HTTP_TEST_NAMESPACE); assertNotNull(schema); assertEquals("more than one schema was found for the given namespace", 1, schema.length); addGlobalElementCommand = new AddStructureTypeCommand((IXSDModelRoot) schema[0].getModelRoot(), schema[0], "Add Element", NEW_ELEMENT, true, null); return addGlobalElementCommand; } if (setStructureTypeCommand == null) { ISchema[] schema = modelRoot.getDescription().getSchema(HTTP_TEST_NAMESPACE); assertNotNull(schema); assertEquals("more than one schema was found for the given namespace", 1, schema.length); IStructureType element = (IStructureType) schema[0].getType(true, NEW_ELEMENT); assertNotNull("test element was not found in the new namespace", element); setStructureTypeCommand = new SetStructureTypeCommand(schema[0].getModelRoot(), element, Schema.getSchemaForSchema() .getType(false, "boolean")); return setStructureTypeCommand; } return null; } @Override protected void assertPostOperationRedoState(IUndoableOperation operation, IWsdlModelRoot modelRoot) { assertThereAreNoValidationErrors(); } @Override protected void assertPostOperationUndoState(IUndoableOperation operation, IWsdlModelRoot modelRoot) { assertThereAreNoValidationErrors(); } @Override protected void assertPostUndoState(IStatus undoStatus, IWsdlModelRoot modelRoot) { assertThereAreNoValidationErrors(); assertEquals("only one namespace is expected upon redo", 1, modelRoot.getDescription().getComponent().getETypes() .getSchemas().size()); assertEquals("test schema is present in the initial document state", 0, modelRoot.getDescription().getSchema(HTTP_TEST_NAMESPACE).length); } @Override protected void assertPostRedoState(IStatus redoStatus, IWsdlModelRoot modelRoot) { assertThereAreNoValidationErrors(); assertEquals("two namespaces are expected after the command chain completion", 2, modelRoot.getDescription() .getComponent().getETypes().getSchemas().size()); ISchema[] testSchemas = modelRoot.getDescription().getSchema(HTTP_TEST_NAMESPACE); assertEquals("test schema is not present after the command chain completion", 1, testSchemas.length); IStructureType element = (IStructureType) testSchemas[0].getType(true, NEW_ELEMENT); assertNotNull("test global element was not added", element); assertEquals("boolean", element.getType().getName()); } }