contentstorage/caclient/stub/src/hswidgetcomponentparser.cpp
author hgs
Thu, 24 Jun 2010 16:18:29 +0300
changeset 99 7aaf39b772ac
parent 94 dbb8300717f7
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
94
hgs
parents: 93
diff changeset
     1
/*
hgs
parents: 93
diff changeset
     2
 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents: 93
diff changeset
     3
 * All rights reserved.
hgs
parents: 93
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents: 93
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents: 93
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents: 93
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents: 93
diff changeset
     8
 *
hgs
parents: 93
diff changeset
     9
 * Initial Contributors:
hgs
parents: 93
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents: 93
diff changeset
    11
 *
hgs
parents: 93
diff changeset
    12
 * Contributors:
hgs
parents: 93
diff changeset
    13
 *
hgs
parents: 93
diff changeset
    14
 * Description:
hgs
parents: 93
diff changeset
    15
 *
hgs
parents: 93
diff changeset
    16
 */
hgs
parents: 93
diff changeset
    17
93
hgs
parents:
diff changeset
    18
#include "hswidgetcomponentparser.h"
hgs
parents:
diff changeset
    19
#include <QFile>
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
const char WIDGETPROVIDER[] = "widgetprovider";
hgs
parents:
diff changeset
    22
const char WIDGET[] = "widget";
hgs
parents:
diff changeset
    23
const char WIDGETMANIFEST[] = "hswidgetmanifest";
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
const char URI[] = "uri";
hgs
parents:
diff changeset
    26
const char TITLE[] = "title";
hgs
parents:
diff changeset
    27
const char ICONURI[] = "iconuri";
hgs
parents:
diff changeset
    28
const char ICON[] = "icon";
hgs
parents:
diff changeset
    29
const char DESCRIPTION[] = "description";
hgs
parents:
diff changeset
    30
const char HIDDEN[] = "hidden";
hgs
parents:
diff changeset
    31
const char SERVICEXML[] = "servicexml";
99
hgs
parents: 94
diff changeset
    32
const char PREVIEWIAMGE[] = "previewimage";
93
hgs
parents:
diff changeset
    33
const char VERSION[] = "version";
hgs
parents:
diff changeset
    34
const char VERSION_1_0[] = "1.0";
99
hgs
parents: 94
diff changeset
    35
const char TRANSLATIONFILENAME[] = "translationfile";
93
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
HsWidgetComponentParser::HsWidgetComponentParser(const QString &aComponentManifest, QObject *parent)
hgs
parents:
diff changeset
    40
    : QObject(parent),mError(false)
hgs
parents:
diff changeset
    41
{
hgs
parents:
diff changeset
    42
    parseFile(aComponentManifest);
hgs
parents:
diff changeset
    43
}
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
HsWidgetComponentParser::~HsWidgetComponentParser()
hgs
parents:
diff changeset
    46
{
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
}
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
HsWidgetComponentDescriptor HsWidgetComponentParser::widgetComponentDescriptor()
hgs
parents:
diff changeset
    51
{
hgs
parents:
diff changeset
    52
    return mComponentDescriptor;
hgs
parents:
diff changeset
    53
}
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
bool HsWidgetComponentParser::error()
hgs
parents:
diff changeset
    56
{
hgs
parents:
diff changeset
    57
    return mError;
hgs
parents:
diff changeset
    58
}
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
void HsWidgetComponentParser::parseFile(const QString &aComponentManifest)
hgs
parents:
diff changeset
    61
{
hgs
parents:
diff changeset
    62
    QFile file(aComponentManifest);
hgs
parents:
diff changeset
    63
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
hgs
parents:
diff changeset
    64
        mError = false;
hgs
parents:
diff changeset
    65
        return;
hgs
parents:
diff changeset
    66
    }
hgs
parents:
diff changeset
    67
    mParser.setDevice(&file);
hgs
parents:
diff changeset
    68
    if (mParser.readNextStartElement()) {
hgs
parents:
diff changeset
    69
        if (mParser.name() == WIDGETMANIFEST){
hgs
parents:
diff changeset
    70
             parseWidgetManifestTag();
hgs
parents:
diff changeset
    71
        } else if(mParser.name() == WIDGETPROVIDER){
hgs
parents:
diff changeset
    72
            parseWidgetProviderTag();
hgs
parents:
diff changeset
    73
        } else {
hgs
parents:
diff changeset
    74
            mParser.raiseError(QObject::tr("Malformed manifest"));
hgs
parents:
diff changeset
    75
        }
hgs
parents:
diff changeset
    76
    } else {
hgs
parents:
diff changeset
    77
        mParser.raiseError(QObject::tr("Malformed manifest"));
hgs
parents:
diff changeset
    78
    }
hgs
parents:
diff changeset
    79
    mError = mParser.error();
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
}
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
void HsWidgetComponentParser::parseWidgetManifestTag()
hgs
parents:
diff changeset
    84
{
hgs
parents:
diff changeset
    85
    Q_ASSERT(mParser.isStartElement() && mParser.name() == WIDGETMANIFEST);
hgs
parents:
diff changeset
    86
    
hgs
parents:
diff changeset
    87
    /* Detect version */
hgs
parents:
diff changeset
    88
    if (mParser.attributes().hasAttribute(VERSION)) {
hgs
parents:
diff changeset
    89
        QStringRef version = mParser.attributes().value(VERSION);
hgs
parents:
diff changeset
    90
        mComponentDescriptor.version = version.toString();
hgs
parents:
diff changeset
    91
        if (version == VERSION_1_0) { 
hgs
parents:
diff changeset
    92
            parseVersion1_0();
hgs
parents:
diff changeset
    93
        }
hgs
parents:
diff changeset
    94
    } else {
hgs
parents:
diff changeset
    95
        // newest is default
hgs
parents:
diff changeset
    96
        parseVersion1_0();
hgs
parents:
diff changeset
    97
        mComponentDescriptor.version = VERSION_1_0;
hgs
parents:
diff changeset
    98
    }
hgs
parents:
diff changeset
    99
}
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
void HsWidgetComponentParser::parseWidgetProviderTag()
hgs
parents:
diff changeset
   102
{
hgs
parents:
diff changeset
   103
    Q_ASSERT(mParser.isStartElement() && mParser.name() == WIDGETPROVIDER);
hgs
parents:
diff changeset
   104
    if (!mParser.readNextStartElement() || mParser.name() != WIDGET) {
hgs
parents:
diff changeset
   105
        mParser.raiseError(QObject::tr("Malformed manifest"));
hgs
parents:
diff changeset
   106
        return;
hgs
parents:
diff changeset
   107
    }
hgs
parents:
diff changeset
   108
   
hgs
parents:
diff changeset
   109
    // everything is in attributes
hgs
parents:
diff changeset
   110
    QXmlStreamAttributes attrs = mParser.attributes();
hgs
parents:
diff changeset
   111
    foreach (QXmlStreamAttribute attr, attrs) {
hgs
parents:
diff changeset
   112
        QStringRef name = attr.name();
hgs
parents:
diff changeset
   113
        if (name == URI) {
hgs
parents:
diff changeset
   114
            mComponentDescriptor.uri = attr.value().toString();
hgs
parents:
diff changeset
   115
        } else if (name == ICONURI) {
hgs
parents:
diff changeset
   116
            mComponentDescriptor.iconUri = attr.value().toString();   
hgs
parents:
diff changeset
   117
        } else if (name == TITLE) {
hgs
parents:
diff changeset
   118
            mComponentDescriptor.title = attr.value().toString();    
hgs
parents:
diff changeset
   119
        } else if (name == DESCRIPTION) {
hgs
parents:
diff changeset
   120
            mComponentDescriptor.description = attr.value().toString();
hgs
parents:
diff changeset
   121
        } else if (name == HIDDEN) {
hgs
parents:
diff changeset
   122
            mComponentDescriptor.hidden = attr.value().toString();
hgs
parents:
diff changeset
   123
        } 
hgs
parents:
diff changeset
   124
    }
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
}
hgs
parents:
diff changeset
   127
void HsWidgetComponentParser::parseVersion1_0()
hgs
parents:
diff changeset
   128
{
hgs
parents:
diff changeset
   129
    Q_ASSERT(mParser.isStartElement() && mParser.name() == WIDGETMANIFEST);
hgs
parents:
diff changeset
   130
    /* We'll parse the XML until we reach </hswidgetmanifest> tag, end of cml or have an error. */
hgs
parents:
diff changeset
   131
	while( !(mParser.tokenType() == QXmlStreamReader::EndElement && mParser.name() == WIDGETMANIFEST) && 
hgs
parents:
diff changeset
   132
        !mParser.hasError() && !mParser.atEnd()) {
hgs
parents:
diff changeset
   133
        
hgs
parents:
diff changeset
   134
        mParser.readNext();
hgs
parents:
diff changeset
   135
        if (mParser.tokenType() != QXmlStreamReader::StartElement) {
hgs
parents:
diff changeset
   136
            continue;
hgs
parents:
diff changeset
   137
        }
hgs
parents:
diff changeset
   138
		/* Read next start element.*/
hgs
parents:
diff changeset
   139
	    QStringRef tag = mParser.name();
hgs
parents:
diff changeset
   140
		if(tag == URI) {
hgs
parents:
diff changeset
   141
			parseUri();
hgs
parents:
diff changeset
   142
        } else if (tag == ICON) {
hgs
parents:
diff changeset
   143
            parseIcon();
hgs
parents:
diff changeset
   144
        } else if (tag == TITLE) {
hgs
parents:
diff changeset
   145
            parseTitle();
hgs
parents:
diff changeset
   146
        } else if (tag == DESCRIPTION) {
hgs
parents:
diff changeset
   147
            parseDescription();
hgs
parents:
diff changeset
   148
        } else if (tag == HIDDEN) {
hgs
parents:
diff changeset
   149
            parseHidden();
hgs
parents:
diff changeset
   150
        } else if (tag == SERVICEXML) {
hgs
parents:
diff changeset
   151
            parseServiceXml();
99
hgs
parents: 94
diff changeset
   152
        } else if (tag == PREVIEWIAMGE) {
hgs
parents: 94
diff changeset
   153
            parsePreviewImage();
hgs
parents: 94
diff changeset
   154
        } else if (tag == TRANSLATIONFILENAME) {
hgs
parents: 94
diff changeset
   155
            parseTranslationFileName();
hgs
parents: 94
diff changeset
   156
		}
hgs
parents: 94
diff changeset
   157
    }
93
hgs
parents:
diff changeset
   158
}
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
void HsWidgetComponentParser::parseUri()
hgs
parents:
diff changeset
   162
{
hgs
parents:
diff changeset
   163
    mParser.readNext();
hgs
parents:
diff changeset
   164
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   165
		return;
hgs
parents:
diff changeset
   166
	}
hgs
parents:
diff changeset
   167
    mComponentDescriptor.uri = mParser.text().toString();
hgs
parents:
diff changeset
   168
}
99
hgs
parents: 94
diff changeset
   169
93
hgs
parents:
diff changeset
   170
void HsWidgetComponentParser::parseIcon()
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.iconUri = mParser.text().toString();
hgs
parents:
diff changeset
   177
}
99
hgs
parents: 94
diff changeset
   178
93
hgs
parents:
diff changeset
   179
void HsWidgetComponentParser::parseTitle()
hgs
parents:
diff changeset
   180
{
hgs
parents:
diff changeset
   181
    mParser.readNext();
hgs
parents:
diff changeset
   182
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   183
		return;
hgs
parents:
diff changeset
   184
	}
hgs
parents:
diff changeset
   185
    mComponentDescriptor.title = mParser.text().toString();
hgs
parents:
diff changeset
   186
}
99
hgs
parents: 94
diff changeset
   187
93
hgs
parents:
diff changeset
   188
void HsWidgetComponentParser::parseDescription()
hgs
parents:
diff changeset
   189
{
hgs
parents:
diff changeset
   190
    mParser.readNext();
hgs
parents:
diff changeset
   191
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   192
		return;
hgs
parents:
diff changeset
   193
	}
hgs
parents:
diff changeset
   194
    mComponentDescriptor.description = mParser.text().toString();
hgs
parents:
diff changeset
   195
}
99
hgs
parents: 94
diff changeset
   196
93
hgs
parents:
diff changeset
   197
void HsWidgetComponentParser::parseHidden()
hgs
parents:
diff changeset
   198
{
hgs
parents:
diff changeset
   199
    mParser.readNext();
hgs
parents:
diff changeset
   200
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   201
		return;
hgs
parents:
diff changeset
   202
	}
hgs
parents:
diff changeset
   203
    mComponentDescriptor.hidden = mParser.text().toString();
hgs
parents:
diff changeset
   204
}
99
hgs
parents: 94
diff changeset
   205
93
hgs
parents:
diff changeset
   206
void HsWidgetComponentParser::parseServiceXml()
hgs
parents:
diff changeset
   207
{
hgs
parents:
diff changeset
   208
    mParser.readNext();
hgs
parents:
diff changeset
   209
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents:
diff changeset
   210
		return;
hgs
parents:
diff changeset
   211
	}
hgs
parents:
diff changeset
   212
    mComponentDescriptor.serviceXml = mParser.text().toString();
hgs
parents:
diff changeset
   213
}
hgs
parents:
diff changeset
   214
99
hgs
parents: 94
diff changeset
   215
void HsWidgetComponentParser::parsePreviewImage()
hgs
parents: 94
diff changeset
   216
{
hgs
parents: 94
diff changeset
   217
    mParser.readNext();
hgs
parents: 94
diff changeset
   218
    if(mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents: 94
diff changeset
   219
		return;
hgs
parents: 94
diff changeset
   220
	}
hgs
parents: 94
diff changeset
   221
    mComponentDescriptor.previewImage = mParser.text().toString();
hgs
parents: 94
diff changeset
   222
}
hgs
parents: 94
diff changeset
   223
hgs
parents: 94
diff changeset
   224
void HsWidgetComponentParser::parseTranslationFileName()
hgs
parents: 94
diff changeset
   225
{
hgs
parents: 94
diff changeset
   226
    mParser.readNext();
hgs
parents: 94
diff changeset
   227
    if (mParser.tokenType() != QXmlStreamReader::Characters) {
hgs
parents: 94
diff changeset
   228
		return;
hgs
parents: 94
diff changeset
   229
        }
hgs
parents: 94
diff changeset
   230
    mComponentDescriptor.translationFilename = mParser.text().toString();
hgs
parents: 94
diff changeset
   231
}
hgs
parents: 94
diff changeset
   232
93
hgs
parents:
diff changeset
   233
bool HsWidgetComponentParser::isWidgetTagValid() 
hgs
parents:
diff changeset
   234
{
hgs
parents:
diff changeset
   235
   return true;
hgs
parents:
diff changeset
   236
}