Diffstat (limited to 'libopie2/opiepim/backend/obackendfactory.h') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie2/opiepim/backend/obackendfactory.h | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/libopie2/opiepim/backend/obackendfactory.h b/libopie2/opiepim/backend/obackendfactory.h index 9f3a823..25e247b 100644 --- a/libopie2/opiepim/backend/obackendfactory.h +++ b/libopie2/opiepim/backend/obackendfactory.h @@ -41,92 +41,94 @@ #include <opie2/otodoaccessvcal.h> #include <opie2/ocontactaccessbackend_xml.h> #include <opie2/ocontactaccessbackend_vcard.h> #include <opie2/odatebookaccessbackend_xml.h> #include <opie2/odebug.h> #ifdef __USE_SQL #include <opie2/otodoaccesssql.h> #include <opie2/ocontactaccessbackend_sql.h> #include <opie2/odatebookaccessbackend_sql.h> #endif #include <qpe/config.h> /* QT */ #include <qstring.h> #include <qasciidict.h> 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 * * <pre> * OPimTodoAccessBackend* backend = OBackEndFactory<OPimTodoAccessBackend>::Default( OPimGlobal::TODOLIST, QString::null ); * backend->load(); * </pre> * * @author Stefan Eilers * @version 0.1 */ template<class T> class OBackendFactory { public: - OBackendFactory() {}; - + OBackendFactory() {}; + /** * Returns a selected 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. * @param filename Filename of the database file if you don't want to access the default * @see OPimGlobal() */ static T* create( OPimGlobal::PimType type, OPimGlobal::DatabaseStyle database, const QString& appName, const QString& filename = QString::null ){ - owarn << "Selected backend for " << type << " is: " << database << oendl; - // If we should use the dafult database style, we have to request it + owarn << "Selected backend for " << type << " is: " << +database << oendl; + + // If we should use the dafult database style, we have to request it OPimGlobal::DatabaseStyle use_database = database; if ( use_database == OPimGlobal::DEFAULT ){ use_database = defaultDB( type ); } - + switch ( type ){ case OPimGlobal::TODOLIST: - + switch ( use_database ){ default: // Use SQL if something weird is given. // Fall through !! case OPimGlobal::SQL: #ifdef __USE_SQL return (T*) new OPimTodoAccessBackendSQL( filename ); break; #else owarn << "OBackendFactory:: sql Backend for TODO not implemented! Using XML instead!" << oendl; // Fall through !! #endif case OPimGlobal::XML: return (T*) new OPimTodoAccessXML( appName, filename ); break; case OPimGlobal::VCARD: return (T*) new OPimTodoAccessVCal( filename ); break; } case OPimGlobal::CONTACTLIST: switch ( use_database ){ default: // Use SQL if something weird is given. // Fall through !! case OPimGlobal::SQL: #ifdef __USE_SQL @@ -145,86 +147,86 @@ class OBackendPrivate; } case OPimGlobal::DATEBOOK: switch ( use_database ){ default: // Use SQL if something weird is given. // Fall through !! case OPimGlobal::SQL: #ifdef __USE_SQL return (T*) new ODateBookAccessBackend_SQL( appName, filename ); break; #else owarn << "OBackendFactory:: sql Backend for DATEBOOK not implemented! Using XML instead!" << oendl; // Fall through !! #endif case OPimGlobal::XML: return (T*) new ODateBookAccessBackend_XML( appName, filename ); break; case OPimGlobal::VCARD: owarn << "OBackendFactory:: VCal Backend for DATEBOOK not implemented!" << oendl; return (T*) NULL; break; } default: return (T*) NULL; } - + } - + /** * Returns the style of the default database which is used to contact PIM data. * @param type the type of the backend * @see OPimGlobal() */ static OPimGlobal::DatabaseStyle defaultDB( OPimGlobal::PimType type ){ QString group_name; switch ( type ){ case OPimGlobal::TODOLIST: group_name = "todo"; break; case OPimGlobal::CONTACTLIST: group_name = "contact"; break; case OPimGlobal::DATEBOOK: group_name = "datebook"; break; default: group_name = "unknown"; } - + Config config( "pimaccess" ); config.setGroup ( group_name ); QString db_String = config.readEntry( "usebackend", "xml" ); - + 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) ); - + int* db_find = dictDbTypes[ db_String ]; - + if ( !db_find ) return OPimGlobal::UNKNOWN; - + return (OPimGlobal::DatabaseStyle) *db_find; } - - + + /** * Returns the default backend implementation for backendName. Which one is used, is defined * by the configfile "pimaccess.conf". * @param type The type of the backend (@see OPimGlobal()) * @param appName The name of your application. It will be passed on to the backend * @see OPimGlobal() */ static T* defaultBackend( OPimGlobal::PimType type, const QString& appName ){ return create( type, OPimGlobal::DEFAULT, appName ); } private: OBackendPrivate* d; - + }; - + } #endif |