org.ebayopensource.turmeric.eclipse.soatools.configtool.ConfigTool.java Source code

Java tutorial

Introduction

Here is the source code for org.ebayopensource.turmeric.eclipse.soatools.configtool.ConfigTool.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *******************************************************************************/
package org.ebayopensource.turmeric.eclipse.soatools.configtool;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.ebayopensource.turmeric.common.config.ClientConfig;
import org.ebayopensource.turmeric.common.config.ClientConfigList;
import org.ebayopensource.turmeric.common.config.ClientGroupConfig;
import org.ebayopensource.turmeric.common.config.ServiceConfig;
import org.ebayopensource.turmeric.tools.codegen.CodeGenInfoFinder;
import org.ebayopensource.turmeric.tools.codegen.ConfigHelper;
import org.ebayopensource.turmeric.tools.codegen.exception.BadInputValueException;
import org.ebayopensource.turmeric.tools.codegen.exception.CodeGenFailedException;
import org.ebayopensource.turmeric.tools.codegen.external.WSDLUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;

/**
 * The Class ConfigTool.
 */
public class ConfigTool {

    /**
     * Modify service config namespace.
     *
     * @param newNamespace the new namespace
     * @param fileLocation the file location
     * @throws Exception the exception
     */
    public static void modifyServiceConfigNamespace(final String newNamespace, final URL fileLocation)
            throws Exception {
        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
        InputStream input = null;
        OutputStream out = null;
        try {
            Thread.currentThread().setContextClassLoader(ConfigTool.class.getClassLoader());
            if (fileLocation != null) {
                input = fileLocation.openStream();
                final ServiceConfig svcConfig = ConfigHelper.parseServiceConfig(input);
                IOUtils.closeQuietly(input);
                input = null;
                String fullServiceName = svcConfig.getServiceName();

                if (StringUtils.isNotBlank(fullServiceName)) {
                    final String[] names = parseFullyQualifiedServiceName(fullServiceName);
                    if (names != null) {
                        fullServiceName = "{" + newNamespace + "}" + names[1];
                    }
                    svcConfig.setServiceName(fullServiceName);
                    final String configXml = ConfigHelper.serviceConfigToXml(svcConfig);
                    out = new FileOutputStream(fileLocation.getFile());
                    IOUtils.write(configXml, out);
                }
            }
        } finally {
            IOUtils.closeQuietly(input);
            IOUtils.closeQuietly(out);
            Thread.currentThread().setContextClassLoader(loader);
        }
    }

    /**
     * Save server config.
     *
     * @param serviceConfig the service config
     * @param fileLocation the file location
     * @throws Exception the exception
     * @deprecated plugin should never modify the ServiceConfig.xml
     */
    public static void saveServerConfig(final ISOAServiceConfig serviceConfig, final IFile fileLocation)
            throws Exception {
        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
        InputStream input = null;
        OutputStream out = null;
        try {
            Thread.currentThread().setContextClassLoader(ConfigTool.class.getClassLoader());
            if (fileLocation != null) {
                input = fileLocation.getLocationURI().toURL().openStream();
                ServiceConfigXmlHelper svcConfigXMLHelper = new ServiceConfigXmlHelper();
                svcConfigXMLHelper.setServiceImplementationName(input, serviceConfig.getServiceImplClassName(),
                        fileLocation);
                //we are no longer modifying the current version, and the version would be maintained 
                //in the service_metadata.properties
                //svcConfig.setCurrentVersion(serviceConfig.getCurrentVersion());
                // svcConfig.setServiceImplClassName(serviceConfig.getServiceImplClassName());
                // final String configXml =
                // ConfigHelper.serviceConfigToXml(svcConfig);
                // out = new FileOutputStream(fileLocation.getFile());
                // IOUtils.write(configXml, out);
            }

        } finally {
            IOUtils.closeQuietly(input);
            IOUtils.closeQuietly(out);
            Thread.currentThread().setContextClassLoader(loader);
        }
    }

    /**
     * Modify client config namespace.
     *
     * @param newNamespace the new namespace
     * @param fileLocation the file location
     * @throws Exception the exception
     */
    public static void modifyClientConfigNamespace(final String newNamespace, final URL fileLocation)
            throws Exception {
        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
        InputStream input = null;
        OutputStream out = null;
        try {
            Thread.currentThread().setContextClassLoader(ConfigTool.class.getClassLoader());
            if (fileLocation != null) {
                input = fileLocation.openStream();
                final ClientConfigList clientConfigList = ConfigHelper.parseClientConfig(input);
                IOUtils.closeQuietly(input);
                input = null;
                if (clientConfigList.getClientConfig().size() > 0) {
                    final ClientConfig clientConfig = clientConfigList.getClientConfig().get(0);
                    String fullServiceName = clientConfig.getServiceName();

                    if (StringUtils.isNotBlank(fullServiceName)) {
                        final String[] names = parseFullyQualifiedServiceName(fullServiceName);
                        if (names != null) {
                            fullServiceName = "{" + newNamespace + "}" + names[1];
                        }
                        clientConfig.setServiceName(fullServiceName);
                        final String configXml = ConfigHelper.clientConfigToXml(clientConfigList);
                        out = new FileOutputStream(fileLocation.getFile());
                        IOUtils.write(configXml, out);
                    }
                }
            }
        } finally {
            IOUtils.closeQuietly(input);
            IOUtils.closeQuietly(out);
            Thread.currentThread().setContextClassLoader(loader);
        }
    }

    /**
     * Parses the client config.
     *
     * @param input the input
     * @param clientConfig the client config
     * @return the iSOA client config
     * @throws Exception the exception
     */
    public static ISOAClientConfig parseClientConfig(final InputStream input, final ISOAClientConfig clientConfig)
            throws Exception {
        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
        try {
            Thread.currentThread().setContextClassLoader(ConfigTool.class.getClassLoader());
            List<ISOAClientConfig> result = new ArrayList<ISOAClientConfig>();
            for (final ClientConfig config : ConfigHelper.parseClientConfig(input).getClientConfig()) {
                clientConfig.setGroup(config.getGroup());
                clientConfig.setServiceInterfaceClassName(config.getServiceInterfaceClassName());
                clientConfig.setServiceLocation(config.getServiceLocation());
                clientConfig.setFullyQualifiedServiceName(config.getServiceName());
                if (StringUtils.isNotBlank(config.getServiceName())) {
                    final String[] names = parseFullyQualifiedServiceName(config.getServiceName());
                    if (names != null) {
                        clientConfig.setTargetNamespace(names[0]);
                        clientConfig.setServiceName(names[1]);
                    }
                }

                clientConfig.setWsdlLocation(config.getWsdlLocation());

                if (config.getClientInstanceConfig() != null) {
                    ClientGroupConfig instanceConfig = config.getClientInstanceConfig();
                    if (instanceConfig.getInvocationOptions() != null) {
                        clientConfig.setServiceBinding(
                                instanceConfig.getInvocationOptions().getPreferredTransport().getName());
                        clientConfig
                                .setInvocationUseCase(instanceConfig.getInvocationOptions().getInvocationUseCase());
                        clientConfig.setRequestDataBinding(
                                instanceConfig.getInvocationOptions().getRequestDataBinding());
                        clientConfig.setResponseDataBinding(
                                instanceConfig.getInvocationOptions().getResponseDataBinding());
                    }
                    if (instanceConfig.getProtocolProcessor() != null
                            && instanceConfig.getProtocolProcessor().size() > 0) {
                        clientConfig.setMessageProtocol(instanceConfig.getProtocolProcessor().get(0).getName());
                    }
                }
                result.add(clientConfig);
            }
            return result.get(0);
        } finally {
            IOUtils.closeQuietly(input);
            Thread.currentThread().setContextClassLoader(loader);
        }
    }

    /**
     * Parses the service config.
     *
     * @param input the input
     * @param serviceConfig the service config
     * @return the iSOA service config
     * @throws Exception the exception
     */
    public static ISOAServiceConfig parseServiceConfig(final InputStream input,
            final ISOAServiceConfig serviceConfig) throws Exception {
        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
        try {
            Thread.currentThread().setContextClassLoader(ConfigTool.class.getClassLoader());
            ServiceConfig config = new ServiceConfigXmlHelper().parseServiceConfig(input);
            serviceConfig.setFullyQualifiedServiceName(config.getServiceName());
            if (StringUtils.isNotBlank(config.getServiceName())) {
                String[] names = parseFullyQualifiedServiceName(config.getServiceName());
                if (names != null) {
                    serviceConfig.setTargetNamespace(names[0]);
                    serviceConfig.setServiceName(names[1]);
                }
            }
            serviceConfig.setServiceInterfaceClassName(StringUtils.trim(config.getServiceInterfaceClassName()));
            serviceConfig.setServiceImplClassName(StringUtils.trim(config.getServiceImplClassName()));
            return serviceConfig;
        } finally {
            Thread.currentThread().setContextClassLoader(loader);
            IOUtils.closeQuietly(input);
        }
    }

    /**
     * Client config to xml.
     *
     * @param clientCfgList the client cfg list
     * @return the string
     * @throws Exception the exception
     */
    public static String clientConfigToXml(final ClientConfigList clientCfgList) throws Exception {
        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
        try {
            Thread.currentThread().setContextClassLoader(ConfigTool.class.getClassLoader());
            return ConfigHelper.clientConfigToXml(clientCfgList);
        } finally {
            Thread.currentThread().setContextClassLoader(loader);
        }
    }

    /**
     * Service config to xml.
     *
     * @param config the config
     * @return the string
     * @throws Exception the exception
     */
    public static String serviceConfigToXml(final ServiceConfig config) throws Exception {
        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
        try {
            Thread.currentThread().setContextClassLoader(ConfigTool.class.getClassLoader());
            return ConfigHelper.serviceConfigToXml(config);
        } finally {
            Thread.currentThread().setContextClassLoader(loader);
        }
    }

    /**
     * Gets the service meta data path.
     *
     * @param serviceName the service name
     * @return the service meta data path
     * @throws BadInputValueException the bad input value exception
     */
    public static IPath getServiceMetaDataPath(final String serviceName) throws BadInputValueException {
        return new Path(CodeGenInfoFinder.getPathforNonModifiableArtifact(serviceName, "SERVICE_METADATA"));
    }

    /**
     * Gets the wSDL path.
     *
     * @param serviceName the service name
     * @return the wSDL path
     * @throws BadInputValueException the bad input value exception
     */
    public static IPath getWSDLPath(final String serviceName) throws BadInputValueException {
        return new Path(CodeGenInfoFinder.getPathforNonModifiableArtifact(serviceName, "WSDL"));
    }

    /**
     * Gets the default service layers from file.
     *
     * @return the default service layers from file
     */
    public static List<String> getDefaultServiceLayersFromFile() {
        try {
            return CodeGenInfoFinder.getServiceLayersFromDefaultFile();
        } catch (CodeGenFailedException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Gets the default package name from namespace.
     *
     * @param namespace the namespace
     * @return the default package name from namespace
     */
    public static String getDefaultPackageNameFromNamespace(final String namespace) {
        return WSDLUtil.getPackageFromNamespace(namespace);
    }

    /**
     * Gets the type package name from namespace.
     *
     * @param namespace the namespace
     * @param serviceName the service name
     * @return the type package name from namespace
     */
    public static String getTypePackageNameFromNamespace(final String namespace, final String serviceName) {
        final String defaultPkgName = getDefaultPackageNameFromNamespace(namespace);
        return new StringBuilder(defaultPkgName).append(".").append(StringUtils.lowerCase(serviceName)).toString();
    }

    /**
     * The Interface ISOAClientConfig.
     */
    public static interface ISOAClientConfig {

        /**
         * Sets the target namespace.
         *
         * @param targetNamespace the new target namespace
         */
        public void setTargetNamespace(String targetNamespace);

        /**
         * Sets the service name.
         *
         * @param serviceName the new service name
         */
        public void setServiceName(String serviceName);

        /**
         * Sets the fully qualified service name.
         *
         * @param fullyQualifiedServiceName the new fully qualified service name
         */
        public void setFullyQualifiedServiceName(String fullyQualifiedServiceName);

        /**
         * Sets the group.
         *
         * @param group the new group
         */
        public void setGroup(String group);

        /**
         * Sets the service interface class name.
         *
         * @param serviceInterfaceClassName the new service interface class name
         */
        public void setServiceInterfaceClassName(String serviceInterfaceClassName);

        /**
         * Sets the service location.
         *
         * @param serviceLocation the new service location
         */
        public void setServiceLocation(String serviceLocation);

        /**
         * Sets the wsdl location.
         *
         * @param wsdlLocation the new wsdl location
         */
        public void setWsdlLocation(String wsdlLocation);

        /**
         * Sets the service binding.
         *
         * @param serviceBinding the new service binding
         */
        public void setServiceBinding(String serviceBinding);

        /**
         * Sets the invocation use case.
         *
         * @param invocationUseCase the new invocation use case
         */
        public void setInvocationUseCase(String invocationUseCase);

        /**
         * Sets the request data binding.
         *
         * @param requestDataBinding the new request data binding
         */
        public void setRequestDataBinding(String requestDataBinding);

        /**
         * Sets the response data binding.
         *
         * @param responseDataBinding the new response data binding
         */
        public void setResponseDataBinding(String responseDataBinding);

        /**
         * Sets the consumer id.
         *
         * @param consumerId the new consumer id
         */
        public void setConsumerId(String consumerId);

        /**
         * Sets the message protocol.
         *
         * @param messageProtocol the new message protocol
         */
        public void setMessageProtocol(String messageProtocol);

    }

    /**
     * The Interface ISOAServiceConfig.
     */
    public static interface ISOAServiceConfig {
        //service config file will no longer have version
        /*public String getCurrentVersion();
        public void setCurrentVersion(String currentVersion);*/

        /**
         * Sets the supported version.
         *
         * @param supportedVersion the new supported version
         */
        public void setSupportedVersion(String supportedVersion);

        /**
         * Sets the group.
         *
         * @param group the new group
         */
        public void setGroup(String group);

        /**
         * Sets the target namespace.
         *
         * @param targetNamespace the new target namespace
         */
        public void setTargetNamespace(String targetNamespace);

        /**
         * Sets the service name.
         *
         * @param serviceName the new service name
         */
        public void setServiceName(String serviceName);

        /**
         * Sets the fully qualified service name.
         *
         * @param fullyQualifiedServiceName the new fully qualified service name
         */
        public void setFullyQualifiedServiceName(String fullyQualifiedServiceName);

        /**
         * Sets the service interface class name.
         *
         * @param serviceInterfaceClassName the new service interface class name
         */
        public void setServiceInterfaceClassName(String serviceInterfaceClassName);

        /**
         * Gets the service impl class name.
         *
         * @return the service impl class name
         */
        public String getServiceImplClassName();

        /**
         * Sets the service impl class name.
         *
         * @param serviceImplClassName the new service impl class name
         */
        public void setServiceImplClassName(String serviceImplClassName);

        /**
         * Gets the message protocol.
         *
         * @return the message protocol
         */
        public String getMessageProtocol();

        /**
         * Sets the message protocol.
         *
         * @param messageProtocol the new message protocol
         */
        public void setMessageProtocol(String messageProtocol);
    }

    /**
     * The main method.
     *
     * @param args the arguments
     */
    public static void main(String[] args) {
        System.out.println(getDefaultServiceLayersFromFile());
    }

    /**
     * Parses the fully qualified service name.
     *
     * @param serviceName the service name
     * @return The first value is the namespace and the second is the service name
     */
    public static String[] parseFullyQualifiedServiceName(final String serviceName) {
        if (StringUtils.isBlank(serviceName))
            throw new IllegalArgumentException("Service name must not be empty->" + serviceName);
        String[] result = new String[2];
        result[0] = StringUtils.substringBetween(serviceName, "{", "}");
        result[1] = StringUtils.substringAfter(serviceName, "}");
        return result;
    }
}