Package com.eviware.soapui.support.resolver

Source Code of com.eviware.soapui.support.resolver.ImportInterfaceResolver

/*
* 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.support.resolver;

import com.eviware.soapui.impl.WsdlInterfaceFactory;
import com.eviware.soapui.impl.rest.RestService;
import com.eviware.soapui.impl.rest.RestServiceFactory;
import com.eviware.soapui.impl.rest.support.WadlImporter;
import com.eviware.soapui.impl.support.definition.support.InvalidDefinitionException;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStepInterface;
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestStep;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.model.propertyexpansion.resolvers.providers.ProjectDirProvider;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.resolver.ResolveContext.Resolver;

import javax.swing.JOptionPane;
import java.io.File;

public abstract class ImportInterfaceResolver implements Resolver {
    private boolean resolved = false;
    private WsdlTestStep item;

    public ImportInterfaceResolver(WsdlTestStep item) {
        this.item = item;
    }

    public String getResolvedPath() {
        return "";
    }

    public boolean isResolved() {
        return resolved;
    }

    public boolean resolve() {
        String[] options = {"File(Wsdl)", "Url(Wsdl)", "File(Wadl)", "Url(Wadl)", "Cancel"};
        int choosed = JOptionPane
                .showOptionDialog(UISupport.getMainFrame(), "Choose source for new interface from ...",
                        "New interface source", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                        options, null);
        switch (choosed) {
            case 0:
                loadWsdlFromFile();
                resolved = update();
                break;
            case 1:
                loadWsdlFromUrl();
                resolved = update();
                break;
            case 2:
                loadWadlFromFile();
                resolved = update();
                break;
            case 3:
                loadWadlFromUrl();
                resolved = update();
                break;
            default:
                resolved = false;
                break;
        }

        return resolved;
    }

    private void loadWadlFromUrl() {
        WsdlProject project = item.getTestCase().getTestSuite().getProject();
        String url = UISupport.prompt("Enter WADL URL", "Add WADL from URL", "");
        if (url == null) {
            return;
        }

        importWadl(project, url);

    }

    private void loadWadlFromFile() {
        WsdlProject project = item.getTestCase().getTestSuite().getProject();
        File file = UISupport.getFileDialogs().open(this, "Select WADL file", ".wadl", "WADL Files (*.wadl)",
                ProjectDirProvider.getProjectFolder(project));
        if (file == null) {
            return;
        }

        String path = file.getAbsolutePath();
        if (path == null) {
            return;
        }

        importWadl(project, "file:/" + path);
    }

    private void importWadl(WsdlProject project, String path) {
        RestService restService = (RestService) project.addNewInterface(((RestTestRequestStepInterface) item)
                .getRequestStepConfig().getService(), RestServiceFactory.REST_TYPE);
        try {
            new WadlImporter(restService).initFromWadl(path);
        } catch (Exception e) {
            UISupport.showErrorMessage(e);
        }
    }

    protected abstract boolean update();

    private void loadWsdlFromUrl() {
        WsdlProject project = item.getTestCase().getTestSuite().getProject();
        String url = UISupport.prompt("Enter WSDL URL", "Add WSDL from URL", "");
        if (url == null) {
            return;
        }

        importWsdl(project, url);
    }

    private void loadWsdlFromFile() {

        WsdlProject project = item.getTestCase().getTestSuite().getProject();
        File file = UISupport.getFileDialogs().open(this, "Select WSDL file", ".wsdl", "WSDL Files (*.wsdl)",
                ProjectDirProvider.getProjectFolder(project));
        if (file == null) {
            return;
        }

        String path = file.getAbsolutePath();
        if (path == null) {
            return;
        }

        importWsdl(project, file.getAbsolutePath());
    }

    private void importWsdl(WsdlProject project, String file) {
        try {
            Boolean createRequests = UISupport.confirmOrCancel("Create default requests for all operations",
                    "Import WSDL");
            if (createRequests == null) {
                return;
            }

            Interface[] ifaces = WsdlInterfaceFactory.importWsdl(project, file, createRequests);
            if (ifaces.length > 0) {
                UISupport.select(ifaces[0]);
            }
        } catch (InvalidDefinitionException ex) {
            UISupport.showExtendedInfo("Error loading WSDL",
                    "There was something wrong with the WSDL you are trying to import", ex.getDetailedMessage(), null);
        } catch (Exception ex) {
            UISupport.showErrorMessage(ex.getMessage() + ":" + ex.getCause());
        }
    }

    public String getDescription() {
        return "Resolve: Import interface";
    }

    @Override
    public String toString() {
        return getDescription();
    }
}
TOP

Related Classes of com.eviware.soapui.support.resolver.ImportInterfaceResolver

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.