author | eilers <eilers> | 2004-05-16 15:22:41 (UTC) |
---|---|---|
committer | eilers <eilers> | 2004-05-16 15:22:41 (UTC) |
commit | 703b468052367682959f0e1494eec4b3d12754a8 (patch) (side-by-side diff) | |
tree | af6e153211a148c416a5afb4ee4aa580ebfd6275 /libopie2/opiepim/backend/obackendfactory.h | |
parent | 27794ba158d682d115b2feafea023995265991e6 (diff) | |
download | opie-703b468052367682959f0e1494eec4b3d12754a8.zip opie-703b468052367682959f0e1494eec4b3d12754a8.tar.gz opie-703b468052367682959f0e1494eec4b3d12754a8.tar.bz2 |
Introducing a new factory for creating access objects for the pim backends.
It is still very basic but simplifies the access of the pim database and covers
the creation process itself..
The new class OPimGlobal will contain constants and enums which should be
public available for users of the PIM-classes..
Diffstat (limited to 'libopie2/opiepim/backend/obackendfactory.h') (more/less context) (show whitespace changes)
-rw-r--r-- | libopie2/opiepim/backend/obackendfactory.h | 103 |
1 files changed, 62 insertions, 41 deletions
diff --git a/libopie2/opiepim/backend/obackendfactory.h b/libopie2/opiepim/backend/obackendfactory.h index 06421d1..d101373 100644 --- a/libopie2/opiepim/backend/obackendfactory.h +++ b/libopie2/opiepim/backend/obackendfactory.h @@ -1,11 +1,11 @@ /* This file is part of the Opie Project - Copyright (C) The Main Author <main-author@whereever.org> + Copyright (C) Stefan Eilers <eilers.stefan@epost.de> =. Copyright (C) The Opie Team <opie-devel@handhelds.org> .=l. .>+-= _;:, .> :=|. This program is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU Library General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; either version 2 of the License, @@ -33,118 +33,139 @@ */ #ifndef OPIE_BACKENDFACTORY_H_ #define OPIE_BACKENDFACTORY_H_ #include <qstring.h> #include <qasciidict.h> #include <qpe/config.h> +#include <opie2/opimglobal.h> #include <opie2/otodoaccessxml.h> #include <opie2/ocontactaccessbackend_xml.h> #include <opie2/odatebookaccessbackend_xml.h> #ifdef __USE_SQL #include <opie2/otodoaccesssql.h> #include <opie2/ocontactaccessbackend_sql.h> #include <opie2/odatebookaccessbackend_sql.h> #endif +using namespace Opie; +using namespace Opie::Pim; + namespace Opie { class OBackendPrivate; /** * This class is our factory. It will give us the default implementations * of at least Todolist, Contacts and Datebook. In the future this class will * allow users to switch the backend with ( XML->SQLite ) without the need * to recompile.# - * This class as the whole PIM Api is making use of templates + * This class - as the whole PIM Api - is making use of templates * * <pre> * OPimTodoAccessBackend* backend = OBackEndFactory<OPimTodoAccessBackend>::Default("todo", QString::null ); * backend->load(); * </pre> * * @author Stefan Eilers * @version 0.1 */ template<class T> class OBackendFactory { public: OBackendFactory() {}; - enum BACKENDS { - TODO, - CONTACT, - DATE - }; - /** - * Returns a backend implementation for backendName - * @param backendName the type of the backend - * @param appName will be passed on to the backend + * Returns a backend implementation + * @param type the type of the backend + * @param database the type of the used database + * @param appName The name of your application. It will be passed on to the backend. */ - static T* Default( const QString backendName, const QString& appName ){ - - // __asm__("int3"); - - Config config( "pimaccess" ); - config.setGroup ( backendName ); - QString backend = config.readEntry( "usebackend" ); + static T* create( OPimGlobal::PimType type, OPimGlobal::DatabaseStyle database, + const QString& appName ){ + qWarning("Selected backend for %d is: %d", type, database ); - qWarning("Selected backend for %s is: %s", backendName.latin1(), backend.latin1() ); - - QAsciiDict<int> dict ( 3 ); - dict.setAutoDelete ( TRUE ); - - dict.insert( "todo", new int (TODO) ); - dict.insert( "contact", new int (CONTACT) ); - dict.insert( "datebook", new int(DATE) ); - - int *find = dict[ backendName ]; - if (!find ) return 0; - - switch ( *find ){ - case TODO: + switch ( type ){ + case OPimGlobal::TODOLIST: #ifdef __USE_SQL - if ( backend == "sql" ) + if ( database == OPimGlobal::SQL ) return (T*) new OPimTodoAccessBackendSQL(""); #else - if ( backend == "sql" ) + if ( database == OPimGlobal::SQL ) qWarning ("OBackendFactory:: sql Backend for TODO not implemented! Using XML instead!"); #endif return (T*) new OPimTodoAccessXML( appName ); - case CONTACT: + case OPimGlobal::CONTACTLIST: #ifdef __USE_SQL - if ( backend == "sql" ) + if ( database == OPimGlobal::SQL ) return (T*) new OPimContactAccessBackend_SQL(""); #else - if ( backend == "sql" ) + if ( database == OPimGlobal::SQL ) qWarning ("OBackendFactory:: sql Backend for CONTACT not implemented! Using XML instead!"); #endif return (T*) new OPimContactAccessBackend_XML( appName ); - case DATE: + case OPimGlobal::DATEBOOK: #ifdef __USE_SQL - if ( backend == "sql" ) + if ( database == OPimGlobal::SQL ) return (T*) new ODateBookAccessBackend_SQL(""); #else - if ( backend == "sql" ) + if ( database == OPimGlobal::SQL ) qWarning("OBackendFactory:: sql Backend for DATEBOOK not implemented! Using XML instead!"); #endif return (T*) new ODateBookAccessBackend_XML( appName ); default: - return NULL; + return (T*) NULL; } } + + /** + * Returns the default backend implementation for backendName. Which one is used, is defined + * by the configfile "pimaccess.conf". + * @param backendName the type of the backend (use "todo", "contact" or "datebook" ) + * @param appName The name of your application. It will be passed on to the backend + */ + static T* Default( const QString backendName, const QString& appName ){ + + QAsciiDict<int> dictBackends( OPimGlobal::_END_PimType ); + dictBackends.setAutoDelete ( TRUE ); + + dictBackends.insert( "todo", new int (OPimGlobal::TODOLIST) ); + dictBackends.insert( "contact", new int (OPimGlobal::CONTACTLIST) ); + dictBackends.insert( "datebook", new int(OPimGlobal::DATEBOOK) ); + + QAsciiDict<int> dictDbTypes( OPimGlobal::_END_DatabaseStyle ); + dictDbTypes.setAutoDelete( TRUE ); + + dictDbTypes.insert( "xml", new int (OPimGlobal::XML) ); + dictDbTypes.insert( "sql", new int (OPimGlobal::SQL) ); + dictDbTypes.insert( "vcard", new int (OPimGlobal::VCARD) ); + + Config config( "pimaccess" ); + config.setGroup ( backendName ); + QString db_String = config.readEntry( "usebackend" ); + + int* db_find = dictDbTypes[ db_String ]; + int* backend_find = dictBackends[ backendName ]; + if ( !backend_find || !db_find ) return NULL; + + qDebug( "OBackendFactory::Default -> Backend is %s, Database is %s", backendName.latin1(), + db_String.latin1() ); + + return create( (OPimGlobal::PimType) *backend_find, (OPimGlobal::DatabaseStyle) *db_find, appName ); + + } private: OBackendPrivate* d; + }; } #endif |