harvester/contentinfodb/src/ccontentinfodbparser.cpp
author hgs
Tue, 05 Oct 2010 13:15:12 +0530
changeset 23 d4d56f5e7c55
permissions -rw-r--r--
201039

/*
 * 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:  Implementation of xml parser for contentinfodb 
 *
 */
#include "contentinfodbparser.h"
#include <qdom.h>
#include <qfile.h> 
// ---------------------------------------------------------------------------
// ContentInfoDbParser::ContentInfoDbParser()
// ---------------------------------------------------------------------------
//
ContentInfoDbParser::ContentInfoDbParser()
    {
    }
// ---------------------------------------------------------------------------
// ContentInfoDbParser::~ContentInfoDbParser()
// ---------------------------------------------------------------------------
//
ContentInfoDbParser::~ContentInfoDbParser()
    {

    }
// ---------------------------------------------------------------------------
// ContentInfoDbParser::parse()
// ---------------------------------------------------------------------------
//
bool ContentInfoDbParser::parse(QString path)
    {
    QDomDocument doc;
    
    QFile file(path);    
    QMap<QString, QString> catDetails;
    QMap<QString, QString> uriDetails;

    if (!file.open(QFile::ReadOnly))
        return false;
    
    QByteArray array = file.readAll();
    
    if (!doc.setContent(array, true))
        {
        file.close();
        return false;
        }
    file.close();
    
    QDomElement docElem = doc.documentElement();

    QDomNode n = docElem.firstChild();

    /*
     * Sending the category details before the other details to prepare the table,
     * update of other details are not possible because the 'PRIMARYKEY' has to be there in db 
     */
    while (!n.isNull())
        {
        QDomElement e = n.toElement();
        if (!e.isNull())
            {
            catDetails.insert(e.tagName(), e.text());
            }
        n = n.nextSibling();
        }
    emit categoryDetails(catDetails);

    n = docElem.firstChild();// repositioning the node to get the other details

    while (!n.isNull())
        {
        QDomElement e = n.toElement(); // try to convert the node to an element.
        if (!e.isNull())
            {
            if (e.tagName() == TAGACTIONURI) // details of activity uri list
                {
                QDomNodeList uriNodeList = n.toElement().childNodes();
                for (int i = 0; i < uriNodeList.count(); i++)
                    {
                    QDomNode uriNode = uriNodeList.item(i);
                    QDomNodeList uriItemsList =
                            uriNode.toElement().childNodes();
                    for (int i = 0; i < uriItemsList.count(); i++)
                        {
                        QDomNode uriitems = uriItemsList.item(i);
                        e = uriitems.toElement();
                        uriDetails.insert(e.tagName(), e.text());
                        }
                    emit actionUri(uriDetails);
                    }
                }
            else if (e.tagName() == TAGFIELDMAP)// details of activity uri mapped with particular field
                {
                QDomNodeList uriNodeList = n.toElement().childNodes();
                QString tagfield;
                QStringList urilist;
                for (int i = 0; i < uriNodeList.count(); i++)
                    {
                    QDomNode uriNode = uriNodeList.item(i);
                    QDomNodeList uriItemsList =
                            uriNode.toElement().childNodes();
                    tagfield = QString();
                    urilist.clear();
                    for (int i = 0; i < uriItemsList.count(); i++)
                        {
                        QDomNode uriitems = uriItemsList.item(i);
                        e = uriitems.toElement();
                        if (e.tagName() == TAGFIELD)
                            {
                            tagfield = e.text();
                            }
                        else if (e.tagName() == TAGAURI)
                            {
                            urilist.append(e.text());
                            }
                        }
                    emit filedMapping(tagfield, urilist);
                    }
                }
            else if (e.tagName() == TAGRESULTFIRSTLINE) // details of what to show on firstline of result screen in search ui 
                {
                QDomNodeList uriNodeList = n.toElement().childNodes();
                QStringList urilist;                
                for (int i = 0; i < uriNodeList.count(); i++)
                    {
                    QDomNode uriNode = uriNodeList.item(i);
                    QDomNodeList uriItemsList =
                            uriNode.toElement().childNodes();
                    urilist.clear();
                    for (int i = 0; i < uriItemsList.count(); i++)
                        {
                        QDomNode uriitems = uriItemsList.item(i);
                        e = uriitems.toElement();
                        if (e.tagName() == TAGFIELD)
                            {
                            urilist.append(e.text());
                            }
                        }
                    emit firstLineMapping(urilist);
                    }
                }
            else if (e.tagName() == TAGRELEVANCY) // boost factor details,   
                {
                QDomNodeList uriNodeList = n.toElement().childNodes();
                QString field;
                QString boostvalue;
                for (int i = 0; i < uriNodeList.count(); i++)
                    {
                    QDomNode uriNode = uriNodeList.item(i);
                    QDomNodeList uriItemsList =
                            uriNode.toElement().childNodes();
                    field = QString();
                    boostvalue = QString();
                    for (int i = 0; i < uriItemsList.count(); i++)
                        {
                        QDomNode uriitems = uriItemsList.item(i);
                        e = uriitems.toElement();
                        if (e.tagName() == TAGFIELD)
                            {
                            field = e.text();
                            }
                        else if (e.tagName() == TAGBOOSTVALUE)
                            {
                            boostvalue = e.text();
                            }
                        }
                    emit relevancyMapping(field, boostvalue);
                    }
                }
            }
        n = n.nextSibling();
        }
    return true;
    }