Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

opimresolver.cpp

Go to the documentation of this file.
00001 /*
00002                              This file is part of the Opie Project
00003                              Copyright (C) The Main Author <main-author@whereever.org>
00004               =.             Copyright (C) The Opie Team <opie-devel@handhelds.org>
00005             .=l.
00006            .>+-=
00007  _;:,     .>    :=|.         This program is free software; you can
00008 .> <`_,   >  .   <=          redistribute it and/or  modify it under
00009 :`=1 )Y*s>-.--   :           the terms of the GNU Library General Public
00010 .="- .-=="i,     .._         License as published by the Free Software
00011  - .   .-<_>     .<>         Foundation; either version 2 of the License,
00012      ._= =}       :          or (at your option) any later version.
00013     .%`+i>       _;_.
00014     .i_,=:_.      -<s.       This program is distributed in the hope that
00015      +  .  -:.       =       it will be useful,  but WITHOUT ANY WARRANTY;
00016     : ..    .:,     . . .    without even the implied warranty of
00017     =_        +     =;=|`    MERCHANTABILITY or FITNESS FOR A
00018   _.=:.       :    :=>`:     PARTICULAR PURPOSE. See the GNU
00019 ..}^=.=       =       ;      Library General Public License for more
00020 ++=   -.     .`     .:       details.
00021  :     =  ...= . :.=-
00022  -.   .:....=;==+<;          You should have received a copy of the GNU
00023   -_. . .   )=.  =           Library General Public License along with
00024     --        :-=`           this library; see the file COPYING.LIB.
00025                              If not, write to the Free Software Foundation,
00026                              Inc., 59 Temple Place - Suite 330,
00027                              Boston, MA 02111-1307, USA.
00028 */
00029 
00030 #include "opimresolver.h"
00031 
00032 /* OPIE */
00033 #include <opie2/ocontactaccess.h>
00034 #include <opie2/otodoaccess.h>
00035 #include <qpe/qcopenvelope_qws.h>
00036 
00037 /* QT */
00038 #include <qcopchannel_qws.h>
00039 
00040 namespace Opie {
00041 
00042 OPimResolver* OPimResolver::m_self = 0l;
00043 
00044 OPimResolver::OPimResolver() {
00045     /* the built in channels */
00046     m_builtIns << "Todolist" << "Addressbook" << "Datebook";
00047 }
00048 OPimResolver* OPimResolver::self() {
00049     if (!m_self)
00050         m_self = new OPimResolver();
00051 
00052     return m_self;
00053 }
00054 
00055 /*
00056  * FIXME use a cache here too
00057  */
00058 OPimRecord* OPimResolver::record( const QString& service, int uid ) {
00059     OPimRecord* rec = 0l;
00060     OPimBase* base = backend( service );
00061 
00062     if ( base )
00063         rec = base->record( uid );
00064     delete base;
00065 
00066     return rec;
00067 }
00068 OPimRecord* OPimResolver::record( const QString& service ) {
00069     return record( serviceId( service ) );
00070 }
00071 OPimRecord* OPimResolver::record( int rtti ) {
00072     OPimRecord* rec = 0l;
00073     switch( rtti ) {
00074     case 1: /* todolist */
00075         rec = new OPimTodo();
00076     case 2: /* contact  */
00077         rec = new OPimContact();
00078     default:
00079         break;
00080     }
00081     /*
00082      * FIXME resolve externally
00083      */
00084     if (!rec ) {
00085         ;
00086     }
00087     return 0l;
00088 }
00089 bool OPimResolver::isBuiltIn( const QString& str) const{
00090     return m_builtIns.contains( str );
00091 }
00092 QCString OPimResolver::qcopChannel( enum BuiltIn& built)const {
00093     QCString str("QPE/");
00094     switch( built ) {
00095     case TodoList:
00096         str += "Todolist";
00097         break;
00098     case DateBook:
00099         str += "Datebook";
00100         break;
00101     case AddressBook:
00102         str += "Addressbook";
00103         break;
00104     default:
00105         break;
00106     }
00107 
00108     return str;
00109 }
00110 QCString OPimResolver::qcopChannel( const QString& service )const {
00111     QCString str("QPE/");
00112     str += service.latin1();
00113     return str;
00114 }
00115 /*
00116  * Implement services!!
00117  * FIXME
00118  */
00119 QCString OPimResolver::applicationChannel( enum BuiltIn& built)const {
00120     QCString str("QPE/Application/");
00121     switch( built ) {
00122     case TodoList:
00123         str += "todolist";
00124         break;
00125     case DateBook:
00126         str += "datebook";
00127         break;
00128     case AddressBook:
00129         str += "addressbook";
00130         break;
00131     }
00132 
00133     return str;
00134 }
00135 QCString OPimResolver::applicationChannel( const QString& service )const {
00136     QCString str("QPE/Application/");
00137 
00138     if ( isBuiltIn( service ) ) {
00139         if ( service == "Todolist" )
00140             str += "todolist";
00141         else if ( service == "Datebook" )
00142             str += "datebook";
00143         else if ( service == "Addressbook" )
00144             str += "addressbook";
00145     }else
00146         ; // FIXME for additional stuff
00147 
00148     return str;
00149 }
00150 QStringList OPimResolver::services()const {
00151     return m_builtIns;
00152 }
00153 QString OPimResolver::serviceName( int rtti ) const{
00154     QString str;
00155     switch ( rtti ) {
00156     case TodoList:
00157         str = "Todolist";
00158         break;
00159     case DateBook:
00160         str = "Datebook";
00161         break;
00162     case AddressBook:
00163         str = "Addressbook";
00164         break;
00165     default:
00166         break;
00167     }
00168     return str;
00169     // FIXME me for 3rd party
00170 }
00171 int OPimResolver::serviceId( const QString& service ) {
00172     int rtti = 0;
00173     if ( service == "Todolist" )
00174         rtti = TodoList;
00175     else if ( service == "Datebook" )
00176         rtti = DateBook;
00177     else if ( service == "Addressbook" )
00178         rtti = AddressBook;
00179 
00180     return rtti;
00181 }
00185 bool OPimResolver::add( const QString& service,  const OPimRecord& rec) {
00186     if ( QCopChannel::isRegistered( applicationChannel( service ) ) ) {
00187         QByteArray data;
00188         QDataStream arg(data, IO_WriteOnly );
00189         if ( rec.saveToStream( arg ) ) {
00190             QCopEnvelope env( applicationChannel( service ), "add(int,QByteArray)" );
00191             env << rec.rtti();
00192             env << data;
00193         }else
00194             return false;
00195     }else{
00196         OPimBase* base = backend( service );
00197         if (!base ) return false;
00198 
00199         base->load();
00200         base->add( rec );
00201         base->save();
00202         delete base;
00203     }
00204 
00205     return true;
00206 }
00207 OPimBase* OPimResolver::backend( const QString& service ) {
00208     return backend( serviceId( service ) );
00209 }
00210 OPimBase* OPimResolver::backend( int rtti ) {
00211     OPimBase* base = 0l;
00212     switch( rtti ) {
00213     case TodoList:
00214         base = new OPimTodoAccess();
00215         break;
00216     case DateBook:
00217         break;
00218     case AddressBook:
00219         base = new OPimContactAccess("Resolver");
00220         break;
00221     default:
00222         break;
00223     }
00224     // FIXME for 3rd party
00225     if (!base )
00226         ;
00227 
00228     return base;
00229 }
00230 
00231 }

Generated on Sat Nov 5 16:16:22 2005 for OPIE by  doxygen 1.4.2