Package com.eviware.soapui.impl.rest.mock

Source Code of com.eviware.soapui.impl.rest.mock.RestMockAction

/*
* Copyright 2004-2014 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.rest.mock;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.config.RESTMockActionConfig;
import com.eviware.soapui.config.RESTMockResponseConfig;
import com.eviware.soapui.impl.rest.RestRequest;
import com.eviware.soapui.impl.rest.RestRequestInterface;
import com.eviware.soapui.impl.rest.RestResource;
import com.eviware.soapui.impl.support.AbstractMockOperation;
import com.eviware.soapui.impl.support.HasHelpUrl;
import com.eviware.soapui.impl.wsdl.mock.DispatchException;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.model.iface.Operation;
import com.eviware.soapui.model.mock.MockResponse;
import com.eviware.soapui.support.UISupport;
import com.google.common.io.CharStreams;

import java.beans.PropertyChangeEvent;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;

public class RestMockAction extends AbstractMockOperation<RESTMockActionConfig, RestMockResponse> implements HasHelpUrl {
    private RestResource resource = null;

    public RestMockAction(RestMockService mockService, RESTMockActionConfig config) {
        super(config, mockService, RestMockAction.getIconName(config));

        mockService.getMockOperationByName(config.getName());

        List<RESTMockResponseConfig> responseConfigs = config.getResponseList();
        for (RESTMockResponseConfig responseConfig : responseConfigs) {
            RestMockResponse restMockResponse = new RestMockResponse(this, responseConfig);
            restMockResponse.addPropertyChangeListener(this);
            addMockResponse(restMockResponse);
        }

        super.setupConfig(config);
    }

    public RestMockAction(RestMockService mockService, RESTMockActionConfig config, RestRequest request) {
        this(mockService, config);
        resource = request.getResource();
    }

    public static String getIconName(RESTMockActionConfig methodConfig) {
        if (methodConfig.isSetMethod()) {
            return getIconName(methodConfig.getMethod());
        }
        return getDefaultIcon();
    }

    private static String getIconName(String method) {
        return "/mock_" + method.toLowerCase() + "_method.gif";
    }

    public static String getDefaultIcon() {
        return getIconName(RestRequestInterface.HttpMethod.GET.name());
    }

    @Override
    public RestMockService getMockService() {
        return (RestMockService) getParent();
    }

    @Override
    public void removeResponseFromConfig(int index) {
        getConfig().removeResponse(index);
    }

    @Override
    public Operation getOperation() {
        return resource;
    }

    @Override
    public String getScriptHelpUrl() {
        return HelpUrls.REST_MOCK_SCRIPTDISPATCH;
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {

    }

    public RestMockResponse addNewMockResponse(String name) {

        RESTMockResponseConfig restMockResponseConfig = getConfig().addNewResponse();
        restMockResponseConfig.setName(name);

        RestMockResponse mockResponse = new RestMockResponse(this, restMockResponseConfig);
        addMockResponse(mockResponse);


        if (getMockResponseCount() == 1 && restMockResponseConfig.getResponseContent() != null) {
            setDefaultResponse(restMockResponseConfig.getResponseContent().toString());
        }

        (getMockService()).fireMockResponseAdded(mockResponse);
        notifyPropertyChanged("mockResponses", null, mockResponse);

        return mockResponse;
    }

    public RestMockResult dispatchRequest(RestMockRequest request) throws DispatchException {
        if (getMockResponseCount() == 0) {
            throw new DispatchException("Missing MockResponse(s) in MockOperation [" + getName() + "]");
        }

        try {
            RestMockResult result = new RestMockResult(request);

            MockResponse mockResponse = getDispatcher().selectMockResponse(request, result);

            result.setMockResponse(mockResponse);

            result.setMockOperation(this);

            if (mockResponse == null) {
                mockResponse = getMockResponseByName(this.getDefaultResponse());
            }

            if (mockResponse == null) {
                throw new DispatchException("Failed to find MockResponse");
            }

            result.setMockResponse(mockResponse);
            mockResponse.execute(request, result);

            return result;
        } catch (Exception e) {
            throw new DispatchException(e);
        }
    }

    public String getResourcePath() {
        return getConfig().getResourcePath();
    }

    public void setMethod(RestRequestInterface.HttpMethod method) {
        getConfig().setMethod(method.name());
        setIcon(UISupport.createImageIcon(getIconName(method.name())));

        notifyPropertyChanged("httpMethod", null, this);
    }

    public RestRequestInterface.HttpMethod getMethod() {
        return RestRequestInterface.HttpMethod.valueOf(getConfig().getMethod());
    }

    public void setResourcePath(String path) {
        getConfig().setResourcePath(path);
        notifyPropertyChanged("resourcePath", null, this);
    }

    public void setResource(RestResource resource) {
        this.resource = resource;

    }


    @Override
    public void setExampleScript() {
        if (getScript() == null) {
            try {
                String groovyScriptName = "com/eviware/soapui/impl/rest/mock/dispatching-script-sample.groovy";
                InputStream groovyStream = getClass().getClassLoader().getResourceAsStream(groovyScriptName);
                InputStreamReader groovyReader = new InputStreamReader(groovyStream);
                String groovyScript = CharStreams.toString(groovyReader);

                setScript(groovyScript);
            } catch (IOException e) {
                SoapUI.logError(e);
            }
        }
    }

    public String getHelpUrl() {
        return HelpUrls.REST_MOCKSERVICE_ACTION;
    }
}
TOP

Related Classes of com.eviware.soapui.impl.rest.mock.RestMockAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.