wizardproviders/ftuwizardprovider/src/ftumanifestparser.cpp
changeset 0 c464cd7e2753
child 9 aa22d2c19e57
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wizardproviders/ftuwizardprovider/src/ftumanifestparser.cpp	Mon Apr 19 14:01:47 2010 +0300
@@ -0,0 +1,227 @@
+/*
+* 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:  FTU manifest parser.
+*
+*/
+
+
+#include "ftumanifestparser.h"
+#ifdef Q_OS_SYMBIAN
+#include "ftuwizardproviderinternalcrkeys.h"
+#endif
+#include <QDomDocument>
+#include <QFile>
+#include <QStringList>
+#include <QFileInfo>
+#include <QDir>
+#include <QDebug>
+
+#ifdef Q_OS_SYMBIAN
+
+#include <XQSettingsManager> // for reading cenrep keys
+#endif // Q_OS_SYMBIAN
+
+// ---------------------------------------------------------------------------
+// FtuManifestParser::FtuManifestParser
+// ---------------------------------------------------------------------------
+//
+FtuManifestParser::FtuManifestParser(QObject* aParent)
+    : QObject(aParent)
+{
+}
+
+// ---------------------------------------------------------------------------
+// FtuManifestParser::~FtuManifestParser
+// ---------------------------------------------------------------------------
+//
+FtuManifestParser::~FtuManifestParser()
+{
+
+}
+
+
+// ---------------------------------------------------------------------------
+// FtuManifestParser::parsePluginList
+// ---------------------------------------------------------------------------
+//
+QStringList FtuManifestParser::parsePluginList(const QString& manifestPath)
+{
+    QStringList dllNameList;
+    QStringList pathList;
+    
+    //Check plugin dirs from root of different drives
+    QFileInfoList drives = QDir::drives();
+    int i;
+    for(i = 0; i < drives.count(); i++)
+    {
+        QFileInfo drive = drives.at(i);
+        QString driveLetter = drive.absolutePath();
+        QString path = driveLetter + manifestPath;
+        if(QDir(path).exists())
+        {
+            qDebug() << "ftu:: append to path list: " << path;
+            pathList << path;
+        }
+    }      
+    // Read the configured plugin list.
+    QStringList filesToRead = readManifestFilesFromConfig();
+
+    for(i=0; i < pathList.count(); i++)
+    {
+        QString path = pathList.at(i);
+        QDir dir(path);
+
+        // Use the configured list as a filter while getting the 
+        // manifest files.
+        dir.setNameFilters(filesToRead);
+        QStringList entries = dir.entryList(filesToRead, QDir::Files);
+    
+        qDebug() << "ftu: Configured manifest file count " 
+                 << filesToRead.count()
+                 << " found manifest files from system " << entries.count();
+        
+        // Go through the configured list and find the manifest files.
+        for(int j=0; j < filesToRead.count() ; ++j)
+        {
+            int index = entries.indexOf(filesToRead[j]);
+            qDebug() << "ftu:reading manifest file from "<< index;
+            if(index > -1 && index <= entries.count())
+            {
+                QString fileName = entries[index]; 
+                qDebug() << "ftu:: loading from manifest file: " << fileName;
+                QString path = loadFromXml(dir.absoluteFilePath(fileName));
+                qDebug() << "ftu:: path from manifest: " << path;
+                if(!path.isEmpty())
+                {
+                    dllNameList << path;
+                }
+            }
+        }    
+    }
+    return dllNameList;
+}
+
+// ---------------------------------------------------------------------------
+// FtuManifestParser::readManifestFilesFromConfig
+// ---------------------------------------------------------------------------
+//
+
+QStringList FtuManifestParser::readManifestFilesFromConfig()
+{
+    QStringList filesFromConf;
+#ifdef Q_OS_SYMBIAN
+    
+    XQSettingsManager* settingsManager = new XQSettingsManager();
+    
+    XQSettingsKey numberOfPluginsKey(XQSettingsKey::TargetCentralRepository,
+                                     KCrUidFtuWizardProvider,
+                                     KFtuNumberOfWizardPlugins);
+    
+    bool ok = false;
+    int numberOfPlugins = settingsManager->readItemValue(
+                                              numberOfPluginsKey).toInt(&ok);
+
+    qDebug() << "Ftu:FtuManifestParser reading the nbr of plugins resulted: "
+             << ok;
+    
+    if(ok)
+    {
+        qDebug() << "Ftu:reading config for " << numberOfPlugins 
+                 << " plugins";
+        
+        
+        for(int i=1; i <= numberOfPlugins ; ++i)
+        {
+            XQSettingsKey fileKey(XQSettingsKey::TargetCentralRepository,
+                                  KCrUidFtuWizardProvider,
+                                  KFtuNumberOfWizardPlugins + i);
+            
+            QString file = settingsManager->readItemValue(fileKey, 
+                                   XQSettingsManager::TypeString).toString();
+            qDebug() << "Ftu:Reading filename from conf :" << file;            
+            filesFromConf << file;
+        }
+    }
+    delete settingsManager;
+#else
+    // Add hardcoded strings for windows environment,
+    // currently the settings manager is not available for windows.
+	filesFromConf << "ftusocialmediawizard.manifest"
+                  << "ftudatetimelocationwizard.manifest"
+				  << "ftuexamplewizard.manifest"
+				  << "ftuemailwizard.manifest";
+#endif    
+    return filesFromConf;
+}
+
+// ---------------------------------------------------------------------------
+// FtuManifestParser::loadFromXml
+// ---------------------------------------------------------------------------
+//
+QString FtuManifestParser::loadFromXml(const QString& aFileName)
+{
+
+    qDebug() << "ftu:: ManifestParser::loadFromXml " << aFileName;
+    QFile file(aFileName);
+    
+    if(!file.exists())
+    {
+        qDebug() << "ftu: file does not exist";
+        return QString();
+    }
+
+    QDomDocument document;
+    if(!document.setContent(&file))
+    {
+        return QString();
+    }
+
+    QDomElement element = document.documentElement();
+    if(element.tagName() != "plugin")
+    {
+        qDebug() << "ftu: Tag name plugin not found";
+        return QString();
+    }
+
+    QDomNodeList plugins = element.elementsByTagName("runtime");
+
+    for(int i = 0; i < plugins.count(); ++i)
+    {
+        element = plugins.at(i).toElement();
+        QString attr = parseAttribute(element, "library");
+        qDebug() << "ftu::parsed attr " << attr;
+        return attr;
+    }
+    return QString();
+}
+
+
+// ---------------------------------------------------------------------------
+// FtuManifestParser::parseAttribute
+// ---------------------------------------------------------------------------
+//
+QString FtuManifestParser::parseAttribute(QDomElement& element, 
+                                          const QString& attributeName) const
+{
+    QDomAttr attribute = element.attributeNode(attributeName);
+    if(attribute.isNull() || attribute.value().isEmpty())
+    {
+        qDebug() << "ftu: attribute not parsed [attr name]" << attributeName;
+        return QString();
+    }
+
+    return attribute.value();
+}
+
+