summaryrefslogtreecommitdiff
path: root/ext/Log4Qt/src/helpers/factory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ext/Log4Qt/src/helpers/factory.cpp')
-rw-r--r--ext/Log4Qt/src/helpers/factory.cpp515
1 files changed, 0 insertions, 515 deletions
diff --git a/ext/Log4Qt/src/helpers/factory.cpp b/ext/Log4Qt/src/helpers/factory.cpp
deleted file mode 100644
index f5411b5..0000000
--- a/ext/Log4Qt/src/helpers/factory.cpp
+++ /dev/null
@@ -1,515 +0,0 @@
-/******************************************************************************
- *
- * package: Log4Qt
- * file: factory.cpp
- * created: September 2007
- * author: Martin Heinrich
- *
- *
- * Copyright 2007 Martin Heinrich
- *
- * Licensed 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.
- *
- ******************************************************************************/
-
-
-
-/******************************************************************************
- * Dependencies
- ******************************************************************************/
-
-
-#include "helpers/factory.h"
-
-#include <QtCore/QDebug>
-#include <QtCore/QMetaObject>
-#include <QtCore/QMetaProperty>
-#include "consoleappender.h"
-#include "colorconsoleappender.h"
-#include "dailyrollingfileappender.h"
-#include "fileappender.h"
-#include "helpers/logerror.h"
-#include "helpers/initialisationhelper.h"
-#include "helpers/optionconverter.h"
-#include "patternlayout.h"
-#include "rollingfileappender.h"
-#include "signalappender.h"
-#include "simplelayout.h"
-#include "simpletimelayout.h"
-#include "ttcclayout.h"
-
-#if defined(QT_NETWORK_LIB)
-#include "telnetappender.h"
-#endif
-
-#if defined(QT_SQL_LIB)
-#include "databaseappender.h"
-#include "databaselayout.h"
-#endif //#ifdef QT_SQL_LIB
-
-#include "varia/debugappender.h"
-#include "varia/denyallfilter.h"
-#include "varia/levelmatchfilter.h"
-#include "varia/levelrangefilter.h"
-#include "varia/listappender.h"
-#include "varia/nullappender.h"
-#include "varia/stringmatchfilter.h"
-
-
-
-namespace Log4Qt
-{
-
-
- /**************************************************************************
- * Declarations
- **************************************************************************/
-
-
-
- /**************************************************************************
- * C helper functions
- **************************************************************************/
-
-
- LOG4QT_DECLARE_STATIC_LOGGER(logger, Log4Qt::Factory)
-
-
- // Appenders
-
- Appender *console_file_appender()
- { return new ConsoleAppender; }
-
- Appender *create_daily_rolling_file_appender()
- { return new DailyRollingFileAppender; }
-
- Appender *create_debug_appender()
- { return new DebugAppender; }
-
- Appender *create_file_appender()
- { return new FileAppender; }
-
- Appender *create_list_appender()
- { return new ListAppender; }
-
- Appender *create_null_appender()
- { return new NullAppender; }
-
- Appender *create_rolling_file_appender()
- { return new RollingFileAppender; }
-
- Appender *create_signal_appender()
- { return new SignalAppender; }
-
- Appender *create_color_console_appender()
- { return new ColorConsoleAppender;}
-
-#if defined(QT_SQL_LIB)
- Appender *create_database_appender()
- { return new DatabaseAppender; }
-#endif //#if defined(QT_SQL_LIB)
-
-#if defined(QT_NETWORK_LIB)
- Appender *create_telnet_appender()
- { return new TelnetAppender; }
-#endif
- // Filters
-
- Filter *create_deny_all_filter()
- { return new DenyAllFilter; }
-
- Filter *create_level_match_filter()
- { return new LevelMatchFilter; }
-
- Filter *create_level_range_filter()
- { return new LevelRangeFilter; }
-
- Filter *create_string_match_filter()
- { return new StringMatchFilter; }
-
-
- // Layouts
-
- Layout *create_pattern_layout()
- { return new PatternLayout; }
-
- Layout *create_simple_layout()
- { return new SimpleLayout; }
-
- Layout *create_simple_time_layout()
- { return new SimpleTimeLayout; }
-
-#if defined(QT_SQL_LIB)
- Layout *create_database_layout()
- { return new DatabaseLayout; }
-#endif //#if defined(QT_SQL_LIB)
-
- Layout *create_ttcc_layout()
- { return new TTCCLayout; }
-
-
-
- /**************************************************************************
- * Class implementation: Factory
- **************************************************************************/
-
-
- Factory::Factory() :
- mObjectGuard(),
- mAppenderRegistry(),
- mFilterRegistry(),
- mLayoutRegistry()
- {
- registerDefaultAppenders();
- registerDefaultFilters();
- registerDefaultLayouts();
- }
-
-
- LOG4QT_IMPLEMENT_INSTANCE(Factory)
-
-
- Appender *Factory::doCreateAppender(const QString &rAppenderClassName)
- {
- QMutexLocker locker(&mObjectGuard);
-
- if (!mAppenderRegistry.contains(rAppenderClassName))
- {
- logger()->warn("Request for the creation of Appender with class '%1', which is not registered", rAppenderClassName);
- return 0;
- }
- return mAppenderRegistry.value(rAppenderClassName)();
- }
-
-
- Filter *Factory::doCreateFilter(const QString &rFilterClassName)
- {
- QMutexLocker locker(&mObjectGuard);
-
- if (!mFilterRegistry.contains(rFilterClassName))
- {
- logger()->warn("Request for the creation of Filter with class '%1', which is not registered", rFilterClassName);
- return 0;
- }
- return mFilterRegistry.value(rFilterClassName)();
- }
-
-
- Layout *Factory::doCreateLayout(const QString &rLayoutClassName)
- {
- QMutexLocker locker(&mObjectGuard);
-
- if (!mLayoutRegistry.contains(rLayoutClassName))
- {
- logger()->warn("Request for the creation of Layout with class '%1', which is not registered", rLayoutClassName);
- return 0;
- }
- return mLayoutRegistry.value(rLayoutClassName)();
- }
-
-
- void Factory::doRegisterAppender(const QString &rAppenderClassName,
- AppenderFactoryFunc pAppenderFactoryFunc)
- {
- QMutexLocker locker(&mObjectGuard);
-
- if(rAppenderClassName.isEmpty())
- {
- logger()->warn("Registering Appender factory function with empty class name");
- return;
- }
- mAppenderRegistry.insert(rAppenderClassName, pAppenderFactoryFunc);
- }
-
-
- void Factory::doRegisterFilter(const QString &rFilterClassName,
- FilterFactoryFunc pFilterFactoryFunc)
- {
- QMutexLocker locker(&mObjectGuard);
-
- if(rFilterClassName.isEmpty())
- {
- logger()->warn("Registering Filter factory function with empty class name");
- return;
- }
- mFilterRegistry.insert(rFilterClassName, pFilterFactoryFunc);
- }
-
-
- void Factory::doRegisterLayout(const QString &rLayoutClassName,
- LayoutFactoryFunc pLayoutFactoryFunc)
- {
- QMutexLocker locker(&mObjectGuard);
-
- if(rLayoutClassName.isEmpty())
- {
- logger()->warn("Registering Layout factory function with empty class name");
- return;
- }
- mLayoutRegistry.insert(rLayoutClassName, pLayoutFactoryFunc);
- }
-
-
- void Factory::doSetObjectProperty(QObject *pObject,
- const QString &rProperty,
- const QString &rValue)
- {
- // - Validate property
- // - Get correct property name from meta object
- // - Find specific property setter
- // - If no specfifc propery setter can be found,
- // find general property setter
- // - Call property setter
-
- QMetaProperty meta_property;
- if (!validateObjectProperty(meta_property, rProperty, pObject))
- return;
-
- QString property = QLatin1String(meta_property.name());
- QString type = QLatin1String(meta_property.typeName());
- logger()->debug("Setting property '%1' on object of class '%2' to value '%3'",
- property,
- QLatin1String(pObject->metaObject()->className()),
- rValue);
-
- QVariant value;
- bool ok = true;
- if (type == QLatin1String("bool"))
- value = OptionConverter::toBoolean(rValue, &ok);
- else if (type == QLatin1String("int"))
- value = OptionConverter::toInt(rValue, &ok);
- else if (type == QLatin1String("Log4Qt::Level"))
- value = QVariant::fromValue(OptionConverter::toLevel(rValue, &ok));
- else if (type == QLatin1String("QString"))
- value = rValue;
- else
- {
- LogError e = LOG4QT_ERROR(QT_TR_NOOP("Cannot convert to type '%1' for property '%2' on object of class '%3'"),
- CONFIGURATOR_UNKNOWN_TYPE_ERROR,
- "Log4Qt::Factory");
- e << type
- << property
- << QString::fromLatin1(pObject->metaObject()->className());
- logger()->error(e);
- return;
- }
- if (!ok)
- return;
-
- // Everything is checked and the type is the one of the property.
- // Write should never return false
- if (!meta_property.write(pObject, value))
- logger()->warn("Unxpected error result from QMetaProperty.write()");
- }
-
-
- void Factory::doUnregisterAppender(const QString &rAppenderClassName)
- {
- QMutexLocker locker(&mObjectGuard);
-
- if (!mAppenderRegistry.contains(rAppenderClassName))
- {
- logger()->warn("Request to unregister not registered Appender factory function for class '%1'", rAppenderClassName);
- return;
- }
- mAppenderRegistry.remove(rAppenderClassName);
- }
-
-
- void Factory::doUnregisterFilter(const QString &rFilterClassName)
- {
- QMutexLocker locker(&mObjectGuard);
-
- if (!mFilterRegistry.contains(rFilterClassName))
- {
- logger()->warn("Request to unregister not registered Filter factory function for class '%1'", rFilterClassName);
- return;
- }
- mFilterRegistry.remove(rFilterClassName);
- }
-
-
- void Factory::doUnregisterLayout(const QString &rLayoutClassName)
- {
- QMutexLocker locker(&mObjectGuard);
-
- if (!mLayoutRegistry.contains(rLayoutClassName))
- {
- logger()->warn("Request to unregister not registered Layout factory function for class '%1'", rLayoutClassName);
- return;
- }
- mLayoutRegistry.remove(rLayoutClassName);
- }
-
-
- void Factory::registerDefaultAppenders()
- {
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.ConsoleAppender"), console_file_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::ConsoleAppender"), console_file_appender);
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.DailyRollingFileAppender"), create_daily_rolling_file_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::DailyRollingFileAppender"), create_daily_rolling_file_appender);
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.varia.DebugAppender"), create_debug_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::DebugAppender"), create_debug_appender);
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.FileAppender"), create_file_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::FileAppender"), create_file_appender);
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.varia.ListAppender"), create_list_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::ListAppender"), create_list_appender);
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.varia.NullAppender"), create_null_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::NullAppender"), create_null_appender);
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.RollingFileAppender"), create_rolling_file_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::RollingFileAppender"), create_rolling_file_appender);
-
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.SignalAppender"), create_signal_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::SignalAppender"), create_signal_appender);
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.ColorConsoleAppender"), create_color_console_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::ColorConsoleAppender"), create_color_console_appender);
-
-#if defined(QT_SQL_LIB)
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.DatabaseAppender"), create_database_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::DatabaseAppender"), create_database_appender);
-#endif //#ifdef QT_SQL_LIB
-
-#if defined(QT_NETWORK_LIB)
- mAppenderRegistry.insert(QLatin1String("org.apache.log4j.TelnetAppender"), create_telnet_appender);
- mAppenderRegistry.insert(QLatin1String("Log4Qt::TelnetAppender"), create_telnet_appender);
-#endif
- }
-
-
- void Factory::registerDefaultFilters()
- {
- mFilterRegistry.insert(QLatin1String("org.apache.log4j.varia.DenyAllFilter"), create_deny_all_filter);
- mFilterRegistry.insert(QLatin1String("Log4Qt::DenyAllFilter"), create_deny_all_filter);
- mFilterRegistry.insert(QLatin1String("org.apache.log4j.varia.LevelMatchFilter"), create_level_match_filter);
- mFilterRegistry.insert(QLatin1String("Log4Qt::LevelMatchFilter"), create_level_match_filter);
- mFilterRegistry.insert(QLatin1String("org.apache.log4j.varia.LevelRangeFilter"), create_level_range_filter);
- mFilterRegistry.insert(QLatin1String("Log4Qt::LevelRangeFilter"), create_level_range_filter);
- mFilterRegistry.insert(QLatin1String("org.apache.log4j.varia.StringMatchFilter"), create_string_match_filter);
- mFilterRegistry.insert(QLatin1String("Log4Qt::StringMatchFilter"), create_string_match_filter);
- }
-
-
- void Factory::registerDefaultLayouts()
- {
- mLayoutRegistry.insert(QLatin1String("org.apache.log4j.PatternLayout"), create_pattern_layout);
- mLayoutRegistry.insert(QLatin1String("Log4Qt::PatternLayout"), create_pattern_layout);
- mLayoutRegistry.insert(QLatin1String("org.apache.log4j.SimpleLayout"), create_simple_layout);
- mLayoutRegistry.insert(QLatin1String("Log4Qt::SimpleLayout"), create_simple_layout);
- mLayoutRegistry.insert(QLatin1String("org.apache.log4j.TTCCLayout"), create_ttcc_layout);
- mLayoutRegistry.insert(QLatin1String("Log4Qt::TTCCLayout"), create_ttcc_layout);
-
- mLayoutRegistry.insert(QLatin1String("org.apache.log4j.SimpleTimeLayout"), create_simple_time_layout);
- mLayoutRegistry.insert(QLatin1String("Log4Qt::SimpleTimeLayout"), create_simple_time_layout);
-
-#if defined(QT_SQL_LIB)
- mLayoutRegistry.insert(QLatin1String("org.apache.log4j.DatabaseLayout"), create_database_layout);
- mLayoutRegistry.insert(QLatin1String("Log4Qt::DatabaseLayout"), create_database_layout);
-#endif //#ifdef (QT_SQL_LIB)
- }
-
-
- bool Factory::validateObjectProperty(QMetaProperty &rMetaProperty,
- const QString &rProperty,
- QObject *pObject)
- {
- // Validate:
- // - No null object pointer
- // - No empty property name
- // - Property exists on the object (QT or Java name)
- // - Property is readable
- // - Property is writable
-
- const char *p_context = "Log4Qt::Factory";
- LogError e = LOG4QT_ERROR(QT_TR_NOOP("Unable to set property value on object"),
- CONFIGURATOR_PROPERTY_ERROR,
- p_context);
-
- if (!pObject)
- {
- LogError ce = LOG4QT_ERROR(QT_TR_NOOP("Invalid null object pointer"),
- 0,
- p_context);
- e.addCausingError(ce);
- logger()->error(e);
- return false;
- }
- if (rProperty.isEmpty())
- {
- LogError ce = LOG4QT_ERROR(QT_TR_NOOP("Invalid empty property name"),
- 0,
- p_context);
- e.addCausingError(ce);
- logger()->error(e);
- return false;
- }
- const QMetaObject *p_meta_object = pObject->metaObject();
- QString property = rProperty;
- int i = p_meta_object->indexOfProperty(property.toLatin1());
- if (i < 0)
- {
- // Try name with lower case first character. Java properties names
- // start upper case
- property[0] = property[0].toLower();
- i = p_meta_object->indexOfProperty(property.toLatin1());
- if (i < 0)
- {
- LogError ce = LOG4QT_ERROR(QT_TR_NOOP("Property '%1' does not exist in class '%2'"),
- 0,
- p_context);
- ce << property
- << QString::fromLatin1(pObject->metaObject()->className());
- e.addCausingError(ce);
- logger()->error(e);
- return false;
- }
- }
- rMetaProperty = p_meta_object->property(i);
- if (!rMetaProperty.isWritable())
- {
- LogError ce = LOG4QT_ERROR(QT_TR_NOOP("Property '%1' is not writable in class '%2'"),
- 0,
- p_context);
- ce << property
- << QString::fromLatin1(pObject->metaObject()->className());
- e.addCausingError(ce);
- logger()->error(e);
- return false;
- }
-
- return true;
- }
-
-
-
- /**************************************************************************
- * Implementation: Operators, Helper
- **************************************************************************/
-
-
-#ifndef QT_NO_DEBUG_STREAM
- QDebug operator<<(QDebug debug,
- const Factory &rFactory)
- {
- debug.nospace() << "Factory("
- << "appenderfactories:" << rFactory.registeredAppenders()
- << "filterfactories:" << rFactory.registeredFilters()
- << "layoutfactories:" << rFactory.registeredLayouts()
- << ")";
- return debug.space();
- }
-#endif // QT_NO_DEBUG_STREAM
-
-
-
-} // namespace Log4Qt
-