/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.impl.wsdl.teststeps;
import com.eviware.soapui.impl.wsdl.WsdlOperation;
import com.eviware.soapui.impl.wsdl.submit.WsdlMessageExchange;
import com.eviware.soapui.impl.wsdl.submit.transports.http.WsdlResponse;
import com.eviware.soapui.impl.wsdl.support.assertions.AssertedXPathsContainer;
import com.eviware.soapui.impl.wsdl.support.soap.SoapVersion;
import com.eviware.soapui.impl.wsdl.teststeps.actions.ShowMessageExchangeAction;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.iface.Attachment;
import com.eviware.soapui.model.iface.MessageExchange;
import com.eviware.soapui.model.testsuite.AssertedXPath;
import com.eviware.soapui.model.testsuite.MessageExchangeTestStepResult;
import com.eviware.soapui.model.testsuite.ResponseAssertedMessageExchange;
import com.eviware.soapui.support.action.swing.ActionList;
import com.eviware.soapui.support.types.StringToStringMap;
import com.eviware.soapui.support.types.StringToStringsMap;
import com.eviware.soapui.support.xml.XmlUtils;
import java.io.PrintWriter;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
/**
* TestStepResult for a WsdlTestRequestStep
*
* @author ole.matzura
*/
public class WsdlTestRequestStepResult extends WsdlTestStepResult implements ResponseAssertedMessageExchange,
AssertedXPathsContainer, MessageExchangeTestStepResult, WsdlMessageExchange {
private SoftReference<String> softRequestContent;
private SoftReference<WsdlResponse> softResponse;
private String domain;
private String username;
private String endpoint;
private String encoding;
private String password;
private StringToStringMap properties;
private boolean addedAction;
private List<AssertedXPath> assertedXPaths;
private WsdlResponse response;
private String requestContent;
private WsdlOperation operation;
public WsdlTestRequestStepResult(WsdlTestRequestStep step) {
super(step);
operation = step.getOperation();
}
public WsdlOperation getOperation() {
return operation;
}
public SoapVersion getSoapVersion() {
return ((WsdlOperation) getOperation()).getInterface().getSoapVersion();
}
public ModelItem getModelItem() {
return getResponse() == null ? null : getResponse().getRequest();
}
public String getRequestContent() {
if (isDiscarded()) {
return "<discarded>";
}
return requestContent != null ? requestContent : softRequestContent == null ? null : softRequestContent.get();
}
public void setRequestContent(String requestContent, boolean useSoftReference) {
if (useSoftReference) {
this.softRequestContent = new SoftReference<String>(requestContent);
} else {
this.requestContent = requestContent;
}
}
public WsdlResponse getResponse() {
return response != null ? response : softResponse == null ? null : softResponse.get();
}
@Override
public ActionList getActions() {
if (!addedAction) {
addAction(new ShowMessageExchangeAction(this, "TestStep"), true);
addedAction = true;
}
return super.getActions();
}
public void setResponse(WsdlResponse response, boolean useSoftReference) {
if (useSoftReference) {
this.softResponse = new SoftReference<WsdlResponse>(response);
} else {
this.response = response;
}
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
addProperty("domain", domain);
}
private void addProperty(String key, String value) {
if (properties == null) {
properties = new StringToStringMap();
}
properties.put(key, value);
}
public String getEncoding() {
return encoding;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
addProperty("Encoding", encoding);
}
public String getEndpoint() {
return endpoint;
}
public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
addProperty("Endpoint", endpoint);
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
addProperty("Password", password);
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
addProperty("Username", username);
}
public void discard() {
super.discard();
softRequestContent = null;
softResponse = null;
properties = null;
assertedXPaths = null;
response = null;
}
public void writeTo(PrintWriter writer) {
super.writeTo(writer);
writer.println("\r\n----------------- Properties ------------------------------");
if (properties != null) {
for (String key : properties.keySet()) {
if (properties.get(key) != null) {
writer.println(key + ": " + properties.get(key));
}
}
}
writer.println("\r\n---------------- Request ---------------------------");
WsdlResponse resp = getResponse();
if (resp != null) {
writer.println("Request Headers: " + resp.getRequestHeaders().toString() + "\r\n");
}
if (getRequestContent() != null) {
writer.println(XmlUtils.prettyPrintXml(getRequestContent()));
} else {
writer.println("- missing request / garbage collected -");
}
writer.println("\r\n---------------- Response --------------------------");
if (resp != null) {
writer.println("Response Headers: " + resp.getResponseHeaders().toString() + "\r\n");
String respContent = resp.getContentAsString();
if (respContent != null) {
writer.println(XmlUtils.prettyPrintXml(respContent));
}
} else {
writer.println("- missing response / garbage collected -");
}
}
public StringToStringMap getProperties() {
return properties;
}
public String getProperty(String name) {
return properties.get(name);
}
public Attachment[] getRequestAttachments() {
if (getResponse() == null || getResponse().getRequest() == null) {
return new Attachment[0];
}
return getResponse().getRequest().getAttachments();
}
public StringToStringsMap getRequestHeaders() {
return getResponse() == null ? null : getResponse().getRequestHeaders();
}
public Attachment[] getResponseAttachments() {
return getResponse() == null ? null : getResponse().getAttachments();
}
public String getResponseContent() {
if (isDiscarded()) {
return "<discarded>";
}
if (getResponse() == null) {
return "<missing response>";
}
return getResponse().getContentAsString();
}
public String getRequestContentAsXml() {
return XmlUtils.seemsToBeXml(getRequestContent()) ? getRequestContent() : "<not-xml/>";
}
public String getResponseContentAsXml() {
String responseContent = getResponseContent();
return XmlUtils.seemsToBeXml(responseContent) ? responseContent : null;
}
public StringToStringsMap getResponseHeaders() {
return getResponse() == null ? new StringToStringsMap() : getResponse().getResponseHeaders();
}
public long getTimestamp() {
WsdlResponse resp = getResponse();
return resp == null ? 0 : resp.getTimestamp();
}
public AssertedXPath[] getAssertedXPathsForResponse() {
return assertedXPaths == null ? new AssertedXPath[0] : assertedXPaths.toArray(new AssertedXPath[assertedXPaths
.size()]);
}
public void addAssertedXPath(AssertedXPath assertedXPath) {
if (assertedXPaths == null) {
assertedXPaths = new ArrayList<AssertedXPath>();
}
assertedXPaths.add(assertedXPath);
}
public MessageExchange[] getMessageExchanges() {
return new MessageExchange[]{this};
}
public byte[] getRawRequestData() {
return getResponse() == null ? null : getResponse().getRawRequestData();
}
public byte[] getRawResponseData() {
return getResponse() == null ? null : getResponse().getRawResponseData();
}
public Attachment[] getRequestAttachmentsForPart(String partName) {
return null;
}
public Attachment[] getResponseAttachmentsForPart(String partName) {
return null;
}
public boolean hasRawData() {
return false;
}
public boolean hasRequest(boolean b) {
return true;
}
public boolean hasResponse() {
return getResponse() != null;
}
public Vector<?> getRequestWssResult() {
return null;
}
public Vector<?> getResponseWssResult() {
return getResponse() == null ? null : getResponse().getWssResult();
}
public int getResponseStatusCode() {
WsdlResponse resp = getResponse();
return resp == null ? 0 : resp.getStatusCode();
}
public String getResponseContentType() {
return getResponse() == null ? null : getResponse().getContentType();
}
}