blob: a5b0a6d2c350c1cf5dd09f61456985d5f26eded0 [file] [log] [blame]
/*
* 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;
}
}