example/TwitterAuthApp/src/xmlParser.cpp
author cgandhi
Tue, 12 Oct 2010 15:23:52 +0530
changeset 27 b3e1347ac96a
parent 26 83d6a149c755
permissions -rw-r--r--
Updating the information for test applications and results.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
     1
/**
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
     2
* Copyright (c) 2010 Sasken Communication Technologies Ltd.
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
     3
* All rights reserved.
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
     4
* This component and the accompanying materials are made available
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
     5
* under the terms of the "{License}"
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
     6
* which accompanies  this distribution, and is available
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
     7
* at the URL "{LicenseUrl}".
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
     8
*
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
     9
* Initial Contributors:
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    10
* Narasimhulu Kavadapu, Sasken Communication Technologies Ltd - Initial contribution
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    11
*
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    12
* Contributors:
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    13
* Siddhartha Chandra, Sasken Communication Technologies Ltd
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    14
* Description:
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    15
* XML Parser class
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    16
*/
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    17
#include "xmlParser.h"
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    18
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    19
#include <QVariantList>
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    20
///////////////////////////////////////////////////////////////////////////////////////////////////
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    21
// instance public functions
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    22
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    23
FBXMLHandler::FBXMLHandler() : iError(false)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    24
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    25
    initWhiteSpaceHash();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    26
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    27
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    28
FBXMLHandler::~FBXMLHandler()
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    29
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    30
    iWhiteSpaceAndNewLineCharSet.clear();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    31
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    32
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    33
///////////////////////////////////////////////////////////////////////////////////////////////////
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    34
// instance private functions
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    35
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    36
void FBXMLHandler::initWhiteSpaceHash()
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    37
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    38
    iWhiteSpaceAndNewLineCharSet.insert(QChar(0x20), true);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    39
    iWhiteSpaceAndNewLineCharSet.insert(QChar(0x9), true);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    40
    iWhiteSpaceAndNewLineCharSet.insert(QChar(0xA), true);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    41
    iWhiteSpaceAndNewLineCharSet.insert(QChar(0xB), true);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    42
    iWhiteSpaceAndNewLineCharSet.insert(QChar(0xC), true);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    43
    iWhiteSpaceAndNewLineCharSet.insert(QChar(0xD), true);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    44
    iWhiteSpaceAndNewLineCharSet.insert(QChar(0x85), true);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    45
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    46
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    47
/* methods from QXmlErrorHandler */
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    48
bool FBXMLHandler::error(const QXmlParseException& exception)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    49
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    50
    iParseErrorMessage = exception.message();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    51
    iError = true;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    52
    return false;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    53
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    54
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    55
bool FBXMLHandler::fatalError(const QXmlParseException& exception)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    56
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    57
    iParseErrorMessage = exception.message();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    58
    iError = true;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    59
    return false;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    60
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    61
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    62
/* methods from QXmlDefaultHandler */
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    63
bool FBXMLHandler::startElement( const QString & /*namespaceURI*/,
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    64
                                 const QString & localName,
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    65
                                 const QString & /*qName*/,
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    66
                                 const QXmlAttributes & atts)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    67
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    68
    flushCharacters();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    69
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    70
    QVariant item ;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    71
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    72
    if  (atts.value("list").compare("true")==0)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    73
    {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    74
        item = QVariantList();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    75
    }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    76
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    77
    iStack.append(item);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    78
    iNameStack.append(localName);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    79
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    80
    return true;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    81
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    82
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    83
bool FBXMLHandler::characters(const QString& aText)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    84
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    85
    iChars.append(aText);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    86
    return true;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    87
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    88
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    89
bool FBXMLHandler::endElement( const QString & /*namespaceURI*/,
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    90
                               const QString & /*localName*/,
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    91
                               const QString & /*qName*/ )
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    92
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    93
    flushCharacters();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    94
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    95
    QVariant c = iStack [iStack.count() - 1] ;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    96
    QString name = topName();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    97
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    98
    iStack.removeLast();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
    99
    iNameStack.removeLast();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   100
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   101
    if (!iStack.count())
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   102
    {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   103
        iRootObject = c;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   104
        iRootName = name;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   105
    }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   106
    else
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   107
    {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   108
        QVariant tC = iStack[iStack.count() - 1] ;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   109
        if (tC.isNull())
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   110
        {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   111
            tC = QVariantHash();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   112
            iStack.replace(iStack.count() - 1, tC);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   113
        }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   114
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   115
        if (tC.type() == QVariant::List)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   116
        {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   117
            QVariantList list = tC.toList();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   118
            list.append( c.toHash() );
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   119
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   120
            iStack.replace( iStack.count() - 1 , list);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   121
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   122
        }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   123
        else if (tC.type() == QVariant::Hash)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   124
        {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   125
            QVariantHash hash = tC.toHash();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   126
            if (c.isNull())
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   127
            {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   128
                c  = QString("");
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   129
            }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   130
            hash.insert( name, c );
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   131
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   132
            iStack.replace( iStack.count() - 1 , hash);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   133
        }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   134
    }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   135
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   136
    return true;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   137
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   138
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   139
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   140
/* */
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   141
const QString& FBXMLHandler::topName() const
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   142
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   143
    return iNameStack.last();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   144
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   145
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   146
QVariant FBXMLHandler::topObject(bool /*aCreate*/)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   147
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   148
    QVariant item ;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   149
    {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   150
        iStack.replace(iStack.count() - 1, item);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   151
    }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   152
    return item;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   153
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   154
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   155
QVariant FBXMLHandler::topContainer()
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   156
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   157
    if (iStack.count() < 2)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   158
    {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   159
        return QVariant();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   160
    }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   161
    else
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   162
    {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   163
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   164
        QVariant item = iStack[iStack.count() - 2 ];
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   165
        {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   166
            iStack.replace( iStack.count() - 2 , item);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   167
        }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   168
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   169
        return item;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   170
    }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   171
}
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   172
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   173
void FBXMLHandler::flushCharacters()
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   174
{
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   175
    for ( int i = 0; i < iChars.length(); i ++)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   176
    {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   177
        QChar uniChar = iChars.at(i);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   178
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   179
        if (!iWhiteSpaceAndNewLineCharSet.contains(uniChar))
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   180
        {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   181
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   182
            QVariant container;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   183
            if (iStack.count() >= 2)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   184
            {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   185
                container = iStack[iStack.count() - 2];
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   186
                if (container.isNull())
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   187
                {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   188
                    container = QVariantHash();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   189
                    iStack.replace( iStack.count() - 2 , container);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   190
                }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   191
            }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   192
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   193
            if (container.type() == QVariant::List)
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   194
            {                
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   195
                QVariantHash object;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   196
                object.insert( topName(), iChars );
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   197
                iStack.replace (iStack.count() - 1, object);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   198
            } else {
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   199
                QVariant object(iChars);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   200
                iStack.replace (iStack.count() - 1, object);
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   201
            }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   202
            break;
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   203
        }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   204
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   205
    }
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   206
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   207
    iChars.clear();
83d6a149c755 Submitting following changes -
cgandhi
parents:
diff changeset
   208
}