From 0981af024243b314b45ddaf3ebee08bc184f06e2 Mon Sep 17 00:00:00 2001 From: eilers Date: Mon, 07 Oct 2002 17:34:24 +0000 Subject: added OBackendFactory for advanced backend access --- diff --git a/libopie/pim/obackendfactory.h b/libopie/pim/obackendfactory.h new file mode 100644 index 0000000..599fbf2 --- a/dev/null +++ b/libopie/pim/obackendfactory.h @@ -0,0 +1,88 @@ +/* + * Class to manage Backends. + * + * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de) + * + * ===================================================================== + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; + * either version 2 of the License, or (at your option) any later + * version. + * ===================================================================== + * ToDo: Use plugins + * ===================================================================== + * Version: $Id$ + * ===================================================================== + * History: + * $Log$ + * Revision 1.1 2002/10/07 17:35:01 eilers + * added OBackendFactory for advanced backend access + * + * + * ===================================================================== + */ +#ifndef __OPIE_BACKENDFACTORY_H_ +#define __OPIE_BACKENDFACTORY_H_ + +#include +#include +#include + +#include "otodoaccessxml.h" +#include "ocontactaccessbackend_xml.h" +#include "otodoaccesssql.h" + + +template +class OBackendFactory +{ + public: + OBackendFactory() {}; + + enum BACKENDS { + TODO, + CONTACT, + DATE + }; + + static T* Default( const QString backendName, const QString& appName ){ + + + Config config( "pimaccess" ); + config.setGroup ( backendName ); + QString backend = config.readEntry( "usebackend" ); + + QAsciiDict dict ( 3 ); + dict.setAutoDelete ( TRUE ); + + dict.insert( "todo", new int (TODO) ); + dict.insert( "contact", new int (CONTACT) ); + + qWarning ("TODO is: %d", TODO); + qWarning ("CONTACT is: %d", CONTACT); + + switch ( *dict.take( backendName ) ){ + case TODO: + if ( backend == "sql" ) + return (T*) new OTodoAccessBackendSQL(""); + + return (T*) new OTodoAccessXML( appName ); + case CONTACT: + if ( backend == "sql" ) + qWarning ("OBackendFactory:: sql Backend not implemented! Using XML instead!"); + + return (T*) new OContactAccessBackend_XML( appName ); + case DATE: + qWarning ("OBackendFactory:: DATE-Backend not implemented!"); + return NULL; + default: + return NULL; + } + + + } +}; + + +#endif diff --git a/libopie/pim/ocontactaccess.cpp b/libopie/pim/ocontactaccess.cpp index 8a8ff08..b5f358b 100644 --- a/libopie/pim/ocontactaccess.cpp +++ b/libopie/pim/ocontactaccess.cpp @@ -21,6 +21,9 @@ * ===================================================================== * History: * $Log$ + * Revision 1.3 2002/10/07 17:34:24 eilers + * added OBackendFactory for advanced backend access + * * Revision 1.2 2002/10/02 16:18:11 eilers * debugged and seems to work almost perfectly .. * @@ -34,6 +37,7 @@ */ #include "ocontactaccess.h" +#include "obackendfactory.h" #include #include @@ -53,7 +57,7 @@ #include "ocontactaccessbackend_xml.h" -OContactAccess::OContactAccess ( const QString appname, const QString filename, +OContactAccess::OContactAccess ( const QString appname, const QString , OContactAccessBackend* end, bool autosync ): OPimAccessTemplate( end ), m_changed ( false ) @@ -62,7 +66,9 @@ OContactAccess::OContactAccess ( const QString appname, const QString filename, * will use the XML-Backend as default (until we have a cute SQL-Backend..). */ if( end == 0 ) { - end = new OContactAccessBackend_XML( appname, filename ); + // __asm__("int3"); + qWarning ("Using BackendFactory !"); + end = OBackendFactory::Default( "contact", appname ); } // Set backend locally and in template m_backEnd = end; diff --git a/libopie/pim/ocontactaccessbackend.h b/libopie/pim/ocontactaccessbackend.h index 9469bbc..a651477 100644 --- a/libopie/pim/ocontactaccessbackend.h +++ b/libopie/pim/ocontactaccessbackend.h @@ -19,6 +19,9 @@ * ===================================================================== * History: * $Log$ + * Revision 1.2 2002/10/07 17:34:24 eilers + * added OBackendFactory for advanced backend access + * * Revision 1.1 2002/09/27 17:11:44 eilers * Added API for accessing the Contact-Database ! It is compiling, but * please do not expect that anything is working ! @@ -32,6 +35,7 @@ #ifndef _OCONTACTACCESSBACKEND_H_ #define _OCONTACTACCESSBACKEND_H_ +#include "ocontact.h" #include "opimaccessbackend.h" class OContactAccessBackend: public OPimAccessBackend { diff --git a/libopie/pim/ocontactaccessbackend_xml.h b/libopie/pim/ocontactaccessbackend_xml.h index 2cdb45b..97ef40f 100644 --- a/libopie/pim/ocontactaccessbackend_xml.h +++ b/libopie/pim/ocontactaccessbackend_xml.h @@ -17,6 +17,9 @@ * ===================================================================== * History: * $Log$ + * Revision 1.2 2002/10/07 17:34:24 eilers + * added OBackendFactory for advanced backend access + * * Revision 1.1 2002/09/27 17:11:44 eilers * Added API for accessing the Contact-Database ! It is compiling, but * please do not expect that anything is working ! @@ -32,11 +35,18 @@ #include #include #include +#include #include #include +#include + #include #include "ocontactaccessbackend.h" +#include "ocontactaccess.h" + +#include +#include using namespace Opie; diff --git a/libopie2/opiepim/backend/obackendfactory.h b/libopie2/opiepim/backend/obackendfactory.h new file mode 100644 index 0000000..599fbf2 --- a/dev/null +++ b/libopie2/opiepim/backend/obackendfactory.h @@ -0,0 +1,88 @@ +/* + * Class to manage Backends. + * + * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de) + * + * ===================================================================== + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; + * either version 2 of the License, or (at your option) any later + * version. + * ===================================================================== + * ToDo: Use plugins + * ===================================================================== + * Version: $Id$ + * ===================================================================== + * History: + * $Log$ + * Revision 1.1 2002/10/07 17:35:01 eilers + * added OBackendFactory for advanced backend access + * + * + * ===================================================================== + */ +#ifndef __OPIE_BACKENDFACTORY_H_ +#define __OPIE_BACKENDFACTORY_H_ + +#include +#include +#include + +#include "otodoaccessxml.h" +#include "ocontactaccessbackend_xml.h" +#include "otodoaccesssql.h" + + +template +class OBackendFactory +{ + public: + OBackendFactory() {}; + + enum BACKENDS { + TODO, + CONTACT, + DATE + }; + + static T* Default( const QString backendName, const QString& appName ){ + + + Config config( "pimaccess" ); + config.setGroup ( backendName ); + QString backend = config.readEntry( "usebackend" ); + + QAsciiDict dict ( 3 ); + dict.setAutoDelete ( TRUE ); + + dict.insert( "todo", new int (TODO) ); + dict.insert( "contact", new int (CONTACT) ); + + qWarning ("TODO is: %d", TODO); + qWarning ("CONTACT is: %d", CONTACT); + + switch ( *dict.take( backendName ) ){ + case TODO: + if ( backend == "sql" ) + return (T*) new OTodoAccessBackendSQL(""); + + return (T*) new OTodoAccessXML( appName ); + case CONTACT: + if ( backend == "sql" ) + qWarning ("OBackendFactory:: sql Backend not implemented! Using XML instead!"); + + return (T*) new OContactAccessBackend_XML( appName ); + case DATE: + qWarning ("OBackendFactory:: DATE-Backend not implemented!"); + return NULL; + default: + return NULL; + } + + + } +}; + + +#endif diff --git a/libopie2/opiepim/backend/ocontactaccessbackend.h b/libopie2/opiepim/backend/ocontactaccessbackend.h index 9469bbc..a651477 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend.h +++ b/libopie2/opiepim/backend/ocontactaccessbackend.h @@ -19,6 +19,9 @@ * ===================================================================== * History: * $Log$ + * Revision 1.2 2002/10/07 17:34:24 eilers + * added OBackendFactory for advanced backend access + * * Revision 1.1 2002/09/27 17:11:44 eilers * Added API for accessing the Contact-Database ! It is compiling, but * please do not expect that anything is working ! @@ -32,6 +35,7 @@ #ifndef _OCONTACTACCESSBACKEND_H_ #define _OCONTACTACCESSBACKEND_H_ +#include "ocontact.h" #include "opimaccessbackend.h" class OContactAccessBackend: public OPimAccessBackend { diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_xml.h b/libopie2/opiepim/backend/ocontactaccessbackend_xml.h index 2cdb45b..97ef40f 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend_xml.h +++ b/libopie2/opiepim/backend/ocontactaccessbackend_xml.h @@ -17,6 +17,9 @@ * ===================================================================== * History: * $Log$ + * Revision 1.2 2002/10/07 17:34:24 eilers + * added OBackendFactory for advanced backend access + * * Revision 1.1 2002/09/27 17:11:44 eilers * Added API for accessing the Contact-Database ! It is compiling, but * please do not expect that anything is working ! @@ -32,11 +35,18 @@ #include #include #include +#include #include #include +#include + #include #include "ocontactaccessbackend.h" +#include "ocontactaccess.h" + +#include +#include using namespace Opie; diff --git a/libopie2/opiepim/core/ocontactaccess.cpp b/libopie2/opiepim/core/ocontactaccess.cpp index 8a8ff08..b5f358b 100644 --- a/libopie2/opiepim/core/ocontactaccess.cpp +++ b/libopie2/opiepim/core/ocontactaccess.cpp @@ -21,6 +21,9 @@ * ===================================================================== * History: * $Log$ + * Revision 1.3 2002/10/07 17:34:24 eilers + * added OBackendFactory for advanced backend access + * * Revision 1.2 2002/10/02 16:18:11 eilers * debugged and seems to work almost perfectly .. * @@ -34,6 +37,7 @@ */ #include "ocontactaccess.h" +#include "obackendfactory.h" #include #include @@ -53,7 +57,7 @@ #include "ocontactaccessbackend_xml.h" -OContactAccess::OContactAccess ( const QString appname, const QString filename, +OContactAccess::OContactAccess ( const QString appname, const QString , OContactAccessBackend* end, bool autosync ): OPimAccessTemplate( end ), m_changed ( false ) @@ -62,7 +66,9 @@ OContactAccess::OContactAccess ( const QString appname, const QString filename, * will use the XML-Backend as default (until we have a cute SQL-Backend..). */ if( end == 0 ) { - end = new OContactAccessBackend_XML( appname, filename ); + // __asm__("int3"); + qWarning ("Using BackendFactory !"); + end = OBackendFactory::Default( "contact", appname ); } // Set backend locally and in template m_backEnd = end; -- cgit v0.9.0.2