diff options
Diffstat (limited to 'src/main/include/log4cxx/helpers/optionconverter.h')
-rw-r--r-- | src/main/include/log4cxx/helpers/optionconverter.h | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/src/main/include/log4cxx/helpers/optionconverter.h b/src/main/include/log4cxx/helpers/optionconverter.h new file mode 100644 index 0000000..6b4561c --- /dev/null +++ b/src/main/include/log4cxx/helpers/optionconverter.h @@ -0,0 +1,164 @@ +/* + * 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. + */ + +#ifndef _LOG4CXX_HELPER_OPTION_CONVERTER_H +#define _LOG4CXX_HELPER_OPTION_CONVERTER_H + +#include <log4cxx/logstring.h> +#include <log4cxx/helpers/objectptr.h> + +namespace log4cxx +{ + class Level; + class File; + typedef helpers::ObjectPtrT<Level> LevelPtr; + + namespace spi + { + class LoggerRepository; + typedef helpers::ObjectPtrT<LoggerRepository> LoggerRepositoryPtr; + } + + namespace helpers + { + class Properties; + + class Object; + typedef ObjectPtrT<Object> ObjectPtr; + + class Class; + + /** A convenience class to convert property values to specific types.*/ + class LOG4CXX_EXPORT OptionConverter + { + /** OptionConverter is a static class. */ + private: + OptionConverter() {} + + public: + static LogString convertSpecialChars(const LogString& s); + + /** + If <code>value</code> is "true", then <code>true</code> is + returned. If <code>value</code> is "false", then + <code>true</code> is returned. Otherwise, <code>default</code> is + returned. + + <p>Case of value is unimportant. + */ + static bool toBoolean(const LogString& value, bool dEfault); + static int toInt(const LogString& value, int dEfault); + static long toFileSize(const LogString& value, long dEfault); + static LevelPtr toLevel(const LogString& value, + const LevelPtr& defaultValue); + + /** + Find the value corresponding to <code>key</code> in + <code>props</code>. Then perform variable substitution on the + found value. + */ + static LogString findAndSubst(const LogString& key, Properties& props); + +/** +Perform variable substitution in string <code>val</code> from the +values of keys found in the system propeties. + +<p>The variable substitution delimeters are <b>${</b> and <b>}</b>. + +<p>For example, if the System properties contains "key=value", then +the call +<pre> +String s = OptionConverter.substituteVars("Value of key is ${key}."); +</pre> + +will set the variable <code>s</code> to "Value of key is value.". + +<p>If no value could be found for the specified key, then the +<code>props</code> parameter is searched, if the value could not +be found there, then substitution defaults to the empty string. + +<p>For example, if system propeties contains no value for the key +"inexistentKey", then the call + +<pre> +String s = OptionConverter.subsVars("Value of inexistentKey is [${inexistentKey}]"); +</pre> +will set <code>s</code> to "Value of inexistentKey is []" + +<p>An IllegalArgumentException is thrown if +<code>val</code> contains a start delimeter "${" which is not +balanced by a stop delimeter "}". </p> + +@param val The string on which variable substitution is performed. +@param props The properties from which variable substitution is performed. +@throws IllegalArgumentException if <code>val</code> is malformed. +*/ + static LogString substVars(const LogString& val, Properties& props); + + /** + * Gets the specified system property. + @param key The key to search for. + @param def The default value to return. + @return the string value of the system property, or the default + value if there is no property with that key. + */ + static LogString getSystemProperty(const LogString& key, const LogString& def); + + /** + Instantiate an object given a class name. Check that the + <code>className</code> is a subclass of + <code>superClass</code>. If that test fails or the object could + not be instantiated, then <code>defaultValue</code> is returned. + + @param className The fully qualified class name of the object to instantiate. + @param superClass The class to which the new object should belong. + @param defaultValue The object to return in case of non-fulfillment + */ + static ObjectPtr instantiateByClassName(const LogString& className, + const Class& superClass, const ObjectPtr& defaultValue); + + static ObjectPtr instantiateByKey(Properties& props, + const LogString& key, const Class& superClass, + const ObjectPtr& defaultValue); + + /** + Configure log4cxx given a configFileName. + + <p>The configFileName must point to a file which will be + interpreted by a new instance of a log4cxx configurator. + + <p>All configurations steps are taken on the + <code>hierarchy</code> passed as a parameter. + + <p> + @param configFileName The location of the configuration file. + @param clazz The classname, of the log4cxx configurator which + will parse the file <code>configFileName</code>. This must be + a subclass of Configurator, or null. If this value is null then + a default configurator of PropertyConfigurator is used, unless the + filename pointed to by <code>configFileName</code> ends in '.xml', + in which case DOMConfigurator is used. + @param hierarchy The Hierarchy to act on. + */ + static void selectAndConfigure(const File& configFileName, + const LogString& clazz, spi::LoggerRepositoryPtr& hierarchy); + }; + } // namespace helpers +} // namespace log4cxx + +#endif //_LOG4CXX_HELPER_OPTION_CONVERTER_H + |