blob: 58670a858a6cbf86ce8420704d0bc733ba030438 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 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
* yyyymmdd bug Email and other contact information
* -------- -------- -----------------------------------------------------------
* 20070305 117034 makandre@ca.ibm.com - Andrew Mak, Web Services Explorer should support SOAP Headers
* 20070413 176493 makandre@ca.ibm.com - Andrew Mak, WSE: Make message/transport stack pluggable
*******************************************************************************/
package org.eclipse.wst.ws.internal.explorer.platform.wsdl.actions;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Hashtable;
import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller;
import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataException;
import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataParser;
import org.eclipse.wst.ws.internal.explorer.platform.wsdl.constants.FragmentConstants;
import org.eclipse.wst.ws.internal.explorer.platform.wsdl.constants.WSDLActionInputs;
import org.eclipse.wst.ws.internal.explorer.platform.wsdl.constants.WSDLModelConstants;
import org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel.WSDLOperationElement;
import org.eclipse.wst.ws.internal.explorer.transport.ISOAPMessage;
public class InvokeWSDLSOAPOperationSourceAction extends InvokeWSDLSOAPOperationAction
{
private boolean newFileSelected_;
private boolean saveAsSelected_;
private boolean isHeader_;
public InvokeWSDLSOAPOperationSourceAction(Controller controller)
{
super(controller);
newFileSelected_ = false;
saveAsSelected_ = false;
isHeader_ = false;
}
protected boolean processParsedResults(MultipartFormDataParser parser) throws MultipartFormDataException
{
super.processParsedResults(parser);
WSDLOperationElement operElement = (WSDLOperationElement)getSelectedNavigatorNode().getTreeElement();
newFileSelected_ = false;
saveAsSelected_ = false;
isHeader_ = false;
/* try and catch is needed if we are doing fragmentization.
try
{
*/
String submissionAction = parser.getParameter(WSDLActionInputs.SUBMISSION_ACTION);
String sourceContents = parser.getParameter(FragmentConstants.SOURCE_CONTENT_HEADER);
if (sourceContents != null)
operElement.setPropertyAsString(WSDLModelConstants.PROP_SOURCE_CONTENT_HEADER,sourceContents);
sourceContents = parser.getParameter(FragmentConstants.SOURCE_CONTENT);
if (sourceContents != null)
operElement.setPropertyAsString(WSDLModelConstants.PROP_SOURCE_CONTENT,sourceContents);
if (WSDLActionInputs.SUBMISSION_ACTION_BROWSE_FILE_HEADER.equals(submissionAction))
{
newFileSelected_ = true;
String fileContents = parser.getParameter(WSDLActionInputs.SELECTED_FILE_HEADER);
if (fileContents != null)
operElement.setPropertyAsString(WSDLModelConstants.PROP_SOURCE_CONTENT_HEADER,fileContents);
}
else if (WSDLActionInputs.SUBMISSION_ACTION_BROWSE_FILE.equals(submissionAction))
{
newFileSelected_ = true;
String fileContents = parser.getParameter(WSDLActionInputs.SELECTED_FILE);
if (fileContents != null)
operElement.setPropertyAsString(WSDLModelConstants.PROP_SOURCE_CONTENT,fileContents);
}
else if (WSDLActionInputs.SUBMISSION_ACTION_SAVE_AS_HEADER.equals(submissionAction))
{
saveAsSelected_ = true;
isHeader_ = true;
return true;
}
else if (WSDLActionInputs.SUBMISSION_ACTION_SAVE_AS.equals(submissionAction))
{
// Save As... action
saveAsSelected_ = true;
return true;
}
String[] nsDeclarations = parser.getParameterValues(FragmentConstants.SOURCE_CONTENT_NAMESPACE);
if (nsDeclarations != null)
operElement.setPropertyAsObject(WSDLModelConstants.PROP_SOURCE_CONTENT_NAMESPACE,nsDeclarations);
return true;
/*
}
catch (ParserConfigurationException e)
{
handleUnexpectedException(wsdlPerspective,messageQueue,"ParserConfigurationException",e);
}
catch (SAXException e)
{
handleUnexpectedException(wsdlPerspective,messageQueue,"SAXException",e);
}
catch (UnsupportedEncodingException e)
{
handleUnexpectedException(wsdlPerspective,messageQueue,"UnsupportedEncodingException",e);
}
catch (IOException e)
{
handleUnexpectedException(wsdlPerspective,messageQueue,"IOException",e);
}
return false;
*/
}
/* (non-Javadoc)
* @see org.eclipse.wst.ws.internal.explorer.platform.wsdl.actions.InvokeWSDLSOAPOperationAction#getSOAPRequestMessage(org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel.WSDLOperationElement)
*/
protected ISOAPMessage getSOAPRequestMessage(WSDLOperationElement operElement) {
return (ISOAPMessage) operElement.getPropertyAsObject(WSDLModelConstants.PROP_SOAP_REQUEST_TMP);
}
/* (non-Javadoc)
* @see org.eclipse.wst.ws.internal.explorer.platform.wsdl.actions.InvokeWSDLSOAPOperationAction#setHeaderContent(java.util.Hashtable, org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel.WSDLOperationElement, org.eclipse.wst.ws.internal.explorer.transport.ISOAPMessage)
*/
protected void setHeaderContent(Hashtable soapEnvelopeNamespaceTable, WSDLOperationElement operElement, ISOAPMessage soapMessage) {
String headerContent = operElement.getPropertyAsString(WSDLModelConstants.PROP_SOURCE_CONTENT_HEADER);
operElement.getSOAPTransportProvider().newTransport().newDeserializer()
.deserialize(ISOAPMessage.HEADER_CONTENT, headerContent, soapMessage);
}
/* (non-Javadoc)
* @see org.eclipse.wst.ws.internal.explorer.platform.wsdl.actions.InvokeWSDLSOAPOperationAction#setBodyContent(java.util.Hashtable, org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel.WSDLOperationElement, org.eclipse.wst.ws.internal.explorer.transport.ISOAPMessage)
*/
protected void setBodyContent(Hashtable soapEnvelopeNamespaceTable, WSDLOperationElement operElement, ISOAPMessage soapMessage) {
String bodyContent = operElement.getPropertyAsString(WSDLModelConstants.PROP_SOURCE_CONTENT);
operElement.getSOAPTransportProvider().newTransport().newDeserializer()
.deserialize(ISOAPMessage.BODY_CONTENT, bodyContent, soapMessage);
}
public final boolean wasNewFileSelected()
{
return newFileSelected_;
}
public final boolean wasSaveAsSelected()
{
return saveAsSelected_;
}
public final String getDefaultSaveAsFileName()
{
WSDLOperationElement operElement = (WSDLOperationElement)(getSelectedNavigatorNode().getTreeElement());
return (new StringBuffer(operElement.getOperation().getName())).append(".txt").toString();
}
public final void writeSourceContent(OutputStream os)
{
WSDLOperationElement operElement = (WSDLOperationElement)(getSelectedNavigatorNode().getTreeElement());
PrintWriter pw = new PrintWriter(os);
if (isHeader_)
pw.println(operElement.getPropertyAsString(WSDLModelConstants.PROP_SOURCE_CONTENT_HEADER));
else
pw.println(operElement.getPropertyAsString(WSDLModelConstants.PROP_SOURCE_CONTENT));
pw.close();
}
}