Package org.apache.tuscany.tools.java2wsdl.generate

Source Code of org.apache.tuscany.tools.java2wsdl.generate.GenerationParameters

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.tuscany.tools.java2wsdl.generate;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Map;

import org.apache.ws.java2wsdl.Java2WSDLUtils;
import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOption;

/**
* This class encapsulates the parameters that effect the generation of the WSDL. For example they contain all user settings such as source class,
* target location etc.
*
*/
public class GenerationParameters implements TuscanyJava2WSDLConstants {
    public static final String WSDL_FILENAME_SUFFIX = ".wsdl";

    public static final String XSD_IMPORT_DELIMITER = "[,]";

    private Map cmdLineOptions = null;

    private File outputFile = null;

    private FileOutputStream outputFileStream = null;

    private String sourceClassName = null;

    private ArrayList extraClasses;

    private ArrayList factoryClassNames;

    private String attrFormDefault = null;

    private String elementFormDefault = null;

    private String targetNamespace = null;

    private String targetNamespacePrefix = null;

    private String schemaTargetNamespace = null;

    private String schemaTargetNamespacePrefix = null;

    private String outputFileName = null;

    private ClassLoader classLoader = null;

    private String serviceName = null;

    private String style = DOCUMENT;

    private String use = LITERAL;

    private String locationUri = DEFAULT_LOCATION_URL;

    private Map schemaLocationMap = null;

    public GenerationParameters(Map cmdLineOptions) throws Exception {
        this.cmdLineOptions = cmdLineOptions;
        loadParameters();
    }

    protected void loadParameters() throws Exception {
        initializeSourceClassName();
        resolveFileOutputStream();
        resolveClassLoader4InputClasspath();
        loadSchemaLocationMap();
        initializeOtherParams();
    }

    private Java2WSDLCommandLineOption loadOption(String shortOption, String longOption) {
        // short option gets precedence
        Java2WSDLCommandLineOption option = null;
        if (longOption != null) {
            option = (Java2WSDLCommandLineOption) cmdLineOptions.get(longOption);
            if (option != null) {
                return option;
            }
        }
        if (shortOption != null) {
            option = (Java2WSDLCommandLineOption) cmdLineOptions.get(shortOption);
        }

        return option;
    }

    protected void initializeSourceClassName() throws Exception {
        Java2WSDLCommandLineOption option = loadOption(CLASSNAME_OPTION, CLASSNAME_OPTION_LONG);
        sourceClassName = option == null ? null : option.getOptionValue();

        if (sourceClassName == null || sourceClassName.equals("")) {
            throw new Exception("class name must be present!");
        }
    }

    /**
     * @throws Exception
     */
    protected void resolveFileOutputStream() throws Exception {
        File outputFolder;
        Java2WSDLCommandLineOption option = loadOption(OUTPUT_LOCATION_OPTION, OUTPUT_LOCATION_OPTION_LONG);
        String outputFolderName = option == null ? System.getProperty("user.dir") : option.getOptionValue();

        outputFolder = new File(outputFolderName);
        if (!outputFolder.exists()) {
            outputFolder.mkdirs();
        } else if (!outputFolder.isDirectory()) {
            throw new Exception("The specified location " + outputFolderName + "is not a folder");
        }

        option = loadOption(OUTPUT_FILENAME_OPTION, OUTPUT_FILENAME_OPTION_LONG);
        String outputFileName = option == null ? null : option.getOptionValue();
        // derive a file name from the class name if the filename is not specified
        if (outputFileName == null) {
            outputFileName = Java2WSDLUtils.getSimpleClassName(sourceClassName) + WSDL_FILENAME_SUFFIX;
        }

        // first create a file in the given location
        File outputFile = new File(outputFolder, outputFileName);
        try {
            if (!outputFile.exists()) {
                outputFile.createNewFile();
            }
            outputFileStream = new FileOutputStream(outputFile);
        } catch (IOException e) {
            throw new Exception(e);
        }
    }

    protected void addToSchemaLocationMap(String optionValue) throws Exception {
        // option value will be of the form [namespace, schemalocation]
        // hence we take the two substrings starting after '[' and upto ',' and
        // starting after ',' and upto ']'
        getSchemaLocationMap().put(optionValue.substring(1, optionValue.indexOf(COMMA)),
                optionValue.substring(optionValue.indexOf(COMMA) + 1, optionValue.length() - 1));
    }

    protected void loadSchemaLocationMap() throws Exception {
        Java2WSDLCommandLineOption option = loadOption(IMPORT_XSD_OPTION, IMPORT_XSD_OPTION_LONG);

        if (option != null) {
            ArrayList optionValues = option.getOptionValues();

            for (int count = 0; count < optionValues.size(); ++count) {
                addToSchemaLocationMap(((String) optionValues.get(count)).trim());
            }
        }
    }

    protected void resolveClassLoader4InputClasspath() throws Exception {
        URL[] urls = null;
        Java2WSDLCommandLineOption option = loadOption(CLASSPATH_OPTION, CLASSPATH_OPTION_LONG);

        if (option != null) {
            ArrayList optionValues = option.getOptionValues();
            urls = new URL[optionValues.size()];
            String[] classPathEntries = (String[]) optionValues.toArray(new String[optionValues.size()]);

            try {
                for (int i = 0; i < classPathEntries.length; i++) {
                    String classPathEntry = classPathEntries[i];
                    // this should be a file(or a URL)
                    if (Java2WSDLUtils.isURL(classPathEntry)) {
                        urls[i] = new URL(classPathEntry);
                    } else {
                        urls[i] = new File(classPathEntry).toURL();
                    }
                }
            } catch (MalformedURLException e) {
                throw new Exception(e);
            }

        } else {
            //Default to pwd
            urls = new URL[1];
            File pwd = new File(".");
            urls[0] = pwd.toURL();
        }

        classLoader = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
    }

    protected void initializeOtherParams() {
        // set the other parameters to the builder
        Java2WSDLCommandLineOption option =
            loadOption(SCHEMA_TARGET_NAMESPACE_OPTION, SCHEMA_TARGET_NAMESPACE_OPTION_LONG);
        schemaTargetNamespace = (option == null) ? null : option.getOptionValue();

        option = loadOption(SCHEMA_TARGET_NAMESPACE_PREFIX_OPTION, SCHEMA_TARGET_NAMESPACE_PREFIX_OPTION_LONG);
        schemaTargetNamespacePrefix = (option == null) ? null : option.getOptionValue();

        option = loadOption(TARGET_NAMESPACE_OPTION, TARGET_NAMESPACE_OPTION_LONG);
        targetNamespace = (option == null) ? null : option.getOptionValue();

        option = loadOption(TARGET_NAMESPACE_PREFIX_OPTION, TARGET_NAMESPACE_PREFIX_OPTION_LONG);
        targetNamespacePrefix = (option == null) ? null : option.getOptionValue();

        option = loadOption(SERVICE_NAME_OPTION, SERVICE_NAME_OPTION_LONG);
        serviceName = (option == null) ? Java2WSDLUtils.getSimpleClassName(sourceClassName) : option.getOptionValue();

        option = loadOption(STYLE_OPTION, STYLE_OPTION);
        style = (option == null) ? null : option.getOptionValue();

        option = loadOption(LOCATION_OPTION, LOCATION_OPTION);
        locationUri = (option == null) ? null : option.getOptionValue();

        option = loadOption(USE_OPTION, USE_OPTION);
        use = (option == null) ? null : option.getOptionValue();

        option = loadOption(ATTR_FORM_DEFAULT_OPTION, ATTR_FORM_DEFAULT_OPTION_LONG);
        attrFormDefault = (option == null) ? null : option.getOptionValue();

        option = loadOption(ELEMENT_FORM_DEFAULT_OPTION, ELEMENT_FORM_DEFAULT_OPTION_LONG);
        elementFormDefault = option == null ? null : option.getOptionValue();

        option = loadOption(TuscanyJava2WSDLConstants.EXTRA_CLASSES_DEFAULT_OPTION, TuscanyJava2WSDLConstants.EXTRA_CLASSES_DEFAULT_OPTION_LONG);
        extraClasses = option == null ? new ArrayList() : option.getOptionValues();

        option = loadOption(TuscanyJava2WSDLConstants.FACTORY_CLASSNAMES_OPTION, TuscanyJava2WSDLConstants.FACTORY_CLASSNAMES_OPTION_LONG);
        factoryClassNames = option == null ? new ArrayList() : option.getOptionValues();
    }

    public ClassLoader getClassLoader() {
        return classLoader;
    }

    public void setClassLoader(ClassLoader classLoader) {
        this.classLoader = classLoader;
    }

    public String getLocationUri() {
        if (locationUri == null) {
            locationUri = DEFAULT_LOCATION_URL;
        }
        return locationUri;
    }

    public void setLocationUri(String locationUri) {
        this.locationUri = locationUri;
    }

    public FileOutputStream getOutputFileStream() {
        return outputFileStream;
    }

    public void setOutputFileStream(FileOutputStream outputFileStream) {
        this.outputFileStream = outputFileStream;
    }

    public String getSchemaTargetNamespace() throws Exception {
        if (schemaTargetNamespace == null || schemaTargetNamespace.trim().equals("")) {
            // This amounts to assuming we want the wrapper elements in the same TNS
            // as the WSDL definitions.
            //
            // If the user neither specifies a TNS nor a SchemaTNS then both of these two
            // will continue to default to the same NS calculated from the input class' package name.
            //
            // The wrapper elements aren't really interesting outside the context of the WSDL types
            // section, so it seems reasonable to think that a user who cares to select a non-default
            // TNS for the WSDL definitions might want the wrapper elements defined in that same
            // NS.
            //
            // The user can always override this default.

            this.schemaTargetNamespace = this.getTargetNamespace();
        }
        return schemaTargetNamespace;
    }

    public void setSchemaTargetNamespace(String schemaTargetNamespace) {
        this.schemaTargetNamespace = schemaTargetNamespace;
    }

    public String getSchemaTargetNamespacePrefix() {
        if (schemaTargetNamespacePrefix == null || schemaTargetNamespacePrefix.trim().equals("")) {
            this.schemaTargetNamespacePrefix = SCHEMA_NAMESPACE_PRFIX;
        }

        return schemaTargetNamespacePrefix;
    }

    public void setSchemaTargetNamespacePrefix(String schemaTargetNamespacePrefix) {
        this.schemaTargetNamespacePrefix = schemaTargetNamespacePrefix;
    }

    public String getServiceName() {
        if (serviceName == null) {
            serviceName = Java2WSDLUtils.getSimpleClassName(getSourceClassName());
        }
        return serviceName;
    }

    public void setServiceName(String serviceName) {
        this.serviceName = serviceName;
    }

    public String getSourceClassName() {
        return sourceClassName;
    }

    public void setSourceClassName(String sourceClassName) {
        this.sourceClassName = sourceClassName;
    }

    public String getStyle() {
        if (style == null) {
            style = DOCUMENT;
        }
        return style;
    }

    public void setStyle(String style) {
        this.style = style;
    }

    public String getTargetNamespace() throws Exception {
        if (targetNamespace == null) {
            targetNamespace = Java2WSDLUtils.namespaceFromClassName(this.sourceClassName, this.classLoader).toString();
        }
        return targetNamespace;
    }

    public void setTargetNamespace(String targetNamespace) {
        this.targetNamespace = targetNamespace;
    }

    public String getTargetNamespacePrefix() {
        return targetNamespacePrefix;
    }

    public void setTargetNamespacePrefix(String targetNamespacePrefix) {
        this.targetNamespacePrefix = targetNamespacePrefix;
    }

    public String getUse() {
        if (use == null) {
            use = LITERAL;
        }
        return use;
    }

    public void setUse(String use) {
        this.use = use;
    }

    public Map getSchemaLocationMap() {
        if (schemaLocationMap == null) {
            schemaLocationMap = new Hashtable();
        }
        return schemaLocationMap;
    }

    public void setSchemaLocationMap(Map schemaLocationMap) {
        this.schemaLocationMap = schemaLocationMap;
    }

    public String getAttrFormDefault() {
        if (attrFormDefault == null) {
            attrFormDefault = FORM_DEFAULT_UNQUALIFIED;
        }
        return attrFormDefault;
    }

    public void setAttrFormDefault(String attrFormDefault) {
        this.attrFormDefault = attrFormDefault;
    }

    public String getElementFormDefault() {
        if (elementFormDefault == null) {
            elementFormDefault = FORM_DEFAULT_QUALIFIED;
        }
        return elementFormDefault;
    }

    public void setElementFormDefault(String elementFormDefault) {
        this.elementFormDefault = elementFormDefault;
    }

    public ArrayList getExtraClasses() {
        return extraClasses;
    }

    public void setExtraClasses(ArrayList extraClasses) {
        this.extraClasses = extraClasses;
    }

    public ArrayList getFactoryClassNames() {
        return factoryClassNames;
    }

    public void setFactoryClassNames(ArrayList factoryClassNames) {
        this.factoryClassNames = factoryClassNames;
    }

    // Not a command-line parameter, but will be useful for printing status message
    protected File getOutputFile() {
        return outputFile;
    }
}
TOP

Related Classes of org.apache.tuscany.tools.java2wsdl.generate.GenerationParameters

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.