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