summaryrefslogtreecommitdiff
authoreilers <eilers>2004-05-23 17:35:42 (UTC)
committer eilers <eilers>2004-05-23 17:35:42 (UTC)
commiteb5e071463cc2a6b2fa27a486e291da9e8ae01a6 (patch) (unidiff)
tree9d50c3b88921f33dec6d186f6491733480e21f63
parent3025eab185d9e4237c37b4a193fbb20a4dbe504e (diff)
downloadopie-eb5e071463cc2a6b2fa27a486e291da9e8ae01a6.zip
opie-eb5e071463cc2a6b2fa27a486e291da9e8ae01a6.tar.gz
opie-eb5e071463cc2a6b2fa27a486e291da9e8ae01a6.tar.bz2
Make it possible to define the filename of a database via factories..
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/backend/obackendfactory.h6
-rw-r--r--libopie2/opiepim/core/opimaccessfactory.h22
2 files changed, 16 insertions, 12 deletions
diff --git a/libopie2/opiepim/backend/obackendfactory.h b/libopie2/opiepim/backend/obackendfactory.h
index c8a4627..6f46652 100644
--- a/libopie2/opiepim/backend/obackendfactory.h
+++ b/libopie2/opiepim/backend/obackendfactory.h
@@ -46,67 +46,68 @@
46#include <opie2/ocontactaccessbackend_vcard.h> 46#include <opie2/ocontactaccessbackend_vcard.h>
47#include <opie2/odatebookaccessbackend_xml.h> 47#include <opie2/odatebookaccessbackend_xml.h>
48 48
49#ifdef __USE_SQL 49#ifdef __USE_SQL
50#include <opie2/otodoaccesssql.h> 50#include <opie2/otodoaccesssql.h>
51#include <opie2/ocontactaccessbackend_sql.h> 51#include <opie2/ocontactaccessbackend_sql.h>
52#include <opie2/odatebookaccessbackend_sql.h> 52#include <opie2/odatebookaccessbackend_sql.h>
53#endif 53#endif
54 54
55using namespace Opie; 55using namespace Opie;
56using namespace Opie::Pim; 56using namespace Opie::Pim;
57 57
58namespace Opie { 58namespace Opie {
59 59
60class OBackendPrivate; 60class OBackendPrivate;
61 61
62/** 62/**
63 * This class is our factory. It will give us the default implementations 63 * This class is our factory. It will give us the default implementations
64 * of at least Todolist, Contacts and Datebook. In the future this class will 64 * of at least Todolist, Contacts and Datebook. In the future this class will
65 * allow users to switch the backend with ( XML->SQLite ) without the need 65 * allow users to switch the backend with ( XML->SQLite ) without the need
66 * to recompile.# 66 * to recompile.#
67 * This class - as the whole PIM Api - is making use of templates 67 * This class - as the whole PIM Api - is making use of templates
68 * 68 *
69 * <pre> 69 * <pre>
70 * OPimTodoAccessBackend* backend = OBackEndFactory<OPimTodoAccessBackend>::Default("todo", QString::null ); 70 * OPimTodoAccessBackend* backend = OBackEndFactory<OPimTodoAccessBackend>::Default( OPimGlobal::TODOLIST, QString::null );
71 * backend->load(); 71 * backend->load();
72 * </pre> 72 * </pre>
73 * 73 *
74 * @author Stefan Eilers 74 * @author Stefan Eilers
75 * @version 0.1 75 * @version 0.1
76 */ 76 */
77template<class T> 77template<class T>
78class OBackendFactory 78class OBackendFactory
79{ 79{
80 public: 80 public:
81 OBackendFactory() {}; 81 OBackendFactory() {};
82 82
83 /** 83 /**
84 * Returns a selected backend implementation 84 * Returns a selected backend implementation
85 * @param type the type of the backend 85 * @param type the type of the backend
86 * @param database the type of the used database 86 * @param database the type of the used database
87 * @param appName The name of your application. It will be passed on to the backend. 87 * @param appName The name of your application. It will be passed on to the backend.
88 * @param filename Filename of the database file if you don't want to access the default 88 * @param filename Filename of the database file if you don't want to access the default
89 * @see OPimGlobal()
89 */ 90 */
90 static T* create( OPimGlobal::PimType type, OPimGlobal::DatabaseStyle database, 91 static T* create( OPimGlobal::PimType type, OPimGlobal::DatabaseStyle database,
91 const QString& appName, const QString& filename = QString::null ){ 92 const QString& appName, const QString& filename = QString::null ){
92 qWarning("Selected backend for %d is: %d", type, database ); 93 qWarning("Selected backend for %d is: %d", type, database );
93 // If we should use the dafult database style, we have to request it 94 // If we should use the dafult database style, we have to request it
94 OPimGlobal::DatabaseStyle use_database = database; 95 OPimGlobal::DatabaseStyle use_database = database;
95 if ( use_database == OPimGlobal::DEFAULT ){ 96 if ( use_database == OPimGlobal::DEFAULT ){
96 use_database = defaultDB( type ); 97 use_database = defaultDB( type );
97 } 98 }
98 99
99 switch ( type ){ 100 switch ( type ){
100 case OPimGlobal::TODOLIST: 101 case OPimGlobal::TODOLIST:
101 102
102 switch ( use_database ){ 103 switch ( use_database ){
103 default: // Use SQL if something weird is given. 104 default: // Use SQL if something weird is given.
104 // Fall through !! 105 // Fall through !!
105 case OPimGlobal::SQL: 106 case OPimGlobal::SQL:
106#ifdef __USE_SQL 107#ifdef __USE_SQL
107 return (T*) new OPimTodoAccessBackendSQL( filename ); 108 return (T*) new OPimTodoAccessBackendSQL( filename );
108 break; 109 break;
109#else 110#else
110 qWarning ("OBackendFactory:: sql Backend for TODO not implemented! Using XML instead!"); 111 qWarning ("OBackendFactory:: sql Backend for TODO not implemented! Using XML instead!");
111 // Fall through !! 112 // Fall through !!
112#endif 113#endif
@@ -144,79 +145,80 @@ class OBackendFactory
144#ifdef __USE_SQL 145#ifdef __USE_SQL
145 return (T*) new ODateBookAccessBackend_SQL( appName, filename ); 146 return (T*) new ODateBookAccessBackend_SQL( appName, filename );
146 break; 147 break;
147#else 148#else
148 qWarning("OBackendFactory:: sql Backend for DATEBOOK not implemented! Using XML instead!"); 149 qWarning("OBackendFactory:: sql Backend for DATEBOOK not implemented! Using XML instead!");
149 // Fall through !! 150 // Fall through !!
150#endif 151#endif
151 case OPimGlobal::XML: 152 case OPimGlobal::XML:
152 return (T*) new ODateBookAccessBackend_XML( appName, filename ); 153 return (T*) new ODateBookAccessBackend_XML( appName, filename );
153 break; 154 break;
154 case OPimGlobal::VCARD: 155 case OPimGlobal::VCARD:
155 qWarning("OBackendFactory:: VCal Backend for DATEBOOK not implemented!"); 156 qWarning("OBackendFactory:: VCal Backend for DATEBOOK not implemented!");
156 return (T*) NULL; 157 return (T*) NULL;
157 break; 158 break;
158 } 159 }
159 default: 160 default:
160 return (T*) NULL; 161 return (T*) NULL;
161 } 162 }
162 163
163 } 164 }
164 165
165 /** 166 /**
166 * Returns the style of the default database which is used to contact PIM data. 167 * Returns the style of the default database which is used to contact PIM data.
167 * @param type the type of the backend 168 * @param type the type of the backend
168 * @see OPimGlobal 169 * @see OPimGlobal()
169 */ 170 */
170 static OPimGlobal::DatabaseStyle defaultDB( OPimGlobal::PimType type ){ 171 static OPimGlobal::DatabaseStyle defaultDB( OPimGlobal::PimType type ){
171 QString group_name; 172 QString group_name;
172 switch ( type ){ 173 switch ( type ){
173 case OPimGlobal::TODOLIST: 174 case OPimGlobal::TODOLIST:
174 group_name = "todo"; 175 group_name = "todo";
175 break; 176 break;
176 case OPimGlobal::CONTACTLIST: 177 case OPimGlobal::CONTACTLIST:
177 group_name = "contact"; 178 group_name = "contact";
178 break; 179 break;
179 case OPimGlobal::DATEBOOK: 180 case OPimGlobal::DATEBOOK:
180 group_name = "datebook"; 181 group_name = "datebook";
181 break; 182 break;
182 default: 183 default:
183 group_name = "unknown"; 184 group_name = "unknown";
184 } 185 }
185 186
186 Config config( "pimaccess" ); 187 Config config( "pimaccess" );
187 config.setGroup ( group_name ); 188 config.setGroup ( group_name );
188 QString db_String = config.readEntry( "usebackend", "xml" ); 189 QString db_String = config.readEntry( "usebackend", "xml" );
189 190
190 QAsciiDict<int> dictDbTypes( OPimGlobal::_END_DatabaseStyle ); 191 QAsciiDict<int> dictDbTypes( OPimGlobal::_END_DatabaseStyle );
191 dictDbTypes.setAutoDelete( TRUE ); 192 dictDbTypes.setAutoDelete( TRUE );
192 193
193 dictDbTypes.insert( "xml", new int (OPimGlobal::XML) ); 194 dictDbTypes.insert( "xml", new int (OPimGlobal::XML) );
194 dictDbTypes.insert( "sql", new int (OPimGlobal::SQL) ); 195 dictDbTypes.insert( "sql", new int (OPimGlobal::SQL) );
195 dictDbTypes.insert( "vcard", new int (OPimGlobal::VCARD) ); 196 dictDbTypes.insert( "vcard", new int (OPimGlobal::VCARD) );
196 197
197 int* db_find = dictDbTypes[ db_String ]; 198 int* db_find = dictDbTypes[ db_String ];
198 199
199 if ( !db_find ) 200 if ( !db_find )
200 return OPimGlobal::UNKNOWN; 201 return OPimGlobal::UNKNOWN;
201 202
202 return (OPimGlobal::DatabaseStyle) *db_find; 203 return (OPimGlobal::DatabaseStyle) *db_find;
203 } 204 }
204 205
205 206
206 /** 207 /**
207 * Returns the default backend implementation for backendName. Which one is used, is defined 208 * Returns the default backend implementation for backendName. Which one is used, is defined
208 * by the configfile "pimaccess.conf". 209 * by the configfile "pimaccess.conf".
209 * @param type The type of the backend (@see OPimGlobal()) 210 * @param type The type of the backend (@see OPimGlobal())
210 * @param appName The name of your application. It will be passed on to the backend 211 * @param appName The name of your application. It will be passed on to the backend
212 * @see OPimGlobal()
211 */ 213 */
212 static T* defaultBackend( OPimGlobal::PimType type, const QString& appName ){ 214 static T* defaultBackend( OPimGlobal::PimType type, const QString& appName ){
213 return create( type, OPimGlobal::DEFAULT, appName ); 215 return create( type, OPimGlobal::DEFAULT, appName );
214 } 216 }
215 private: 217 private:
216 OBackendPrivate* d; 218 OBackendPrivate* d;
217 219
218}; 220};
219 221
220} 222}
221 223
222#endif 224#endif
diff --git a/libopie2/opiepim/core/opimaccessfactory.h b/libopie2/opiepim/core/opimaccessfactory.h
index ee55ba5..3cd448e 100644
--- a/libopie2/opiepim/core/opimaccessfactory.h
+++ b/libopie2/opiepim/core/opimaccessfactory.h
@@ -41,80 +41,82 @@ using namespace Opie::Pim;
41namespace Opie { 41namespace Opie {
42 42
43 43
44/** 44/**
45 * This class is our factory for creating PIM access objects. You should use these objects to load, store and search 45 * This class is our factory for creating PIM access objects. You should use these objects to load, store and search
46 * information in our PIM databases. Currently we support objects for accessing the datebook, the contact- and the 46 * information in our PIM databases. Currently we support objects for accessing the datebook, the contact- and the
47 * todolist. 47 * todolist.
48 * @see OPimGlobal for more information of used values. 48 * @see OPimGlobal for more information of used values.
49 * 49 *
50 * This class - as the whole PIM Api - is making use of templates 50 * This class - as the whole PIM Api - is making use of templates
51 * 51 *
52 * Example for getting an access object for the XML database of todolist: 52 * Example for getting an access object for the XML database of todolist:
53 * <pre> 53 * <pre>
54 * OPimTodoAccess* access = OPimAccessFactory<OPimTodoAccess>::create( OPimGlobal::TODOLIST, OPimGlobal::XML, "example" ); 54 * OPimTodoAccess* access = OPimAccessFactory<OPimTodoAccess>::create( OPimGlobal::TODOLIST, OPimGlobal::XML, "example" );
55 * </pre> 55 * </pre>
56 * 56 *
57 * @author Stefan Eilers 57 * @author Stefan Eilers
58 * @version 0.1 58 * @version 0.1
59 */ 59 */
60 60
61template<class T> 61template<class T>
62class OPimAccessFactory 62class OPimAccessFactory
63{ 63{
64 public: 64 public:
65
66 // Maybe we should introduce a global class for storing such global enums
67 // (something like opimglobal.h) ? (eilers)
68
69 OPimAccessFactory() {}; 65 OPimAccessFactory() {};
70 66
71 /** 67 /**
72 * Returns the selected PIM access-object. 68 * Returns the selected PIM access-object.
73 * @param type Type of the selected database (addressbook, todolist or datebook) 69 * @param type Type of the selected database (addressbook, todolist or datebook)
74 * @param dbStyle Which database style should be used (xml, sql, vcard) 70 * @param dbStyle Which database style should be used (xml, sql, vcard)
75 * @param appName "Name" of your application. This should be any constant string which is used 71 * @param appName "Name" of your application. This should be any constant string which is used
76 * by some backends for creating special files (i.e.journal files). Please keep the 72 * by some backends for creating special files (i.e.journal files). Please keep the
77 * string unique for your application ! 73 * string unique for your application !
78 * @see OPimGlobal 74 * @param fileName Filename of database if something different as the default should be used.
75 * @see OPimGlobal()
79 */ 76 */
80 static T* create( OPimGlobal::PimType type, OPimGlobal::DatabaseStyle dbStyle, const QString& appName ){ 77 static T* create( OPimGlobal::PimType type, OPimGlobal::DatabaseStyle dbStyle, const QString& appName,
78 const QString& fileName = QString::null ){
81 OPimBase *base; 79 OPimBase *base;
82 switch ( type ){ 80 switch ( type ){
83 case OPimGlobal::TODOLIST: 81 case OPimGlobal::TODOLIST:
84 base = new OPimTodoAccess( OBackendFactory<OPimTodoAccessBackend>::create( type, dbStyle, appName ) ); 82 base = new OPimTodoAccess( OBackendFactory<OPimTodoAccessBackend>::create( type, dbStyle,
83 appName, fileName ) );
85 break; 84 break;
86 case OPimGlobal::CONTACTLIST: 85 case OPimGlobal::CONTACTLIST:
87 base = new OPimContactAccess( QString::null, QString::null, OBackendFactory<OPimContactAccessBackend>::create( type, dbStyle, appName ) ); 86 base = new OPimContactAccess( QString::null, QString::null,
87 OBackendFactory<OPimContactAccessBackend>::create( type, dbStyle,
88 appName, fileName ) );
88 break; 89 break;
89 case OPimGlobal::DATEBOOK: 90 case OPimGlobal::DATEBOOK:
90 base = new ODateBookAccess( OBackendFactory<ODateBookAccessBackend>::create( type, dbStyle, appName ) ); 91 base = new ODateBookAccess( OBackendFactory<ODateBookAccessBackend>::create( type, dbStyle,
92 appName, fileName ) );
91 break; 93 break;
92 default: 94 default:
93 return 0l; 95 return 0l;
94 } 96 }
95 return static_cast<T*>( base ); 97 return static_cast<T*>( base );
96 } 98 }
97 99
98 100
99 /** 101 /**
100 * Returns the selected PIM access-object, using the default database style 102 * Returns the selected PIM access-object, using the default database style
101 * Which style is selected is defined in the configfile "pimaccess.conf" in 103 * Which style is selected is defined in the configfile "pimaccess.conf" in
102 * the directory "Settings" 104 * the directory "Settings"
103 * @param type Type of the selected database (addressbook, todolist or datebook) 105 * @param type Type of the selected database (addressbook, todolist or datebook)
104 * @param appName "Name" of your application. This should be any constant string which is used 106 * @param appName "Name" of your application. This should be any constant string which is used
105 * by some backends for creating special files (i.e.journal files). Please keep the 107 * by some backends for creating special files (i.e.journal files). Please keep the
106 * string unique for your application ! 108 * string unique for your application !
107 * @see OPimGlobal 109 * @see OPimGlobal()
108 * 110 *
109 */ 111 */
110 static T* defaultAccess( typename OPimGlobal::PimType type, const QString& appName ){ 112 static T* defaultAccess( typename OPimGlobal::PimType type, const QString& appName ){
111 113
112 return create( type, OPimGlobal::DEFAULT, appName ); 114 return create( type, OPimGlobal::DEFAULT, appName );
113 115
114 } 116 }
115}; 117};
116 118
117} 119}
118 120
119 121
120#endif 122#endif