diff options
Diffstat (limited to 'sca-java-1.x/tags/1.6.1-RC2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/GenerationParameters.java')
-rw-r--r-- | sca-java-1.x/tags/1.6.1-RC2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/GenerationParameters.java | 423 |
1 files changed, 423 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/1.6.1-RC2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/GenerationParameters.java b/sca-java-1.x/tags/1.6.1-RC2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/GenerationParameters.java new file mode 100644 index 0000000000..60afe70534 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1-RC2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/GenerationParameters.java @@ -0,0 +1,423 @@ +/* + * 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.axis2.description.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; + } +} |