emailservices/nmclientapi/src/nmapidatapluginfactory.cpp
changeset 23 2dc6caa42ec3
parent 18 578830873419
child 30 759dc5235cdb
--- a/emailservices/nmclientapi/src/nmapidatapluginfactory.cpp	Mon May 03 12:23:15 2010 +0300
+++ b/emailservices/nmclientapi/src/nmapidatapluginfactory.cpp	Fri May 14 15:41:10 2010 +0300
@@ -15,38 +15,38 @@
  *
  */
 
-#include "nmapidataplugininterface.h"
+#include "nmdataplugininterface.h"
 #include "nmapidatapluginfactory.h"
+
 // Qt
-#include <QList>
 #include <QPluginLoader>
 #include <QDir>
 #include <QApplication>
 #include <QLocale>
+#include <QObject>
 
 // nmailbase
 #include "nmcommon.h"
 #include "nmmailbox.h"
-#include "../../../inc/nmmessageenvelope.h"
+#include "nmmessageenvelope.h"
 #include "nmmessage.h"
 #include "nmmessagepart.h"
 #include "nmfolder.h"
 
 /*!
- \class NmDataPluginFactory
- \brief The NmDataPluginFactory class creates NmDataPlugin instance.
+ \class NmApiDataPluginFactory
+ \brief The NmApiDataPluginFactory class creates NmDataPlugin instance.
 
  */
-NmDataPluginFactory *NmDataPluginFactory::mInstance = NULL;
-int NmDataPluginFactory::mReferenceCount = 0;
-QList<QObject*> *NmDataPluginFactory::mPluginArray = NULL;
-QList<QPluginLoader*> NmDataPluginFactory::mPluginLoaderArray = QList<QPluginLoader*> ();
-const int INTERFACEPLUGININDEX = 0;
+NmApiDataPluginFactory *NmApiDataPluginFactory::mInstance = NULL;
+int NmApiDataPluginFactory::mReferenceCount = 0;
+QObject *NmApiDataPluginFactory::mPlugin = NULL;
+QPluginLoader *NmApiDataPluginFactory::mPluginLoader = NULL;
 
 /*!
 
  */
-NmDataPluginFactory::NmDataPluginFactory()
+NmApiDataPluginFactory::NmApiDataPluginFactory()
 {
 
 }
@@ -54,26 +54,26 @@
 /*!
 
  */
-NmDataPluginFactory::~NmDataPluginFactory()
+NmApiDataPluginFactory::~NmApiDataPluginFactory()
 {
-    if (mPluginArray) {
-        qDeleteAll(mPluginArray->begin(), mPluginArray->end());
-        mPluginArray->clear();
-        delete mPluginArray;
-        mPluginArray = NULL;
+    if (mPlugin) {
+        delete mPlugin;
+        mPlugin = NULL;
     }
-
-    qDeleteAll(mPluginLoaderArray.constBegin(), mPluginLoaderArray.constEnd());
-    mPluginLoaderArray.clear();
+    
+    if(mPluginLoader){
+        delete mPluginLoader;
+        mPluginLoader = NULL;
+    }
 }
 
 /*!
 
  */
-NmDataPluginFactory *NmDataPluginFactory::instance()
+NmApiDataPluginFactory *NmApiDataPluginFactory::instance()
 {
     if (!mInstance) {
-        mInstance = new NmDataPluginFactory();
+        mInstance = new NmApiDataPluginFactory();
     }
     mReferenceCount++;
     return mInstance;
@@ -82,7 +82,7 @@
 /*!
 
  */
-void NmDataPluginFactory::releaseInstance(NmDataPluginFactory *&instance)
+void NmApiDataPluginFactory::releaseInstance(NmApiDataPluginFactory *&instance)
 {
     //can't have passed out instances if we don't have any
     if (mInstance) {
@@ -97,83 +97,46 @@
     }
 }
 
-/*!
-
- */
-NmDataPluginInterface *NmDataPluginFactory::interfaceInstance(QObject *plugin)
-{
-    NmDataPluginInterface *pluginInterface = NULL;
-    if (plugin) {
-        pluginInterface = qobject_cast<NmDataPluginInterface*> (plugin);
-    }
-    return pluginInterface;
-}
 
 /*!
 
  */
-NmDataPluginInterface *NmDataPluginFactory::interfaceInstance(NmId mailboxId)
+NmDataPluginInterface *NmApiDataPluginFactory::interfaceInstance()
 {
-    return interfaceInstance(pluginInstance(mailboxId));
-}
-
-/*!
-
- */
-QObject *NmDataPluginFactory::pluginInstance(NmId mailboxId)
-{
-    Q_UNUSED(mailboxId);
-    return pluginInstances()->at(INTERFACEPLUGININDEX);
+    if (!mPlugin) {
+        mPlugin = loadPlugin();
+    }
+    return qobject_cast<NmDataPluginInterface*> (mPlugin);
 }
 
 /*!
 
  */
-QList<QObject*> *NmDataPluginFactory::pluginInstances()
+QObject *NmApiDataPluginFactory::loadPlugin()
 {
-    //if plugins have not been already created, do it now.
-    if (!mPluginArray) {
-        mPluginArray = new QList<QObject*> ();
-    }
-    if (mPluginArray->count() == 0) {
-#ifdef Q_OS_SYMBIAN
-
+    if (!mPluginLoader) {
         const QString KPluginDirectory = "c:\\resource\\plugins";
         QDir pluginDir = QDir(KPluginDirectory);
         const QString KFrameworkPluginName = "nmframeworkadapter.qtplugin";
-        QObject *frameworkPlugin = loadPlugin(pluginDir, KFrameworkPluginName);
-        mPluginArray->append(frameworkPlugin);
+        /*!
+         This creates plugin entity.
+         */
+        mPluginLoader = new QPluginLoader(pluginDir.absoluteFilePath(KFrameworkPluginName));
 
-#endif
+        mPlugin = mPluginLoader->instance();
+        if(!mPlugin){
+            // We don't have proper plugin instance, so we don't need it's loader.
+            delete mPluginLoader;
+            mPluginLoader = NULL;
+        }
     }
-
-    return mPluginArray;
+    return mPlugin;
 }
 
-/*!
-
- */
-QObject *NmDataPluginFactory::loadPlugin(const QDir& pluginDir, const QString& pluginName)
+QObject *NmApiDataPluginFactory::plugin()
 {
-    /*!
-     This creates plugin entity.
-     */
-    QPluginLoader *loader = new QPluginLoader(pluginDir.absoluteFilePath(pluginName));
-
-    QObject *pluginInstance = loader->instance();
-
-    if (pluginInstance) {
-        // Store QPluginLoader instances to keep plugins alive.
-        // If QPluginLoader instance for a plugin is deleted, then there
-        // is a risk that some component outside will load and unload
-        // plugin, which will lead into situation where plugin is deleted.
-        // This means that instance in mPluginArray will be invalid.
-        mPluginLoaderArray.append(loader);
+    if (!mPlugin) {
+        mPlugin = loadPlugin();
     }
-    else {
-        // We don't have proper plugin instance, so we don't need it's loader.
-        delete loader;
-        loader = NULL;
-    }
-    return pluginInstance;
+    return mPlugin;
 }