package org.teiid.designer.webservice.ui.editor; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.emf.ecore.EObject; import org.eclipse.xsd.XSDElementDeclaration; import org.teiid.core.designer.util.StringUtilities; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.metamodels.relational.aspects.validation.RelationalStringNameValidator; import org.teiid.designer.metamodels.webservice.Interface; import org.teiid.designer.metamodels.xml.XmlDocument; //import org.teiid.designer.relational.RelationalPlugin; import org.teiid.designer.relational.model.RelationalReference; import org.teiid.designer.webservice.ui.WebServiceUiPlugin; public class WebServiceOperation extends RelationalReference { String inputMessageName; String outputMessageName; XSDElementDeclaration inputContentViaElement; XSDElementDeclaration outputContentViaElement; XmlDocument xmlDocument; List<String> existingNames; private String transformationSQL; private boolean includeInputMessage = true; private boolean includeOutputMessage = true; public WebServiceOperation() { super(); setType(TYPES.OPERATION); setNameValidator(new RelationalStringNameValidator(false)); } public WebServiceOperation(String name, Interface intFace) { super(name); setType(TYPES.OPERATION); setNameValidator(new RelationalStringNameValidator(false)); init(intFace); } private void init(Interface intFace) { existingNames = new ArrayList<String>(); for( Object oper : intFace.getOperations()) { String name = ModelerCore.getModelEditor().getName((EObject)oper); existingNames.add(name.toUpperCase()); } String name = getName(); setName(getNewUniqueName(name)); } /** * @param sql the transformation SQL */ public void setTransformationSQL( String sql ) { this.transformationSQL = sql; } /** * @return the transformation SQL */ public String getTransformationSQL() { return this.transformationSQL; } public String getInputMessageName() { return inputMessageName; } public void setInputMessageName(String inputMessageName) { this.inputMessageName = inputMessageName; } public String getOutputMessageName() { return outputMessageName; } public void setOutputMessageName(String outputMessageName) { this.outputMessageName = outputMessageName; } public XSDElementDeclaration getInputContentViaElement() { return inputContentViaElement; } public void setInputContentViaElement(XSDElementDeclaration inputContentViaElement) { this.inputContentViaElement = inputContentViaElement; } public XSDElementDeclaration getOutputContentViaElement() { return outputContentViaElement; } public void setOutputContentViaElement(XSDElementDeclaration outputContentViaElement) { this.outputContentViaElement = outputContentViaElement; } public XmlDocument getXmlDocument() { return xmlDocument; } public void setXmlDocument(XmlDocument xmlDocument) { this.xmlDocument = xmlDocument; } @Override public void validate() { // Walk through the properties for the table and set the status super.validate(); if( getStatus().getSeverity() == IStatus.ERROR ) { return; } if( existingNames.contains(getName().toUpperCase()) ) { setStatus(new Status(IStatus.ERROR, WebServiceUiPlugin.PLUGIN_ID, WebServiceUiPlugin.UTIL.getString("WebServiceOperation.validate_nameAlreadyExists", getName()) )); return; } // Check for null input message name if( StringUtilities.isEmpty(this.inputMessageName)) { setStatus(new Status(IStatus.WARNING, WebServiceUiPlugin.PLUGIN_ID, WebServiceUiPlugin.UTIL.getString("WebServiceOperation.validate_inputMessageEmptyOrNull") )); return; } // Check for null output message name if( StringUtilities.isEmpty(this.outputMessageName)) { setStatus(new Status(IStatus.WARNING, WebServiceUiPlugin.PLUGIN_ID, WebServiceUiPlugin.UTIL.getString("WebServiceOperation.validate_outputMessageEmptyOrNull") )); return; } // Check for null input content via element if( this.inputContentViaElement == null ) { setStatus(new Status(IStatus.WARNING, WebServiceUiPlugin.PLUGIN_ID, WebServiceUiPlugin.UTIL.getString("WebServiceOperation.validate_inputContentViaElementNull") )); return; } // Check for null output content via element if( this.outputContentViaElement == null ) { setStatus(new Status(IStatus.WARNING, WebServiceUiPlugin.PLUGIN_ID, WebServiceUiPlugin.UTIL.getString("WebServiceOperation.validate_outputContentViaElementNull") )); return; } // Check for null output xml document if( this.xmlDocument == null ) { setStatus(new Status(IStatus.WARNING, WebServiceUiPlugin.PLUGIN_ID, WebServiceUiPlugin.UTIL.getString("WebServiceOperation.validate_outputXmlDocumentNull") )); return; } } private String getNewUniqueName(String proposedName) { if( existingNames.contains(proposedName.toUpperCase()) ) { // We have duplicate model names int count = 1; String newName = proposedName + '_' + Integer.toString(count); while( existingNames.contains(newName.toUpperCase()) && count < 20 ) { count++; if( !existingNames.contains(newName.toUpperCase()) ) { return newName; } newName = proposedName + '_' + Integer.toString(count); } return newName; } return proposedName; } public boolean isIncludeInputMessage() { return includeInputMessage; } public void setIncludeInputMessage(boolean includeInputMessage) { this.includeInputMessage = includeInputMessage; } public boolean isIncludeOutputMessage() { return includeOutputMessage; } public void setIncludeOutputMessage(boolean includeOutputMessage) { this.includeOutputMessage = includeOutputMessage; } }