messagingapp/msgutils/unidatamodelloader/src/unidatamodelloader.cpp
changeset 23 238255e8b033
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unidatamodelloader/src/unidatamodelloader.cpp	Fri Apr 16 14:56:15 2010 +0300
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Plugin Loader class
+ *
+ */
+
+// System Includes
+
+#include <QDir>
+#include "debugtraces.h"
+
+#include <QLibraryInfo>
+#include <QPluginLoader>
+#include "unidatamodelloader.h"
+#include "unidatamodelplugininterface.h"
+
+//---------------------------------------------------------------
+//UniDataModelLoader::UniDataModelLoader()
+//@see header
+//---------------------------------------------------------------
+UniDataModelLoader::UniDataModelLoader()
+{
+}
+
+//---------------------------------------------------------------
+//UniDataModelLoader::~UniDataModelLoader()
+//@see header
+//---------------------------------------------------------------
+UniDataModelLoader::~UniDataModelLoader()
+{
+    QMap<QString, UniDataModelPluginInterface*>::iterator mapItor;
+    for (mapItor = mDataModelPluginMap.begin(); mapItor
+            != mDataModelPluginMap.end(); ++mapItor)
+    {
+#ifdef _DEBUG_TRACES_
+        qDebug() << "Deleting Handler id:" << mapItor.key();
+#endif
+        UniDataModelPluginInterface* handler = mapItor.value();
+        if (handler)
+            delete handler;
+    }
+    mDataModelPluginMap.clear();
+}
+
+//---------------------------------------------------------------
+//UniDataModelLoader::loadPlugins()
+//@see header
+//---------------------------------------------------------------
+void UniDataModelLoader::loadPlugins()
+{
+    // plugins directory setting for EMULATOR
+#ifdef __WINS__
+    QDir dir(QLibraryInfo::location(QLibraryInfo::PluginsPath));
+    dir.cd("messaging\\datamodel");
+#else
+    // plugins directory setting for HARDWARE IMAGE
+    QDir dir("Z:\\resource\\qt\\plugins\\messaging\\datamodel");
+#endif
+    QString pluginPath = dir.absolutePath();
+#ifdef _DEBUG_TRACES_
+    qDebug() << "Enter LoadPlugin path = " << pluginPath;
+#endif
+
+    // load the plugins
+    QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Readable);
+    foreach (QFileInfo entry, entries) 
+        {
+            QPluginLoader loader(entry.absoluteFilePath());
+            // Check if plugin is already loaded...
+            if (!loader.isLoaded())
+            {
+                UniDataModelPluginInterface* datamodelPlugin = qobject_cast<
+                        UniDataModelPluginInterface*> (loader.instance());
+                if (datamodelPlugin)
+                {
+                	  UniDataModelPluginInterface* pluginInstance = qobject_cast<
+                        UniDataModelPluginInterface*> (datamodelPlugin->createInstance());                        
+                    QString mType = pluginInstance->messageType();
+                    QDEBUG_WRITE_FORMAT("plugin added to map", mType);
+                    mDataModelPluginMap.insert(mType, pluginInstance);
+                }
+            }
+
+        }
+}
+
+//---------------------------------------------------------------
+//UniDataModelLoader::getDataModelPlugin()
+//@see header
+//---------------------------------------------------------------
+UniDataModelPluginInterface* UniDataModelLoader::getDataModelPlugin(
+                                                                    const QString& messageType)
+{
+    if (mDataModelPluginMap.contains(messageType))
+    {
+		QDEBUG_WRITE_FORMAT("getDataModelPlugin messageType is present ", messageType);
+        return mDataModelPluginMap[messageType];
+    }
+    return NULL;
+}