Package com.eviware.soapui.impl.wsdl.actions.monitor

Source Code of com.eviware.soapui.impl.wsdl.actions.monitor.SoapMonitorAction$WizardForm

/*
* 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.wsdl.actions.monitor;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.monitor.ContentTypes;
import com.eviware.soapui.impl.wsdl.monitor.SoapMonitor;
import com.eviware.soapui.impl.wsdl.panels.monitor.SoapMonitorContainer;
import com.eviware.soapui.impl.wsdl.panels.monitor.SoapMonitorDesktopPanel;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.model.settings.Settings;
import com.eviware.soapui.support.StringUtils;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.action.support.AbstractSoapUIAction;
import com.eviware.soapui.ui.desktop.DesktopPanel;
import com.eviware.x.form.XFormDialog;
import com.eviware.x.form.XFormField;
import com.eviware.x.form.XFormFieldListener;
import com.eviware.x.form.support.ADialogBuilder;
import com.eviware.x.form.support.AField;
import com.eviware.x.form.support.AField.AFieldType;
import com.eviware.x.form.support.AForm;
import com.eviware.x.form.support.APage;

public class SoapMonitorAction extends AbstractSoapUIAction<WsdlProject> {

    public static final String SOAPUI_ACTION_ID = "SoapMonitorAction";

    private static final String HTTPS_PROTOCOL = "https://";
    private static final String HTTP_TUNNEL = "HTTP Tunnel";
    private static final String HTTP_PROXY = "HTTP Proxy";
    private SoapMonitor soapMonitor;

    public SoapMonitorAction() {
        super("Launch HTTP Monitor", "Launches a HTTP traffic monitor for this project");
    }

    public void perform(WsdlProject project, Object param) {
        DialogHandler dialogHandler = createDialogHandler(project, param);
        final XFormDialog dialog = dialogHandler.buildDialog();

        Settings settings = project.getSettings();

        dialogHandler.setDialogValues(settings);
        soapMonitor = null;
        if (dialog.show()) {
            try {
                UISupport.setHourglassCursor();

                dialogHandler.saveDialogValues(settings);
                loadAllInterfacesIn(project);

                soapMonitor = dialogHandler.createSoapMonitor();
            } catch (Exception e) {
                SoapUI.logError(e);
            } finally {
                UISupport.resetCursor();
            }
        }
    }

    private void loadAllInterfacesIn(WsdlProject project) throws Exception {
        for (Interface iface : project.getInterfaceList()) {
            iface.getDefinitionContext().loadIfNecessary();
        }
    }


    protected DialogHandler createDialogHandler(WsdlProject project, Object param) {
        return new FullMonitorDialogHandler(project);
    }

    public static ContentTypes defaultContentTypes() {
        return ContentTypes.of("*/html, */xml, */soap+xml, */json, */x-json, */javascript, */x-amf, */http");
    }

    public SoapMonitor getSoapMonitor() {
        return soapMonitor;
    }

    protected interface DialogHandler {
        XFormDialog buildDialog();

        void setDialogValues(Settings settings);

        void saveDialogValues(Settings settings);

        SoapMonitor createSoapMonitor();
    }

    protected SoapMonitor openSoapMonitor(WsdlProject target, int listenPort, String incomingRequestWss,
                                          String incomingResponseWss, boolean setAsProxy, String sslEndpoint) {
        DesktopPanel desktopPanel = null;
        if (sslEndpoint == null) {
            desktopPanel = createDesktopPanel(target, listenPort, incomingRequestWss, incomingResponseWss, setAsProxy, null);
            UISupport.showDesktopPanel(desktopPanel);
        } else {
            String ssl = validate(sslEndpoint);
            if (ssl == null) {
                UISupport.showErrorMessage("SSL Monitor needs endpoint.");
            } else {
                desktopPanel = createDesktopPanel(target, listenPort, incomingRequestWss, incomingResponseWss, setAsProxy, ssl);
                UISupport.showDesktopPanel(desktopPanel);
            }
        }
        return desktopPanel != null ? ((SoapMonitorContainer) desktopPanel).getSoapMonitor() : null;
    }

    protected DesktopPanel createDesktopPanel(WsdlProject target, int listenPort, String incomingRequestWss, String incomingResponseWss, boolean setAsProxy, String ssl) {
        return new SoapMonitorDesktopPanel(target, listenPort, incomingRequestWss,
                incomingResponseWss, setAsProxy, ssl);
    }

    protected String validate(String sslEndpoint) {
        if (sslEndpoint.trim().length() > 0) {
            return sslEndpoint.trim();
        }
        return null;
    }

    private void setDialogState(XFormDialog dialog, String newValue) {
        if (HTTP_PROXY.equals(newValue)) {
            dialog.getFormField(LaunchForm.SETSSLMON).setEnabled(false);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_KEYSTORE).setEnabled(false);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_PASSWORD).setEnabled(false);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_KEYPASSWORD).setEnabled(false);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_TRUSTSTORE).setEnabled(false);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_TRUSTSTORE_PASSWORD).setEnabled(false);
            dialog.getFormField(LaunchForm.SSLTUNNEL_REUSESTATE).setEnabled(false);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_KEYSTOREPATH).setEnabled(false);
            dialog.getFormField(LaunchForm.SET_CONTENT_TYPES).setEnabled(true);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_KEYSTOREPASSWORD).setEnabled(false);

            dialog.getFormField(LaunchForm.SETASPROXY).setEnabled(true);
            dialog.getFormField(LaunchForm.REQUEST_WSS).setEnabled(true);
            dialog.getFormField(LaunchForm.RESPONSE_WSS).setEnabled(true);
        } else {
            dialog.getFormField(LaunchForm.SETSSLMON).setEnabled(true);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_KEYSTORE).setEnabled(true);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_PASSWORD).setEnabled(true);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_KEYPASSWORD).setEnabled(true);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_TRUSTSTORE).setEnabled(true);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_TRUSTSTORE_PASSWORD).setEnabled(true);
            dialog.getFormField(LaunchForm.SSLTUNNEL_REUSESTATE).setEnabled(true);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_KEYSTOREPATH).setEnabled(true);
            dialog.getFormField(LaunchForm.SET_CONTENT_TYPES).setEnabled(true);
            dialog.getFormField(SecurityTabForm.SSLTUNNEL_KEYSTOREPASSWORD).setEnabled(true);

            dialog.getFormField(LaunchForm.SETASPROXY).setEnabled(false);
            dialog.getFormField(LaunchForm.REQUEST_WSS).setEnabled(false);
            dialog.getFormField(LaunchForm.RESPONSE_WSS).setEnabled(false);
        }
    }

    @AForm(description = "Specify HTTP Monitor settings", name = "General Options", helpUrl = HelpUrls.SOAPMONITOR_GENERAL_OPTIONS, icon = UISupport.TOOL_ICON_PATH)
    private interface WizardForm {
        @APage(name = "General")
        public final static LaunchForm general = null;

        @APage(name = "Security")
        public final static SecurityTabForm security = null;
    }

    @AForm(description = "Specify HTTP Monitor settings", name = "Launch HTTP Monitor", helpUrl = HelpUrls.SOAPMONITOR_GENERAL_OPTIONS)
    public interface LaunchForm {
        @AField(description = "SSL tunnel or HTTP proxy", name = "Choose one:", type = AFieldType.RADIOGROUP)
        public final static String SSLORHTTP = "Choose one:";

        @AField(description = "The local port to listen on", name = "Port", type = AFieldType.INT)
        public final static String PORT = "Port";

        @AField(description = "The Incoming WSS configuration to use for processing requests", name = "Incoming Request WSS", type = AFieldType.ENUMERATION)
        public final static String REQUEST_WSS = "Incoming Request WSS";

        @AField(description = "The Outgoing WSS configuration to use for processing responses", name = "Incoming Response WSS", type = AFieldType.ENUMERATION)
        public final static String RESPONSE_WSS = "Incoming Response WSS";

        @AField(description = "Set as Global Proxy", name = "Set as Proxy", type = AFieldType.BOOLEAN)
        public final static String SETASPROXY = "Set as Proxy";

        @AField(description = "Set endpoint", name = "Set endpoint for HTTP Tunnel:", type = AFieldType.STRING)
        public final static String SETSSLMON = "Set endpoint for HTTP Tunnel:";

        @AField(description = "Keep request state", name = "Reuse request state", type = AFieldType.BOOLEAN)
        public final static String SSLTUNNEL_REUSESTATE = "Reuse request state";

        @AField(description = "Content types to monitor, if blank default types will be set!", name = "Content types to monitor", type = AFieldType.STRINGAREA)
        public final static String SET_CONTENT_TYPES = "Content types to monitor";

    }

    @AForm(description = "Specify HTTP tunnel security settings", name = "HTTP tunnel security", helpUrl = HelpUrls.SOAPMONITOR_GENERAL_OPTIONS)
    public interface SecurityTabForm {
        @AField(description = "Set SSL Tunnel KeyStore", name = "HTTP tunnel - KeyStore", type = AFieldType.FILE)
        public final static String SSLTUNNEL_KEYSTORE = "HTTP tunnel - KeyStore";

        @AField(description = "Set SSL Tunnel Password", name = "HTTP tunnel - Password", type = AFieldType.PASSWORD)
        public final static String SSLTUNNEL_PASSWORD = "HTTP tunnel - Password";

        @AField(description = "Set SSL Tunnel KeyPassword", name = "HTTP tunnel - KeyPassword", type = AFieldType.PASSWORD)
        public final static String SSLTUNNEL_KEYPASSWORD = "HTTP tunnel - KeyPassword";

        @AField(description = "Set SSL Tunnel TrustStore", name = "HTTP tunnel - TrustStore", type = AFieldType.FILE)
        public final static String SSLTUNNEL_TRUSTSTORE = "HTTP tunnel - TrustStore";

        @AField(description = "Set SSL Tunnel TrustStore Password", name = "HTTP tunnel - TrustStore Password", type = AFieldType.PASSWORD)
        public final static String SSLTUNNEL_TRUSTSTORE_PASSWORD = "HTTP tunnel - TrustStore Password";

        @AField(description = "Set SSL Client Key Store", name = "HTTP tunnel - Set SSL Client Key Store path", type = AFieldType.FILE)
        public final static String SSLTUNNEL_KEYSTOREPATH = "HTTP tunnel - Set SSL Client Key Store path";

        @AField(description = "Set SSL Client Key Store Password", name = "HTTP tunnel - Set SSL Client Key Store Password", type = AFieldType.PASSWORD)
        public final static String SSLTUNNEL_KEYSTOREPASSWORD = "HTTP tunnel - Set SSL Client Key Store Password";
    }

    protected class FullMonitorDialogHandler implements DialogHandler {


        private WsdlProject project;
        private XFormDialog dialog;

        public FullMonitorDialogHandler(WsdlProject project) {
            this.project = project;
        }

        @Override
        public XFormDialog buildDialog() {
            dialog = ADialogBuilder.buildTabbedDialog(WizardForm.class, null);
            dialog.setSize(650, 500);
            return dialog;
        }

        @Override
        public void setDialogValues(Settings settings) {
            dialog.setIntValue(LaunchForm.PORT, (int) settings.getLong(LaunchForm.PORT, 8081));
            dialog.setOptions(LaunchForm.REQUEST_WSS,
                    StringUtils.merge(project.getWssContainer().getIncomingWssNames(), "<none>"));
            dialog.setOptions(LaunchForm.RESPONSE_WSS,
                    StringUtils.merge(project.getWssContainer().getIncomingWssNames(), "<none>"));
            dialog.setValue(LaunchForm.SETSSLMON,
                    settings.getString(LaunchForm.SETSSLMON, "").length() > 0 ? settings.getString(LaunchForm.SETSSLMON, "")
                            : HTTPS_PROTOCOL);
            dialog.setOptions(LaunchForm.SSLORHTTP, new String[]{HTTP_TUNNEL, HTTP_PROXY});

            dialog.setValue(SecurityTabForm.SSLTUNNEL_KEYSTORE, settings.getString(SecurityTabForm.SSLTUNNEL_KEYSTORE, ""));
            dialog.setValue(SecurityTabForm.SSLTUNNEL_PASSWORD, settings.getString(SecurityTabForm.SSLTUNNEL_PASSWORD, ""));
            dialog.setValue(SecurityTabForm.SSLTUNNEL_KEYPASSWORD,
                    settings.getString(SecurityTabForm.SSLTUNNEL_KEYPASSWORD, ""));
            dialog.setValue(SecurityTabForm.SSLTUNNEL_TRUSTSTORE,
                    settings.getString(SecurityTabForm.SSLTUNNEL_TRUSTSTORE, ""));
            dialog.setValue(SecurityTabForm.SSLTUNNEL_TRUSTSTORE_PASSWORD,
                    settings.getString(SecurityTabForm.SSLTUNNEL_TRUSTSTORE_PASSWORD, ""));
            dialog.setBooleanValue(LaunchForm.SSLTUNNEL_REUSESTATE, settings.getBoolean(LaunchForm.SSLTUNNEL_REUSESTATE));
            dialog.setValue(LaunchForm.SET_CONTENT_TYPES,
                    settings.getString(LaunchForm.SET_CONTENT_TYPES, defaultContentTypes().toString()));
            dialog.setValue(SecurityTabForm.SSLTUNNEL_KEYSTOREPATH,
                    settings.getString(SecurityTabForm.SSLTUNNEL_KEYSTOREPATH, ""));
            dialog.setValue(SecurityTabForm.SSLTUNNEL_KEYSTOREPASSWORD,
                    settings.getString(SecurityTabForm.SSLTUNNEL_KEYSTOREPASSWORD, ""));

            XFormField sslOrHttp = dialog.getFormField(LaunchForm.SSLORHTTP);
            sslOrHttp.setValue(HTTP_PROXY);
            setDialogState(dialog, HTTP_PROXY);
            sslOrHttp.addFormFieldListener(new XFormFieldListener() {

                public void valueChanged(XFormField sourceField, String newValue, String oldValue) {
                    setDialogState(dialog, newValue);
                }

            });
        }

        @Override
        public void saveDialogValues(Settings settings) {
            int listenPort = dialog.getIntValue(LaunchForm.PORT, 8080);
            settings.setLong(LaunchForm.PORT, listenPort);

            settings.setString(LaunchForm.SETSSLMON, dialog.getValue(LaunchForm.SETSSLMON));

            settings.setString(SecurityTabForm.SSLTUNNEL_KEYSTORE,
                    dialog.getValue(SecurityTabForm.SSLTUNNEL_KEYSTORE));
            settings.setString(SecurityTabForm.SSLTUNNEL_PASSWORD,
                    dialog.getValue(SecurityTabForm.SSLTUNNEL_PASSWORD));
            settings.setString(SecurityTabForm.SSLTUNNEL_KEYPASSWORD,
                    dialog.getValue(SecurityTabForm.SSLTUNNEL_KEYPASSWORD));
            settings.setString(SecurityTabForm.SSLTUNNEL_TRUSTSTORE,
                    dialog.getValue(SecurityTabForm.SSLTUNNEL_TRUSTSTORE));
            settings.setString(SecurityTabForm.SSLTUNNEL_TRUSTSTORE_PASSWORD,
                    dialog.getValue(SecurityTabForm.SSLTUNNEL_TRUSTSTORE_PASSWORD));
            settings.setString(LaunchForm.SSLTUNNEL_REUSESTATE, dialog.getValue(LaunchForm.SSLTUNNEL_REUSESTATE));
            settings.setString(SecurityTabForm.SSLTUNNEL_KEYSTOREPATH,
                    dialog.getValue(SecurityTabForm.SSLTUNNEL_KEYSTOREPATH));
            if (dialog.getValue(LaunchForm.SET_CONTENT_TYPES) != null
                    && dialog.getValue(LaunchForm.SET_CONTENT_TYPES).trim().equals("")) {
                settings.setString(LaunchForm.SET_CONTENT_TYPES, defaultContentTypes().toString());
            } else {
                settings.setString(LaunchForm.SET_CONTENT_TYPES, dialog.getValue(LaunchForm.SET_CONTENT_TYPES));
            }

            settings.setString(SecurityTabForm.SSLTUNNEL_KEYSTOREPASSWORD,
                    dialog.getValue(SecurityTabForm.SSLTUNNEL_KEYSTOREPASSWORD));
        }

        @Override
        public SoapMonitor createSoapMonitor() {
            int listenPort = dialog.getIntValue(LaunchForm.PORT, 8080);
            if (HTTP_PROXY.equals(dialog.getValue(LaunchForm.SSLORHTTP))) {
                return openSoapMonitor(project, listenPort, dialog.getValue(LaunchForm.REQUEST_WSS),
                        dialog.getValue(LaunchForm.RESPONSE_WSS), dialog.getBooleanValue(LaunchForm.SETASPROXY), null);
            } else {
                return openSoapMonitor(project, listenPort, dialog.getValue(LaunchForm.REQUEST_WSS),
                        dialog.getValue(LaunchForm.RESPONSE_WSS), false,
                        dialog.getValue(LaunchForm.SETSSLMON));
            }
        }


    }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.actions.monitor.SoapMonitorAction$WizardForm

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.