/*
* 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.actions.request;
import com.eviware.soapui.SoapUI;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.WsdlRequest;
import com.eviware.soapui.impl.wsdl.mock.WsdlMockOperation;
import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse;
import com.eviware.soapui.impl.wsdl.mock.WsdlMockService;
import com.eviware.soapui.impl.wsdl.submit.transports.http.WsdlResponse;
import com.eviware.soapui.model.iface.Attachment;
import com.eviware.soapui.model.support.ModelSupport;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.action.support.AbstractSoapUIAction;
/**
* Adds a WsdlRequest to a WsdlMockService, will create required
* WsdlMockOperation if neccessary
*
* @author ole.matzura
*/
public class AddRequestToMockServiceAction extends AbstractSoapUIAction<WsdlRequest> {
private static final String CREATE_MOCKSUITE_OPTION = "Create new..";
public static final String SOAPUI_ACTION_ID = "AddRequestToMockServiceAction";
public AddRequestToMockServiceAction() {
super("Add to MockService", "Adds the current response to a MockService");
}
public void perform(WsdlRequest request, Object param) {
String title = getName();
if (request != null && request.getResponse() == null) {
if (!UISupport.confirm("Request is missing response, create default mock response instead?", title)) {
return;
}
}
WsdlMockService mockService = null;
WsdlMockOperation mockOperation = (WsdlMockOperation) param;
if (mockOperation != null) {
mockService = mockOperation.getMockService();
}
WsdlProject project = request.getOperation().getInterface().getProject();
while (mockService == null) {
if (project.getMockServiceCount() > 0) {
String[] mockServices = ModelSupport.getNames(project.getMockServiceList(),
new String[]{CREATE_MOCKSUITE_OPTION});
// prompt
String option = UISupport.prompt("Select MockService for MockOperation", title, mockServices);
if (option == null) {
return;
}
mockService = project.getMockServiceByName(option);
}
// create new mocksuite?
if (mockService == null) {
String mockServiceName = UISupport.prompt("Enter name of new MockService", title, "MockService "
+ (project.getMockServiceCount() + 1));
if (mockServiceName == null || mockServiceName.trim().length() == 0) {
return;
}
mockService = project.addNewMockService(mockServiceName);
}
mockOperation = mockService.getMockOperation(request.getOperation());
if (mockOperation != null) {
Boolean retval = UISupport.confirmOrCancel("MockService [" + mockService.getName()
+ "] already has a MockOperation for [" + request.getOperation().getName()
+ "],\r\nShould MockResponse be added to this MockOperation instead", "Add Request to MockService");
if (retval == null) {
return;
}
if (!retval.booleanValue()) {
mockService = null;
}
}
}
// add mockoperation
if (mockOperation == null) {
mockOperation = (WsdlMockOperation) mockService.addNewMockOperation(request.getOperation());
}
WsdlMockResponse mockResponse = mockOperation.addNewMockResponse(
"Response " + (1 + mockOperation.getMockResponseCount()), false);
// add expected response if available
if (request != null && request.getResponse() != null) {
WsdlResponse response = request.getResponse();
mockResponse.setResponseContent(response.getContentAsString());
Attachment[] attachments = response.getAttachments();
for (Attachment attachment : attachments) {
mockResponse.addAttachment(attachment);
}
if (mockResponse.getResponseHeaders() != null && mockResponse.getResponseHeaders().size() > 0
&& UISupport.confirm("Add current Response HTTP Headers to MockResponse", title)) {
mockResponse.setResponseHeaders(response.getResponseHeaders());
}
} else {
mockResponse.setResponseContent(request.getOperation().createResponse(true));
}
if (UISupport.confirm("Open MockResponse editor?", title)) {
SoapUI.getDesktop().showDesktopPanel(mockResponse);
}
}
}