| /* |
| * 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.axis2.wsdl.util; |
| |
| import org.apache.axis2.wsdl.i18n.CodegenMessages; |
| |
| import java.io.FileInputStream; |
| import java.io.FileNotFoundException; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.net.URL; |
| import java.util.Arrays; |
| import java.util.Enumeration; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Properties; |
| |
| /** Loads the properties from the config properties. */ |
| public class ConfigPropertyFileLoader { |
| |
| |
| private static Map dbSupporterTemplateNameMap; |
| private static String testObjectTemplateName; |
| private static String srcFolderName; |
| private static String resourceFolderName; |
| private static String[] extensionClassNames; |
| private static String[] postExtensionClassNames; |
| private static String[] thirdPartySchemaNames; |
| private static String[] languageTypes; |
| private static String[] databindingFrameworkNames; |
| private static String[] unwrapSuppoerteddatabindingFrameworkNames; |
| private static String[] unwrapDirectdatabindingFrameworkNames; |
| |
| private static Map languageEmitterMap; |
| private static Map languageSpecificPropertiesMap; |
| private static Map databindingFrameworkNameToExtensionMap; |
| |
| private static String defaultLanguage; |
| private static String defaultDBFrameworkName; |
| |
| |
| private static final String CODE_GEN_KEY_PREFIX = "codegen.extension"; |
| private static final String POST_CODE_GEN_KEY_PREFIX = "post.codegen.extension"; |
| private static final String THIRD_PARTY_SCHEMA_KEY_PREFIX = "codegen.thirdparty.schema"; |
| private static final String LANGUAGE_TYPE_KEY_PREFIX = "codegen.languages"; |
| private static final String DEFAULT_LANGUAGE_TYPE_KEY = "codegen.languages.default"; |
| private static final String EMITTER_CLASS_KEY = "codegen.emitters"; |
| private static final String DATA_BINDING_FRAMEWORK_NAME_KEY = "codegen.databinding.frameworks"; |
| private static final String DATA_BINDING_UNWRAP_SUPPORTED_FRAMEWORK_NAME_KEY = |
| "codegen.databinding.unwrap.supported"; |
| private static final String DATA_BINDING_UNWRAP_DIRECT_FRAMEWORK_NAME_KEY = |
| "codegen.databinding.unwrap.direct"; |
| private static final String DATA_BINDING_FRAMEWORK_DEFAULT_NAME_KEY = |
| "codegen.databinding.frameworks.default"; |
| private static final String DATA_BINDING_FRAMEWORK_EXTENSION_NAME_KEY = |
| "codegen.databinding.extensions"; |
| private static final String DATA_BINDING_TEMPLATE_NAME_KEY_PREFIX = "codegen.databinding."; |
| private static final String DATA_BINDING_TEMPLATE_NAME_KEY_SUFFIX = "template"; |
| private static final String DATA_BINDING_TEST_OBJECT_TEMPLATE_NAME_KEY = |
| "codegen.databinding.testobject.template"; |
| private static final String SOURCE_FOLDER_NAME_KEY = "codegen.general.src.name"; |
| private static final String RESOURCE_FOLDER_NAME_KEY = "codegen.general.resource.name"; |
| |
| |
| public static final String DEFAULT_CODEGEN_CONFIG_PROPERTIES = |
| "/org/apache/axis2/wsdl/codegen/codegen-config.properties"; |
| |
| /* Note - Should be a non regular expression character. If not it should be properly escaped */ |
| private static final String SEPARATOR_CHAR = ","; |
| |
| /** |
| * Loads a stream from the given |
| * |
| * @param propertiesReference |
| * @throws FileNotFoundException |
| */ |
| private static InputStream getStream(String propertiesReference) throws FileNotFoundException { |
| InputStream stream = |
| ConfigPropertyFileLoader.class.getResourceAsStream(propertiesReference); |
| if (stream == null) { |
| URL url = ConfigPropertyFileLoader.class.getResource(propertiesReference); |
| stream = new FileInputStream(url.toString()); |
| } |
| return stream; |
| } |
| |
| static { |
| loadAllProperties(); |
| } |
| |
| public static void reload() { |
| reset(); |
| loadAllProperties(); |
| } |
| |
| private static void reset() { |
| dbSupporterTemplateNameMap = new HashMap(); |
| testObjectTemplateName = null; |
| extensionClassNames = null; |
| thirdPartySchemaNames = null; |
| languageTypes = null; |
| databindingFrameworkNames = null; |
| languageEmitterMap = null; |
| languageSpecificPropertiesMap = null; |
| databindingFrameworkNameToExtensionMap = null; |
| defaultLanguage = null; |
| defaultDBFrameworkName = null; |
| srcFolderName = null; |
| resourceFolderName = null; |
| |
| } |
| |
| private static void loadAllProperties() { |
| try { |
| //look for the system property "org.apache.axis2.codegen.config" to for a property |
| //entry refering to the config properties |
| String property = System.getProperty("org.apache.axis2.codegen.config"); |
| InputStream stream; |
| |
| if (property != null) { |
| stream = getStream(property); |
| } else { |
| stream = getStream(DEFAULT_CODEGEN_CONFIG_PROPERTIES); |
| } |
| |
| if (stream == null) { |
| throw new RuntimeException( |
| CodegenMessages.getMessage("propfileload.generalException")); |
| } |
| |
| Properties props = new Properties(); |
| props.load(stream); |
| |
| //create a new map for the lang specific properties |
| languageSpecificPropertiesMap = new HashMap(); |
| |
| //create a new map for the databinding frameworks and their extensions |
| databindingFrameworkNameToExtensionMap = new HashMap(); |
| |
| //load the extension class names |
| String tempString = props.getProperty(CODE_GEN_KEY_PREFIX); |
| if (tempString != null) { |
| extensionClassNames = tempString.split(SEPARATOR_CHAR); |
| |
| } |
| |
| //load the post extension class names |
| tempString = props.getProperty(POST_CODE_GEN_KEY_PREFIX); |
| if (tempString != null) { |
| postExtensionClassNames = tempString.split(SEPARATOR_CHAR); |
| |
| } |
| //load the data binding framework names |
| tempString = props.getProperty(DATA_BINDING_FRAMEWORK_NAME_KEY); |
| if (tempString != null) { |
| databindingFrameworkNames = tempString.split(SEPARATOR_CHAR); |
| } |
| |
| //load the unwrap supported data binding framework names |
| tempString = props.getProperty(DATA_BINDING_UNWRAP_SUPPORTED_FRAMEWORK_NAME_KEY); |
| if (tempString != null) { |
| unwrapSuppoerteddatabindingFrameworkNames = tempString.split(SEPARATOR_CHAR); |
| } |
| |
| //load the unwrap supported data binding framework names |
| tempString = props.getProperty(DATA_BINDING_UNWRAP_DIRECT_FRAMEWORK_NAME_KEY); |
| if (tempString != null) { |
| unwrapDirectdatabindingFrameworkNames = tempString.split(SEPARATOR_CHAR); |
| } |
| |
| //load the source folder |
| tempString = props.getProperty(SOURCE_FOLDER_NAME_KEY); |
| if (tempString != null) { |
| srcFolderName = tempString; |
| } |
| |
| //load the resource folder name |
| tempString = props.getProperty(RESOURCE_FOLDER_NAME_KEY); |
| if (tempString != null) { |
| resourceFolderName = tempString; |
| } |
| |
| //populate the data binding framework name to extension name map |
| tempString = props.getProperty(DATA_BINDING_FRAMEWORK_EXTENSION_NAME_KEY); |
| if (tempString != null) { |
| String[] frameworkExtensionNames = tempString.split(SEPARATOR_CHAR); |
| |
| try { |
| for (int i = 0; i < frameworkExtensionNames.length; i++) { |
| databindingFrameworkNameToExtensionMap |
| .put(databindingFrameworkNames[i], frameworkExtensionNames[i]); |
| } |
| } catch (ArrayIndexOutOfBoundsException e) { |
| throw new Exception( |
| CodegenMessages.getMessage("propfileload.frameworkMismatch")); |
| } |
| |
| } |
| |
| //load the default framework name |
| tempString = props.getProperty(DATA_BINDING_FRAMEWORK_DEFAULT_NAME_KEY); |
| |
| if (tempString == null || |
| !databindingFrameworkNameToExtensionMap.containsKey(tempString)) { |
| throw new Exception(CodegenMessages.getMessage("propfileload.unknownFramework")); |
| } |
| defaultDBFrameworkName = tempString; |
| //load the third party schema names |
| tempString = props.getProperty(THIRD_PARTY_SCHEMA_KEY_PREFIX); |
| if (tempString != null) { |
| thirdPartySchemaNames = tempString.split(SEPARATOR_CHAR); |
| |
| } |
| |
| //populate the db supporter template names. |
| dbSupporterTemplateNameMap = new HashMap(); |
| String key; |
| for (Iterator allProperties = props.keySet().iterator(); |
| allProperties.hasNext();) { |
| key = (String)allProperties.next(); |
| if (key.startsWith(DATA_BINDING_TEMPLATE_NAME_KEY_PREFIX) && |
| key.endsWith(DATA_BINDING_TEMPLATE_NAME_KEY_SUFFIX)) { |
| dbSupporterTemplateNameMap.put(key, |
| props.getProperty(key)); |
| } |
| |
| } |
| |
| testObjectTemplateName = props.getProperty(DATA_BINDING_TEST_OBJECT_TEMPLATE_NAME_KEY); |
| |
| //load the language names |
| tempString = props.getProperty(LANGUAGE_TYPE_KEY_PREFIX); |
| if (tempString != null) { |
| languageTypes = tempString.split(SEPARATOR_CHAR); |
| |
| //load the language emitter map |
| tempString = props.getProperty(EMITTER_CLASS_KEY); |
| if (tempString == null) { |
| throw new Exception(CodegenMessages.getMessage("propfileload.emitterMissing")); |
| } else { |
| String[] tempClassNames = tempString.split(SEPARATOR_CHAR); |
| //populate the map |
| languageEmitterMap = new HashMap(); |
| for (int i = 0; i < tempClassNames.length; i++) { |
| languageEmitterMap.put(languageTypes[i], tempClassNames[i]); |
| } |
| |
| } |
| } |
| |
| // load the default language |
| tempString = props.getProperty(DEFAULT_LANGUAGE_TYPE_KEY); |
| if (null == tempString || !languageEmitterMap.containsKey(tempString)) { |
| throw new Exception(CodegenMessages.getMessage("propfileload.unknownDefaultLang")); |
| } |
| defaultLanguage = tempString; |
| |
| // run through the language specific properties and populate the |
| // language specific property map |
| // |
| String languageType; |
| String tempkey; |
| HashMap langSpecificMap; |
| for (int i = 0; i < languageTypes.length; i++) { |
| languageType = languageTypes[i]; |
| langSpecificMap = new HashMap(); |
| Enumeration keyEnum = props.keys(); |
| while (keyEnum.hasMoreElements()) { |
| tempkey = keyEnum.nextElement().toString(); |
| if (tempkey.startsWith(languageType + ".")) { |
| langSpecificMap.put(tempkey, props.get(tempkey)); |
| } |
| } |
| //now add this to the lang specific properties map |
| languageSpecificPropertiesMap.put(languageType, langSpecificMap); |
| } |
| |
| |
| } catch (IOException e) { |
| throw new RuntimeException(e); |
| } catch (Exception e) { |
| throw new RuntimeException(CodegenMessages.getMessage("propfileload.generalException"), |
| e); |
| } |
| } |
| |
| /** @return the source folder name */ |
| public static String getResourceFolderName() { |
| return resourceFolderName; |
| } |
| |
| |
| /** @return the resource folder name */ |
| public static String getSrcFolderName() { |
| return srcFolderName; |
| } |
| |
| /** |
| * Gets the test object support template. This is used in the generated test class. |
| * |
| * @return Returns String. |
| */ |
| public static String getTestObjectTemplateName() { |
| return testObjectTemplateName; |
| } |
| |
| /** |
| * Gets the databinder template names. This is the template that has the logic for creating the |
| * databind supporters. |
| * |
| * @return Returns String. |
| */ |
| public static Map getDbSupporterTemplatesMap() { |
| return dbSupporterTemplateNameMap; |
| } |
| |
| /** |
| * Gets the extension class names. |
| * |
| * @return Returns String[]. |
| */ |
| public static String[] getExtensionClassNames() { |
| return extensionClassNames; |
| } |
| |
| /** |
| * get the post extension class names |
| * |
| * @return Returns String[]. |
| */ |
| public static String[] getPostExtensionClassNames() { |
| return postExtensionClassNames; |
| } |
| |
| /** |
| * Gets the third party schema names list. |
| * |
| * @return Returns String[]. |
| */ |
| public static String[] getThirdPartySchemaNames() { |
| return thirdPartySchemaNames; |
| } |
| |
| /** |
| * Gets the language type names. |
| * |
| * @return Returns String[]. |
| */ |
| public static String[] getLanguageTypes() { |
| return languageTypes; |
| } |
| |
| /** |
| * Gets the emitter names map keys with the language name. |
| * |
| * @return Returns Map. |
| */ |
| public static Map getLanguageEmitterMap() { |
| return languageEmitterMap; |
| } |
| |
| /** |
| * Get the list of unwrap supported data binding frameworks |
| * |
| * @return list |
| */ |
| public static List getUnwrapSupportedFrameworkNames() { |
| return Arrays.asList(unwrapSuppoerteddatabindingFrameworkNames); |
| } |
| |
| /** |
| * Get the list of data binding frameworks that handle unwrapping directly. |
| * |
| * @return names |
| */ |
| public static List getUnwrapDirectFrameworkNames() { |
| return Arrays.asList(unwrapDirectdatabindingFrameworkNames); |
| } |
| |
| /** |
| * Gets the default language name. |
| * |
| * @return Returns String. |
| */ |
| public static String getDefaultLanguage() { |
| return defaultLanguage; |
| } |
| |
| /** |
| * Gets the language specific properties. |
| * |
| * @return Returns Map. |
| */ |
| public static Map getLanguageSpecificPropertiesMap() { |
| return languageSpecificPropertiesMap; |
| } |
| |
| /** |
| * Gets the databinding framework names. |
| * |
| * @return Returns String[]. |
| */ |
| public static String[] getDatabindingFrameworkNames() { |
| return databindingFrameworkNames; |
| } |
| |
| /** |
| * Gets the extensions map for the databinding frameworks. The entries are keys by the framework |
| * name. |
| * |
| * @return Returns Map. |
| */ |
| public static Map getDatabindingFrameworkNameToExtensionMap() { |
| return databindingFrameworkNameToExtensionMap; |
| } |
| |
| /** |
| * Gets the default DB framwork name. |
| * |
| * @return Returns String. |
| */ |
| public static String getDefaultDBFrameworkName() { |
| return defaultDBFrameworkName; |
| } |
| } |