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