--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/hswidgetuninstaller/src/hswidgetcomponentparser.cpp Tue Aug 31 15:06:34 2010 +0300
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+
+
+#include "hswidgetcomponentparser.h"
+#include <QFile>
+
+const char WIDGETPROVIDER[] = "widgetprovider";
+const char WIDGET[] = "widget";
+const char WIDGETMANIFEST[] = "hswidgetmanifest";
+
+const char URI[] = "uri";
+const char TITLE[] = "title";
+const char ICONURI[] = "iconuri";
+const char ICON[] = "icon";
+const char DESCRIPTION[] = "description";
+const char HIDDEN[] = "hidden";
+const char SERVICEXML[] = "servicexml";
+const char TRANSLATIONFILE[] = "translationfile";
+const char VERSION[] = "version";
+const char VERSION_1_0[] = "1.0";
+
+/*!
+ \class HsWidgetComponentParser
+ \ingroup group_hswidgetuninstaller
+ \brief Parses widget manifest xml file.
+*/
+
+
+/*!
+ Constructor, \a aComponentManifest path to file \a parent.
+*/
+HsWidgetComponentParser::HsWidgetComponentParser(const QString &aComponentManifest, QObject *parent)
+ : QObject(parent),mError(false)
+{
+ parseFile(aComponentManifest);
+}
+
+/*!
+ Destructor.
+*/
+HsWidgetComponentParser::~HsWidgetComponentParser()
+{
+
+}
+
+/*!
+ Returns parsed widget component descriptor.
+*/
+HsWidgetComponentDescriptor HsWidgetComponentParser::widgetComponentDescriptor()
+{
+ return mComponentDescriptor;
+}
+
+/*!
+ Returns true if error occurred in parsing.
+*/
+bool HsWidgetComponentParser::error()
+{
+ return mError;
+}
+
+/*!
+ Parse widget component descriptor from \a aComponentManifest file.
+*/
+void HsWidgetComponentParser::parseFile(const QString &aComponentManifest)
+{
+ QFile file(aComponentManifest);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ mError = true;
+ return;
+ }
+ mParser.setDevice(&file);
+ if (mParser.readNextStartElement()) {
+ if (mParser.name() == WIDGETMANIFEST){
+ parseWidgetManifestTag();
+ } else if(mParser.name() == WIDGETPROVIDER){
+ parseWidgetProviderTag();
+ } else {
+ mParser.raiseError(QObject::tr("Malformed manifest"));
+ }
+ } else {
+ mParser.raiseError(QObject::tr("Malformed manifest"));
+ }
+ mError = mParser.error();
+
+}
+
+/*!
+ Parse manifest tag.
+*/
+void HsWidgetComponentParser::parseWidgetManifestTag()
+{
+ Q_ASSERT(mParser.isStartElement() && mParser.name() == WIDGETMANIFEST);
+
+ /* Detect version */
+ if (mParser.attributes().hasAttribute(VERSION)) {
+ QStringRef version = mParser.attributes().value(VERSION);
+ mComponentDescriptor.setVersion(version.toString());
+ if (version == VERSION_1_0) {
+ parseVersion1_0();
+ } else {
+ mParser.raiseError(QObject::tr("Unsupported version"));
+ }
+
+ } else {
+ // newest is default
+ parseVersion1_0();
+ mComponentDescriptor.setVersion(VERSION_1_0);
+ }
+}
+
+/*!
+ Parse provider tag.
+*/
+void HsWidgetComponentParser::parseWidgetProviderTag()
+{
+ Q_ASSERT(mParser.isStartElement() && mParser.name() == WIDGETPROVIDER);
+ if (!mParser.readNextStartElement() || mParser.name() != WIDGET) {
+ mParser.raiseError(QObject::tr("Malformed manifest"));
+ return;
+ }
+
+ // everything is in attributes
+ QXmlStreamAttributes attrs = mParser.attributes();
+ foreach (QXmlStreamAttribute attr, attrs) {
+ QStringRef name = attr.name();
+ if (name == URI) {
+ mComponentDescriptor.setUri(attr.value().toString());
+ } else if (name == ICONURI) {
+ mComponentDescriptor.setIconUri(attr.value().toString());
+ } else if (name == TITLE) {
+ mComponentDescriptor.setTitle(attr.value().toString());
+ } else if (name == DESCRIPTION) {
+ mComponentDescriptor.setDescription(attr.value().toString());
+ } else if (name == HIDDEN) {
+ mComponentDescriptor.setHidden(attr.value().toString());
+ }
+ }
+
+}
+/*!
+ Parse version 1.0.
+*/
+void HsWidgetComponentParser::parseVersion1_0()
+{
+ Q_ASSERT(mParser.isStartElement() && mParser.name() == WIDGETMANIFEST);
+ /* We'll parse the XML until we reach </hswidgetmanifest> tag, end of cml or have an error. */
+ while( !(mParser.tokenType() == QXmlStreamReader::EndElement && mParser.name() == WIDGETMANIFEST) &&
+ !mParser.hasError() && !mParser.atEnd()) {
+
+ mParser.readNext();
+ if (mParser.tokenType() != QXmlStreamReader::StartElement) {
+ continue;
+ }
+ /* Read next start element.*/
+ QStringRef tag = mParser.name();
+ if(tag == URI) {
+ parseUri();
+ } else if (tag == ICON) {
+ parseIcon();
+ } else if (tag == TITLE) {
+ parseTitle();
+ } else if (tag == DESCRIPTION) {
+ parseDescription();
+ } else if (tag == HIDDEN) {
+ parseHidden();
+ } else if (tag == SERVICEXML) {
+ parseServiceXml();
+ } else if (tag == TRANSLATIONFILE) {
+ parseTranslationFilename();
+ }
+ }
+}
+
+
+/*!
+ Parse uri.
+*/
+void HsWidgetComponentParser::parseUri()
+{
+ mParser.readNext();
+ if(mParser.tokenType() != QXmlStreamReader::Characters) {
+ return;
+ }
+ mComponentDescriptor.setUri(mParser.text().toString());
+}
+
+/*!
+ Parse icon.
+*/
+void HsWidgetComponentParser::parseIcon()
+{
+ mParser.readNext();
+ if(mParser.tokenType() != QXmlStreamReader::Characters) {
+ return;
+ }
+ mComponentDescriptor.setIconUri(mParser.text().toString());
+}
+
+/*!
+ Parse title.
+*/
+void HsWidgetComponentParser::parseTitle()
+{
+ mParser.readNext();
+ if(mParser.tokenType() != QXmlStreamReader::Characters) {
+ return;
+ }
+ mComponentDescriptor.setTitle(mParser.text().toString());
+}
+
+/*!
+ Parse description.
+*/
+void HsWidgetComponentParser::parseDescription()
+{
+ mParser.readNext();
+ if(mParser.tokenType() != QXmlStreamReader::Characters) {
+ return;
+ }
+ mComponentDescriptor.setDescription(mParser.text().toString());
+}
+
+/*!
+ Parse hidden.
+*/
+void HsWidgetComponentParser::parseHidden()
+{
+ mParser.readNext();
+ if(mParser.tokenType() != QXmlStreamReader::Characters) {
+ return;
+ }
+ mComponentDescriptor.setHidden(mParser.text().toString());
+}
+
+/*!
+ Parse service xml.
+*/
+void HsWidgetComponentParser::parseServiceXml()
+{
+ mParser.readNext();
+ if(mParser.tokenType() != QXmlStreamReader::Characters) {
+ return;
+ }
+ mComponentDescriptor.setServiceXml(mParser.text().toString());
+}
+/*!
+ Parse service translation file name.
+*/
+void HsWidgetComponentParser::parseTranslationFilename()
+{
+ mParser.readNext();
+ if(mParser.tokenType() != QXmlStreamReader::Characters) {
+ return;
+ }
+ mComponentDescriptor.setTranslationFilename(mParser.text().toString());
+}