contentstorage/caclient/stub/src/hswidgetcomponentparser.cpp
author hgs
Fri, 30 Apr 2010 15:22:08 +0300
changeset 93 82b66994846c
child 94 dbb8300717f7
permissions -rw-r--r--
201017
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
93
hgs
parents:
diff changeset
     1
#include "hswidgetcomponentparser.h"
hgs
parents:
diff changeset
     2
#include <QFile>
hgs
parents:
diff changeset
     3
hgs
parents:
diff changeset
     4
const char WIDGETPROVIDER[] = "widgetprovider";
hgs
parents:
diff changeset
     5
const char WIDGET[] = "widget";
hgs
parents:
diff changeset
     6
const char WIDGETMANIFEST[] = "hswidgetmanifest";
hgs
parents:
diff changeset
     7
hgs
parents:
diff changeset
     8
const char URI[] = "uri";
hgs
parents:
diff changeset
     9
const char TITLE[] = "title";
hgs
parents:
diff changeset
    10
const char ICONURI[] = "iconuri";
hgs
parents:
diff changeset
    11
const char ICON[] = "icon";
hgs
parents:
diff changeset
    12
const char DESCRIPTION[] = "description";
hgs
parents:
diff changeset
    13
const char HIDDEN[] = "hidden";
hgs
parents:
diff changeset
    14
const char SERVICEXML[] = "servicexml";
hgs
parents:
diff changeset
    15
const char VERSION[] = "version";
hgs
parents:
diff changeset
    16
const char VERSION_1_0[] = "1.0";
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
HsWidgetComponentParser::HsWidgetComponentParser(const QString &aComponentManifest, QObject *parent)
hgs
parents:
diff changeset
    21
    : QObject(parent),mError(false)
hgs
parents:
diff changeset
    22
{
hgs
parents:
diff changeset
    23
    parseFile(aComponentManifest);
hgs
parents:
diff changeset
    24
}
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
HsWidgetComponentParser::~HsWidgetComponentParser()
hgs
parents:
diff changeset
    27
{
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
}
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
HsWidgetComponentDescriptor HsWidgetComponentParser::widgetComponentDescriptor()
hgs
parents:
diff changeset
    32
{
hgs
parents:
diff changeset
    33
    return mComponentDescriptor;
hgs
parents:
diff changeset
    34
}
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
bool HsWidgetComponentParser::error()
hgs
parents:
diff changeset
    37
{
hgs
parents:
diff changeset
    38
    return mError;
hgs
parents:
diff changeset
    39
}
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
void HsWidgetComponentParser::parseFile(const QString &aComponentManifest)
hgs
parents:
diff changeset
    42
{
hgs
parents:
diff changeset
    43
    QFile file(aComponentManifest);
hgs
parents:
diff changeset
    44
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
hgs
parents:
diff changeset
    45
        mError = false;
hgs
parents:
diff changeset
    46
        return;
hgs
parents:
diff changeset
    47
    }
hgs
parents:
diff changeset
    48
    mParser.setDevice(&file);
hgs
parents:
diff changeset
    49
    if (mParser.readNextStartElement()) {
hgs
parents:
diff changeset
    50
        if (mParser.name() == WIDGETMANIFEST){
hgs
parents:
diff changeset
    51
             parseWidgetManifestTag();
hgs
parents:
diff changeset
    52
        } else if(mParser.name() == WIDGETPROVIDER){
hgs
parents:
diff changeset
    53
            parseWidgetProviderTag();
hgs
parents:
diff changeset
    54
        } else {
hgs
parents:
diff changeset
    55
            mParser.raiseError(QObject::tr("Malformed manifest"));
hgs
parents:
diff changeset
    56
        }
hgs
parents:
diff changeset
    57
    } else {
hgs
parents:
diff changeset
    58
        mParser.raiseError(QObject::tr("Malformed manifest"));
hgs
parents:
diff changeset
    59
    }
hgs
parents:
diff changeset
    60
    mError = mParser.error();
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
}
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
void HsWidgetComponentParser::parseWidgetManifestTag()
hgs
parents:
diff changeset
    65
{
hgs
parents:
diff changeset
    66
    Q_ASSERT(mParser.isStartElement() && mParser.name() == WIDGETMANIFEST);
hgs
parents:
diff changeset
    67
    
hgs
parents:
diff changeset
    68
    /* Detect version */
hgs
parents:
diff changeset
    69
    if (mParser.attributes().hasAttribute(VERSION)) {
hgs
parents:
diff changeset
    70
        QStringRef version = mParser.attributes().value(VERSION);
hgs
parents:
diff changeset
    71
        mComponentDescriptor.version = version.toString();
hgs
parents:
diff changeset
    72
        if (version == VERSION_1_0) { 
hgs
parents:
diff changeset
    73
            parseVersion1_0();
hgs
parents:
diff changeset
    74
        }
hgs
parents:
diff changeset
    75
    } else {
hgs
parents:
diff changeset
    76
        // newest is default
hgs
parents:
diff changeset
    77
        parseVersion1_0();
hgs
parents:
diff changeset
    78
        mComponentDescriptor.version = VERSION_1_0;
hgs
parents:
diff changeset
    79
    }
hgs
parents:
diff changeset
    80
}
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
void HsWidgetComponentParser::parseWidgetProviderTag()
hgs
parents:
diff changeset
    83
{
hgs
parents:
diff changeset
    84
    Q_ASSERT(mParser.isStartElement() && mParser.name() == WIDGETPROVIDER);
hgs
parents:
diff changeset
    85
    if (!mParser.readNextStartElement() || mParser.name() != WIDGET) {
hgs
parents:
diff changeset
    86
        mParser.raiseError(QObject::tr("Malformed manifest"));
hgs
parents:
diff changeset
    87
        return;
hgs
parents:
diff changeset
    88
    }
hgs
parents:
diff changeset
    89
   
hgs
parents:
diff changeset
    90
    // everything is in attributes
hgs
parents:
diff changeset
    91
    QXmlStreamAttributes attrs = mParser.attributes();
hgs
parents:
diff changeset
    92
    foreach (QXmlStreamAttribute attr, attrs) {
hgs
parents:
diff changeset
    93
        QStringRef name = attr.name();
hgs
parents:
diff changeset
    94
        if (name == URI) {
hgs
parents:
diff changeset
    95
            mComponentDescriptor.uri = attr.value().toString();
hgs
parents:
diff changeset
    96
        } else if (name == ICONURI) {
hgs
parents:
diff changeset
    97
            mComponentDescriptor.iconUri = attr.value().toString();   
hgs
parents:
diff changeset
    98
        } else if (name == TITLE) {
hgs
parents:
diff changeset
    99
            mComponentDescriptor.title = attr.value().toString();    
hgs
parents:
diff changeset
   100
        } else if (name == DESCRIPTION) {
hgs
parents:
diff changeset
   101
            mComponentDescriptor.description = attr.value().toString();
hgs
parents:
diff changeset
   102
        } else if (name == HIDDEN) {
hgs
parents:
diff changeset
   103
            mComponentDescriptor.hidden = attr.value().toString();
hgs
parents:
diff changeset
   104
        } 
hgs
parents:
diff changeset
   105
    }
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
}
hgs
parents:
diff changeset
   108
void HsWidgetComponentParser::parseVersion1_0()
hgs
parents:
diff changeset
   109
{
hgs
parents:
diff changeset
   110
    Q_ASSERT(mParser.isStartElement() && mParser.name() == WIDGETMANIFEST);
hgs
parents:
diff changeset
   111
    /* We'll parse the XML until we reach </hswidgetmanifest> tag, end of cml or have an error. */
hgs
parents:
diff changeset
   112
	while( !(mParser.tokenType() == QXmlStreamReader::EndElement && mParser.name() == WIDGETMANIFEST) && 
hgs
parents:
diff changeset
   113
        !mParser.hasError() && !mParser.atEnd()) {
hgs
parents:
diff changeset
   114
        
hgs
parents:
diff changeset
   115
        mParser.readNext();
hgs
parents:
diff changeset
   116
        if (mParser.tokenType() != QXmlStreamReader::StartElement) {
hgs
parents:
diff changeset
   117
            continue;
hgs
parents:
diff changeset
   118
        }
hgs
parents:
diff changeset
   119
		/* Read next start element.*/
hgs
parents:
diff changeset
   120
	    QStringRef tag = mParser.name();
hgs
parents:
diff changeset
   121
		if(tag == URI) {
hgs
parents:
diff changeset
   122
			parseUri();
hgs
parents:
diff changeset
   123
        } else if (tag == ICON) {
hgs
parents:
diff changeset
   124
            parseIcon();
hgs
parents:
diff changeset
   125
        } else if (tag == TITLE) {
hgs
parents:
diff changeset
   126
            parseTitle();
hgs
parents:
diff changeset
   127
        } else if (tag == DESCRIPTION) {
hgs
parents:
diff changeset
   128
            parseDescription();
hgs
parents:
diff changeset
   129
        } else if (tag == HIDDEN) {
hgs
parents:
diff changeset
   130
            parseHidden();
hgs
parents:
diff changeset
   131
        } else if (tag == SERVICEXML) {
hgs
parents:
diff changeset
   132
            parseServiceXml();
hgs
parents:
diff changeset
   133
        } 
hgs
parents:
diff changeset
   134
	}
hgs
parents:
diff changeset
   135
}
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
void HsWidgetComponentParser::parseUri()
hgs
parents:
diff changeset
   139
{
hgs
parents:
diff changeset
   140
    mParser.readNext();
hgs
parents:
diff changeset
   141
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   142
		return;
hgs
parents:
diff changeset
   143
	}
hgs
parents:
diff changeset
   144
    mComponentDescriptor.uri = mParser.text().toString();
hgs
parents:
diff changeset
   145
}
hgs
parents:
diff changeset
   146
void HsWidgetComponentParser::parseIcon()
hgs
parents:
diff changeset
   147
{
hgs
parents:
diff changeset
   148
    mParser.readNext();
hgs
parents:
diff changeset
   149
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   150
		return;
hgs
parents:
diff changeset
   151
	}
hgs
parents:
diff changeset
   152
    mComponentDescriptor.iconUri = mParser.text().toString();
hgs
parents:
diff changeset
   153
}
hgs
parents:
diff changeset
   154
void HsWidgetComponentParser::parseTitle()
hgs
parents:
diff changeset
   155
{
hgs
parents:
diff changeset
   156
    mParser.readNext();
hgs
parents:
diff changeset
   157
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   158
		return;
hgs
parents:
diff changeset
   159
	}
hgs
parents:
diff changeset
   160
    mComponentDescriptor.title = mParser.text().toString();
hgs
parents:
diff changeset
   161
}
hgs
parents:
diff changeset
   162
void HsWidgetComponentParser::parseDescription()
hgs
parents:
diff changeset
   163
{
hgs
parents:
diff changeset
   164
    mParser.readNext();
hgs
parents:
diff changeset
   165
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   166
		return;
hgs
parents:
diff changeset
   167
	}
hgs
parents:
diff changeset
   168
    mComponentDescriptor.description = mParser.text().toString();
hgs
parents:
diff changeset
   169
}
hgs
parents:
diff changeset
   170
void HsWidgetComponentParser::parseHidden()
hgs
parents:
diff changeset
   171
{
hgs
parents:
diff changeset
   172
    mParser.readNext();
hgs
parents:
diff changeset
   173
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   174
		return;
hgs
parents:
diff changeset
   175
	}
hgs
parents:
diff changeset
   176
    mComponentDescriptor.hidden = mParser.text().toString();
hgs
parents:
diff changeset
   177
}
hgs
parents:
diff changeset
   178
void HsWidgetComponentParser::parseServiceXml()
hgs
parents:
diff changeset
   179
{
hgs
parents:
diff changeset
   180
    mParser.readNext();
hgs
parents:
diff changeset
   181
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   182
		return;
hgs
parents:
diff changeset
   183
	}
hgs
parents:
diff changeset
   184
    mComponentDescriptor.serviceXml = mParser.text().toString();
hgs
parents:
diff changeset
   185
}
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
bool HsWidgetComponentParser::isWidgetTagValid() 
hgs
parents:
diff changeset
   188
{
hgs
parents:
diff changeset
   189
   return true;
hgs
parents:
diff changeset
   190
}