ButeoSynchronizationFramework
PluginManager.h
1 /*
2  * This file is part of buteo-syncfw package
3  *
4  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
5  * Copyright (C) 2014-2015 Jolla Ltd.
6  *
7  * Contact: Sateesh Kavuri <sateesh.kavuri@nokia.com>
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public License
11  * version 2.1 as published by the Free Software Foundation.
12  *
13  * This library is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21  * 02110-1301 USA
22  *
23  */
24 #ifndef PLUGINMANAGER_H
25 #define PLUGINMANAGER_H
26 
27 #include <QString>
28 #include <QMap>
29 #include <QReadWriteLock>
30 #include <QProcess>
31 
32 namespace Buteo {
33 
34 class StorageChangeNotifierPlugin;
35 class StoragePlugin;
36 class ClientPlugin;
37 class ServerPlugin;
38 class PluginCbInterface;
39 class SyncProfile;
40 class Profile;
41 
42 class ClientPluginTest;
43 class ServerPluginTest;
44 class StoragePluginTest;
45 
46 typedef ClientPlugin* (*FUNC_CREATE_CLIENT)( const QString&,
47  const SyncProfile&,
48  PluginCbInterface* );
49 typedef void (*FUNC_DESTROY_CLIENT)( ClientPlugin* );
50 
51 typedef ServerPlugin* (*FUNC_CREATE_SERVER)( const QString&,
52  const Profile&,
53  PluginCbInterface* );
54 typedef void (*FUNC_DESTROY_SERVER)( ServerPlugin* );
55 
56 typedef StoragePlugin* (*FUNC_CREATE_STORAGE)(const QString&);
57 typedef void (*FUNC_DESTROY_STORAGE)(StoragePlugin*);
58 
59 typedef StorageChangeNotifierPlugin* (*FUNC_CREATE_STORAGECHANGENOTIFIER)(const QString&);
60 typedef void (*FUNC_DESTROY_STORAGECHANGENOTIFIER)(StorageChangeNotifierPlugin*);
61 
67 class PluginManager : public QObject
68 {
69  Q_OBJECT
70 
71 public:
72  PluginManager();
77  PluginManager( const QString &aPluginPath );
78 
83 
89  StorageChangeNotifierPlugin* createStorageChangeNotifier( const QString& aStorageName );
90 
96 
102  StoragePlugin* createStorage( const QString& aPluginName );
103 
108  void destroyStorage( StoragePlugin* aPlugin );
109 
117  ClientPlugin* createClient( const QString& aPluginName,
118  const SyncProfile& aProfile,
119  PluginCbInterface *aCbInterface );
120 
125  void destroyClient( ClientPlugin* aPlugin );
126 
134  ServerPlugin* createServer( const QString& aPluginName,
135  const Profile& aProfile,
136  PluginCbInterface *aCbInterface );
137 
142  void destroyServer( ServerPlugin *aPlugin );
143 
144 protected slots:
145 
146  void onProcessFinished( int exitCode, QProcess::ExitStatus exitStatus );
147 
148 private:
149 
150  struct DllInfo
151  {
152  QString iPath;
153  void* iHandle;
154  int iRefCount;
155 
156  DllInfo() : iHandle( NULL ), iRefCount( 0 ) { }
157  };
158 
159 
160  void loadPluginMaps( const QString aFilter, QMap<QString, QString>& aTargetMap );
161 
162  void loadOOPPluginMaps( const QString aFilter, QMap<QString, QString>& aTargetMap );
163 
164  void* loadDll( const QString& aPath );
165 
166  void* getDllHandle( const QString& aPath );
167 
168  void unloadDll( const QString& aPath );
169 
170  static bool killProcess( const QString& aPath );
171 
172  QProcess* startOOPPlugin( const QString& aPath,
173  const QString& aPluginName,
174  const QString& aProfileName );
175 
176  void stopOOPPlugin( const QString& aPath );
177 
178  QString iPluginPath;
179 
180  QMap<QString, QString> iStorageChangeNotifierMaps;
181  QMap<QString, QString> iStorageMaps;
182  QMap<QString, QString> iClientMaps;
183  QMap<QString, QString> iServerMaps;
184 
185  QMap<QString, QString> iOopClientMaps;
186  QMap<QString, QString> iOoPServerMaps;
187 
188  QList<DllInfo> iLoadedDlls;
189 
190  QReadWriteLock iDllLock;
191 
192  QString iProcBinaryPath;
193 
194 #ifdef SYNCFW_UNIT_TESTS
195  friend class ClientPluginTest;
196  friend class ServerPluginTest;
197  friend class StoragePluginTest;
198 #endif
199 
200 };
201 
202 }
203 
204 #endif
Buteo::PluginManager::destroyStorageChangeNotifier
void destroyStorageChangeNotifier(StorageChangeNotifierPlugin *aPlugin)
Destroys a storage change notifier plugin instance.
Definition: PluginManager.cpp:140
Buteo::PluginManager
Manages plugins.
Definition: PluginManager.h:67
QList< DllInfo >
Buteo::StoragePlugin
Base class for storage plugins.
Definition: StoragePlugin.h:38
QMap< QString, QString >
Buteo::PluginManager::createStorage
StoragePlugin * createStorage(const QString &aPluginName)
Creates a new storage plugin instance.
Definition: PluginManager.cpp:178
Buteo::ServerPlugin
Base class for server plugins.
Definition: ServerPlugin.h:36
Buteo::SyncProfile
A top level synchronization profile.
Definition: SyncProfile.h:48
Buteo::PluginManager::destroyServer
void destroyServer(ServerPlugin *aPlugin)
Destroys a server plugin.
Definition: PluginManager.cpp:442
Buteo::PluginManager::createClient
ClientPlugin * createClient(const QString &aPluginName, const SyncProfile &aProfile, PluginCbInterface *aCbInterface)
Creates a new client plugin instance.
Definition: PluginManager.cpp:258
Buteo::StorageChangeNotifierPlugin
Implement this class to notify about changes in a specific storage - contacts/calendar/sms,...
Definition: StorageChangeNotifierPlugin.h:15
Buteo::PluginManager::createServer
ServerPlugin * createServer(const QString &aPluginName, const Profile &aProfile, PluginCbInterface *aCbInterface)
Creates a new server plugin instance.
Definition: PluginManager.cpp:373
Buteo::Profile
This class represents a single profile, a collection of settings or data releated to some entity.
Definition: Profile.h:52
Buteo::PluginManager::destroyClient
void destroyClient(ClientPlugin *aPlugin)
Destroys a client plugin instance.
Definition: PluginManager.cpp:327
Buteo::PluginManager::~PluginManager
~PluginManager()
Destructor.
Definition: PluginManager.cpp:86
Buteo::PluginManager::destroyStorage
void destroyStorage(StoragePlugin *aPlugin)
Destroys a storage plugin instance.
Definition: PluginManager.cpp:219
Buteo::ClientPlugin
Base class for client plugins.
Definition: ClientPlugin.h:37
Buteo::PluginCbInterface
Interface which client and server plugins can use to communicate with synchronization daemon.
Definition: PluginCbInterface.h:38
Buteo::PluginManager::createStorageChangeNotifier
StorageChangeNotifierPlugin * createStorageChangeNotifier(const QString &aStorageName)
Creates a new storage change notifier plugin for the storage aStoragName.
Definition: PluginManager.cpp:100