Example #1
0
void QgsOSMXmlImport::readTag( bool way, QgsOSMId id, QXmlStreamReader& xml )
{
  QXmlStreamAttributes attrs = xml.attributes();
  QByteArray k = attrs.value( "k" ).toString().toUtf8();
  QByteArray v = attrs.value( "v" ).toString().toUtf8();
  xml.skipCurrentElement();

  sqlite3_stmt* stmtInsertTag = way ? mStmtInsertWayTag : mStmtInsertNodeTag;

  sqlite3_bind_int64( stmtInsertTag, 1, id );
  sqlite3_bind_text( stmtInsertTag, 2, k.constData(), -1, SQLITE_STATIC );
  sqlite3_bind_text( stmtInsertTag, 3, v.constData(), -1, SQLITE_STATIC );

  int res = sqlite3_step( stmtInsertTag );
  if ( res != SQLITE_DONE )
  {
    xml.raiseError( QString( "Storing tag failed [%1]" ).arg( res ) );
  }

  sqlite3_reset( stmtInsertTag );
}
void PumpSpreadsheet::readGpxElement(QXmlStreamReader &reader)
{
    reader.readNext();
    while (!reader.atEnd()) {
        if (reader.isEndElement()) {
            reader.readNext();
            break;
        }

        if (reader.isStartElement()) {
            if (reader.name() == "transaction") {
                readTransactionElement(reader);
            } else {
                reader.raiseError(tr("Unknown element %1")
                                  .arg(reader.name().toString()));
            }
        } else {
            reader.readNext();
        }
    }
}
bool DMARC::AuthenticationResultsPrivate::parse(QXmlStreamReader& r)
{
	while (r.readNextStartElement()) {
		if (r.name() == QLatin1String("spf")) {
			DMARC::SPFAuthenticationResult res;
			if (res.d_func()->parse(r)) {
				this->spf.append(res);
			}
		}
		else if (r.name() == QLatin1String("dkim")) {
			DMARC::DKIMAuthenticationResult res;
			if (res.d_func()->parse(r)) {
				this->dkim.append(res);
			}
		}
		else {
			r.raiseError(QCoreApplication::translate("dmarcparser", "Unexpected element <%1>").arg(r.name().toString()));
		}
	}

	return !r.hasError();
}
Example #4
0
void LineStyle::loadXml(QXmlStreamReader &reader)
{
  LOG4CPP_INFO_S ((*mainCat)) << "LineStyle::loadXml";

  QXmlStreamAttributes attributes = reader.attributes();

  if (attributes.hasAttribute(DOCUMENT_SERIALIZE_LINE_STYLE_WIDTH) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_LINE_STYLE_COLOR) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_LINE_STYLE_CONNECT_AS)) {

    setWidth (attributes.value(DOCUMENT_SERIALIZE_LINE_STYLE_WIDTH).toInt());
    setPaletteColor ((ColorPalette) attributes.value(DOCUMENT_SERIALIZE_LINE_STYLE_COLOR).toInt());
    setCurveConnectAs ((CurveConnectAs) attributes.value(DOCUMENT_SERIALIZE_COLOR_FILTER_INTENSITY_HIGH).toInt());

    // Read until end of this subtree
    while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
    (reader.name() != DOCUMENT_SERIALIZE_LINE_STYLE)){
      loadNextFromReader(reader);
    }
  } else {
    reader.raiseError ("Cannot read line style data");
  }
}
bool DMARC::SPFAuthenticationResultPrivate::parse(QXmlStreamReader& r)
{
	bool seen_domain = false;
	bool seen_result = false;

	while (r.readNextStartElement()) {
		if (r.name() == QLatin1String("domain")) {
			if (!seen_domain) {
				seen_domain  = true;
				this->domain = r.readElementText();
			}
			else {
				r.raiseError(QCoreApplication::translate("dmarcparser", "Duplicate <%1> tag").arg(QLatin1String("domain")));
			}
		}
		else if (r.name() == QLatin1String("result")) {
			if (!seen_result) {
				QString value = r.readElementText();
				seen_result   = true;
				this->result  = string2spfauthres(value);
				if (DMARC::SpfUnknown == this->result) {
					r.raiseError(QCoreApplication::translate("dmarcparser", "Value '%1' is not valid for <%2>").arg(value, QLatin1String("result")));
				}
			}
			else {
				r.raiseError(QCoreApplication::translate("dmarcparser", "Duplicate <%1> tag").arg(QLatin1String("result")));
			}
		}
		else {
			r.raiseError(QCoreApplication::translate("dmarcparser", "Unexpected element <%1>").arg(r.name().toString()));
		}
	}

	if (!r.hasError()) {
		if (!seen_domain) {
			r.raiseError(QCoreApplication::translate("dmarcparser", "No <%1> tag").arg(QLatin1String("domain")));
		}
		else if (!seen_result) {
			r.raiseError(QCoreApplication::translate("dmarcparser", "No <%1> tag").arg(QLatin1String("result")));
		}
	}

	return !r.hasError();
}
void DocumentModelDigitizeCurve::loadXml(QXmlStreamReader &reader)
{
  LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelDigitizeCurve::loadXml";

  bool success = true;

  QXmlStreamAttributes attributes = reader.attributes();

  if (attributes.hasAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_INNER_RADIUS) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_LINE_WIDTH) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_SIZE) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_STANDARD_CROSS)) {

    // Boolean values
    QString standardCrossValue = attributes.value(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_STANDARD_CROSS).toString();

    setCursorInnerRadius (attributes.value(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_INNER_RADIUS).toInt());
    setCursorLineWidth (attributes.value(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_LINE_WIDTH).toInt());
    setCursorSize ((CursorSize) attributes.value(DOCUMENT_SERIALIZE_DIGITIZE_CURVE_CURSOR_SIZE).toInt());
    setCursorStandardCross (standardCrossValue == DOCUMENT_SERIALIZE_BOOL_TRUE);

    // Read until end of this subtree
    while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
    (reader.name() != DOCUMENT_SERIALIZE_DIGITIZE_CURVE)){
      loadNextFromReader(reader);
      if (reader.atEnd()) {
        success = false;
        break;
      }
    }
  }

  if (!success) {
    reader.raiseError ("Cannot read digitize curve data");
  }
}
Example #7
0
void CurvesGraphs::loadXml(QXmlStreamReader &reader)
{
  LOG4CPP_INFO_S ((*mainCat)) << "CurvesGraphs::loadXml";

  bool success = true;

  // Read until end of this subtree
  while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
  (reader.name() != DOCUMENT_SERIALIZE_CURVES_GRAPHS)){

    if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
        (reader.name () == DOCUMENT_SERIALIZE_CURVE)) {

      Curve curve (reader);

      m_curvesGraphs.push_back (curve);

    } else {

      loadNextFromReader(reader);
      if (reader.hasError()) {
        // No need to set success flag, which raises the error, since error was already raised. Just
        // need to exit loop immediately
        break;
      }
      if (reader.atEnd()) {
        success = false;
        break;
      }
    }
  }

  if (!success) {
    reader.raiseError ("Cannot read graph curves data");
  }
}
Example #8
0
void TPluginSpecPrivate::ReadPluginSpec(QXmlStreamReader &XmlReader)
   {
      QString Element = XmlReader.name().toString();
      if(Element != QString(PLUGIN))
         {
            XmlReader.raiseError(QString("PluginSpec: Expected element '%1' as top level element").arg(PLUGIN));
            return;
         }
      Name = XmlReader.attributes().value(PLUGIN_NAME).toString();
      if(Name.isEmpty())
         {
            XmlReader.raiseError(QString("TPluginSpecPrivate::ReadPluginSpec: '%1' misses attribute '%2'")
                                 .arg(QLatin1String(PLUGIN), QLatin1String(PLUGIN_NAME)));
            return;
         }
      Version = XmlReader.attributes().value(PLUGIN_VERSION).toString();
      if(Version.isEmpty())
         {
            XmlReader.raiseError(QString("TPluginSpecPrivate::ReadPluginSpec: '%1' misses attribute '%2'")
                                 .arg(QLatin1String(PLUGIN), QLatin1String(PLUGIN_VERSION)));
            return;
         }
      if(!IsValidVersion(Version))
         {
            XmlReader.raiseError(QString("TPluginSpecPrivate::ReadPluginSpec: '%1' has invalid format")
                                 .arg(PLUGIN_VERSION));
            return;
         }
      while(!XmlReader.atEnd())
         {
            XmlReader.readNext();
            switch(XmlReader.tokenType())
               {
                  case QXmlStreamReader::StartElement:
                     Element = XmlReader.name().toString();
                     if(Element == VENDOR)
                        Vendor = XmlReader.readElementText().trimmed();
                     else if(Element == COPYRIGHT)
                        Copyright = XmlReader.readElementText().trimmed();
                     else if(Element == LICENSE)
                        License = XmlReader.readElementText().trimmed();
                     else if(Element == DESCRIPTION)
                        Description = XmlReader.readElementText().trimmed();
                     else if(Element == URL)
                        Url = XmlReader.readElementText().trimmed();
                     else if(Element == DEPENDENCYLIST)
                        ReadDependencies(XmlReader);
                     //else if(Element == ARGUMENTLIST)
                     //   ReadArgumentDescriptions(XmlReader);
                     else
                        XmlReader.raiseError(QString("TPluginSpecPrivate::ReadPluginSpec: Invalid element '%1'").arg(Name));
                     break;
                  case QXmlStreamReader::EndDocument:
                  case QXmlStreamReader::Comment:
                  case QXmlStreamReader::EndElement:
                  case QXmlStreamReader::Characters:
                     break;
                  default:
                     XmlReader.raiseError(QString("TPluginSpecPrivate::ReadPluginSpec: Unexpected token"));
                     break;
               }
         }
   }
Example #9
0
/*!
 * Read out a widget within a category. This can either be
 * enclosed in a <ui> element or a (legacy) <widget> element which may
 * contain nested <widget> elements.
 *
 * Examples:
 *
 * <ui language="c++">
 *  <widget class="MultiPageWidget" name="multipagewidget"> ... </widget>
 *  <customwidgets>...</customwidgets>
 * <ui>
 *
 * or
 *
 * <widget>
 *   <widget> ... </widget>
 *   ...
 * <widget>
 *
 * Returns true on success, false if end was reached or an error has been encountered
 * in which case the reader has its error flag set. If successful, the current item
 * of the reader will be the closing element (</ui> or </widget>)
 */
bool WidgetBoxTreeWidget::readWidget(Widget *w, const QString &xml, QXmlStreamReader &r)
{
    qint64 startTagPosition =0, endTagPosition = 0;

    int nesting = 0;
    bool endEncountered = false;
    bool parsedWidgetTag = false;
    QString outmostElement;
    while (!endEncountered) {
        const qint64 currentPosition = r.characterOffset();
        switch(r.readNext()) {
        case QXmlStreamReader::StartElement:
            if (nesting++ == 0) {
                // First element must be <ui> or (legacy) <widget>
                const QStringRef name = r.name();
                if (name == QLatin1String(uiElementC)) {
                    startTagPosition = currentPosition;
                } else {
                    if (name == QLatin1String(widgetElementC)) {
                        startTagPosition = currentPosition;
                        parsedWidgetTag = true;
                    } else {
                        r.raiseError(QDesignerWidgetBox::tr("Unexpected element <%1> encountered when parsing for <widget> or <ui>").arg(name.toString()));
                        return false;
                    }
                }
            } else {
                // We are within <ui> looking for the first <widget> tag
                if (!parsedWidgetTag && r.name() == QLatin1String(widgetElementC)) {
                    parsedWidgetTag = true;
                }
            }
            break;
        case QXmlStreamReader::EndElement:
            // Reached end of widget?
            if (--nesting == 0)  {
                endTagPosition = r.characterOffset();
                endEncountered = true;
            }
            break;
        case QXmlStreamReader::EndDocument:
            r.raiseError(QDesignerWidgetBox::tr("Unexpected end of file encountered when parsing widgets."));
            return false;
        case QXmlStreamReader::Invalid:
            return false;
        default:
            break;
        }
    }
    if (!parsedWidgetTag) {
        r.raiseError(QDesignerWidgetBox::tr("A widget element could not be found."));
        return false;
    }
    // Oddity: Startposition is 1 off
    QString widgetXml = xml.mid(startTagPosition, endTagPosition - startTagPosition);
    const QChar lessThan = QLatin1Char('<');
    if (!widgetXml.startsWith(lessThan))
        widgetXml.prepend(lessThan);
    w->setDomXml(widgetXml);
    return true;
}
void DocumentModelExportFormat::loadXml(QXmlStreamReader &reader)
{
  LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelExportFormat::loadXml";

  bool success = true;

  QXmlStreamAttributes attributes = reader.attributes();

  if (attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_FUNCTIONS) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_FUNCTIONS) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_UNITS_FUNCTIONS) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_RELATIONS) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_RELATIONS) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_UNITS_RELATIONS) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_LAYOUT_FUNCTIONS) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_DELIMITER) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_HEADER) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_X_LABEL)) {

    setPointsSelectionFunctions ((ExportPointsSelectionFunctions) attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_FUNCTIONS).toInt());
    setPointsIntervalFunctions (attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_FUNCTIONS).toDouble());
    setPointsIntervalUnitsFunctions ((ExportPointsIntervalUnits) attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_UNITS_FUNCTIONS).toInt());
    setPointsSelectionRelations ((ExportPointsSelectionRelations) attributes.value(DOCUMENT_SERIALIZE_COORDS_SCALE_Y_RADIUS).toInt());
    setPointsIntervalRelations (attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_RELATIONS).toDouble());
    setPointsIntervalUnitsRelations ((ExportPointsIntervalUnits) attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_UNITS_RELATIONS).toInt());
    setLayoutFunctions ((ExportLayoutFunctions) attributes.value(DOCUMENT_SERIALIZE_EXPORT_LAYOUT_FUNCTIONS).toInt());
    setDelimiter ((ExportDelimiter) attributes.value (DOCUMENT_SERIALIZE_EXPORT_DELIMITER).toInt());
    setHeader ((ExportHeader) attributes.value(DOCUMENT_SERIALIZE_EXPORT_HEADER).toInt());
    setXLabel (attributes.value(DOCUMENT_SERIALIZE_EXPORT_X_LABEL).toString());

    // Read element containing excluded curve names
    while ((loadNextFromReader (reader) != QXmlStreamReader::StartElement) ||
           (reader.name() != DOCUMENT_SERIALIZE_EXPORT_CURVE_NAMES_NOT_EXPORTED)) {

      if (reader.atEnd()) {
        success = false;
        break;
      }
    }

    if (success) {

      QStringList curveNamesNotExported;

      QXmlStreamReader::TokenType tokenType = loadNextFromReader(reader);
      while (tokenType == QXmlStreamReader::StartElement) {

        if (reader.name() == DOCUMENT_SERIALIZE_EXPORT_CURVE_NAME_NOT_EXPORTED) {
          curveNamesNotExported << reader.text().toString();
        }
        tokenType = loadNextFromReader(reader);
      }

      // Save curve names
      setCurveNamesNotExported(curveNamesNotExported);

      // Read until end of this subtree
      while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
      (reader.name() != DOCUMENT_SERIALIZE_EXPORT)){
        loadNextFromReader(reader);
        if (reader.atEnd()) {
          success = false;
          break;
        }
      }
    }
  }

  if (!success) {
    reader.raiseError ("Cannot read export data");
  }
}
// Data loading
bool NMGStatisticRemoteWidget::loadData ( QString data )
{
	QXmlStreamReader xml ( data );

	/** \par Received Message Format for "packets" tests
	 * <data>
	 *  	<test type="packets">
	 *		<path>testPath</path>
	 *  		<flows>1;3..6;8</flows>
	 *		<statistic>SENT;...;IPDV(P999)</statistic>
	 *  	</test>
	 * </data>
	 *
	 * \par Received Message Format for "throughput" tests
	 * <data>	
	 *  	<test type="throughput">
	 *		<paths>
	 *			<path>testPath_1</path>
	 *			...
	 *			<path>testPath_N</path>
	 *		</paths>
	 *		<statistic>MIN;AVE;MAX</statistic>
	 *  	</test>
	 * </data>
	 *
	 * \par More Information
	 * \note The parsers are Case Insensitive
	 * \note ATTR "type" of <test> should be "packets" (TYPE_PACKETS) or "throughput" (TYPE_TPUT)
	 * \note TAG <flows> should be like a list of flowIds separated by semicolons like 1;2;3;...;N or ranges like 1..N or ALL
	 * \note TAG <statistics> should be a list of tags separated by semicolons. Available tags are:
	 *	For "packets" tests:
	 *      	ALL (if we want ALL statistics, we only need this tag)
	 *		SENT,
	 *		RECEIVED,
	 *		DURATION,
	 *		LOST,
	 *		LOSS_RATIO,
	 *		DUPLICATED,
	 *		DUPLICATED_RATIO,
	 *		OUTOFORDER,
	 *		OUTOFORDER_RATIO,
	 *		DELAY(AVERAGE,MIN,MAX,STDEV,JITTER,P50,P95,P99,P999) or DELAY() for all values,
	 *		IPDV(AVERAGE,MIN,MAX,STDEV,JITTER,P50,P95,P99,P999) or IPDV() for all values
	 *	For "throughput" tests:
	 *      	ALL (if we want ALL statistics, we only need this tag)
	 *		MIN
	 *		MAX
	 *		AVE
	 **/

	bool error = true;

	while ( !xml.atEnd() )
	{
		xml.readNext();
		if ( xml.isStartElement() )
		{
			if ( xml.name() == TAG_DATA ) error = false;
			else if ( xml.name() == TAG_TEST and !error )
			{
				if ( QString::compare ( xml.attributes().value ( ATTR_TYPE ).toString(), 
				                        TYPE_PACKETS, Qt::CaseInsensitive ) == 0 )
					error = loadPacketData ( &xml );
				else if ( QString::compare ( xml.attributes().value ( ATTR_TYPE ).toString(), 
							TYPE_TPUT, Qt::CaseInsensitive ) == 0 )
					error = loadThroughtputData ( &xml );
			}
			else 
			{
				xml.raiseError ( "[ERROR] Error in XML format" );
				error = true;
			}
		}
	}
	if ( xml.hasError() )
		cout << qPrintable ( xml.errorString () ) << endl;

	return !error;
}
Example #12
0
// Private attribute accessor methods
//
MapModel* 
Gpx::load ( QString fileName ){
    QList<Node*> m_trackPoints;
    MapModel *new_model = new MapModel( );
    QList<Way*> m_trackWays;
    QXmlStreamReader reader;
    QFile file(fileName);

    if (!file.open(QFile::ReadOnly | QFile::Text)){
         qDebug( )  << "Error: Cannot read file ";
            //return false
    }
    reader.setDevice(&file);

    if (!reader.atEnd( ))
        reader.readNext( );
    while (!reader.atEnd( )){
        if (reader.isStartElement( ))
        {
            if ((reader.name( ) == "gpx") or (reader.name( ) =="trk") or (reader.name( ) =="name") 
            or (reader.name( ) =="trkseg") or (reader.name( ) =="time")  or (reader.name( ) =="bounds"))
            {
                //qDebug( )<< "StartGPX = "<<reader.name( ).toString( );

                if (reader.name( ) =="time")
                {
                    //qDebug() << "set time: " << reader.readElementText( );
                    new_model->setTimestamp ( reader.readElementText( ) );

                }
                
                if (reader.name( ) =="bounds")
                {
                    new_model->setBounds (reader.attributes( ).value("minlat").toString( ).toDouble( ),
                                     reader.attributes( ).value("minlon").toString( ).toDouble( ),
                                     reader.attributes( ).value("maxlat").toString( ).toDouble( ),
                                     reader.attributes( ).value("maxlon").toString( ).toDouble( ));

                }
                
                if (reader.name( ) =="trkseg")
                {
                    if (!reader.atEnd( ))
                        reader.readNext( );
                    while (!reader.atEnd( ))
                    {
                        //is this element the start of an element?
                        if (reader.isStartElement( ))
                        {
                            if (reader.name( ) =="trkpt")
                            {
                                //add a new node.
                                m_trackPoints << (
                                    new Node(
                                        reader.attributes( ).value("lat").toString( ).toDouble( ),
                                        reader.attributes( ).value("lon").toString( ).toDouble( )));

                                if (!reader.atEnd( ))
                                    reader.readNext( );
                                //do this loop until the end of the file is reached
                                //or untill the end of trkpt is reached (see break).
                                while (!reader.atEnd( )){
                                    if (reader.isStartElement( ))
                                    {
                                        if (reader.name( ) == "ele")
                                        {
                                            //setAltitude
                                            m_trackPoints[m_trackPoints.size( )-1]->setAltitude(reader.readElementText( ).toDouble( ));
                                        }
                                        if (reader.name( ) == "time")
                                        {
                                            //setTimestamp
                                            m_trackPoints[m_trackPoints.size( )-1]->setTimestamp(reader.readElementText( ));
                                        }
                                    }
                                    if (reader.isEndElement( ))
                                    {
                                        if (reader.name( ) == "trkpt")
                                        {
                                            break;
                                        }
                                    }
                                    if (!reader.atEnd( ))
                                        reader.readNext( );
                                }
                            }
                        }
                        //find next element
                        if (!reader.atEnd( ))
                            reader.readNext( );
                    }

                }
                if (!reader.atEnd( ))
                    reader.readNext( );
                if (reader.isStartElement( )){
                    qDebug( )<< "StartGPX2 = "<<reader.name( ).toString( );
                }
            }else{
                qDebug( )<< "Something weird? = "<<reader.name( ).toString( );
                reader.raiseError (QObject::tr("Not a gpx file"));
            }
            if (!reader.atEnd( ))
                reader.readNext( );
        }
        else
        {
            if (!reader.atEnd( ))
                reader.readNext( );
        }
    }

    file.close( );
    if (reader.hasError( ))
    {
        qDebug( ) << "Error: Failed to parse file "<< fileName <<": "<< file.errorString( );
    } 
    else if (file.error( ) != QFile::NoError)
    {
        qDebug( ) << "Error: Cannot read file "<< fileName <<": "<< file.errorString( );
    }
    else 
    {
        m_trackWays << ( new Way(m_trackPoints) );
        new_model->setNodes ( m_trackPoints );
        new_model->setWays( m_trackWays );

        return new_model;
    }

    return 0;
}
Example #13
0
RunData::RunData(QObject *parent, QXmlStreamReader& reader):
	QObject(parent)
{
	init();
	ID=reader.attributes().value("ID").toString().toInt();
	while(reader.readNextStartElement())
	{
		if(reader.name()=="round")
		{
			round=reader.readElementText().toInt();
		}
		else if(reader.name()=="boatID")
		{
			boatID=reader.readElementText().toInt();
		}
		else if(reader.name()=="color")
		{
			color=reader.readElementText();
		}
		else if(reader.name()=="title1")
		{
			title1=reader.readElementText();
		}
		else if(reader.name()=="firstName1")
		{
			firstName1=reader.readElementText();
		}
		else if(reader.name()=="lastName1")
		{
			lastName1=reader.readElementText();
		}
		else if(reader.name()=="title2")
		{
			title2=reader.readElementText();
		}
		else if(reader.name()=="firstName2")
		{
			firstName2=reader.readElementText();
		}
		else if(reader.name()=="lastName2")
		{
			lastName2=reader.readElementText();
		}
		else if(reader.name()=="startTimeID")
		{
			startTimeID=reader.readElementText().toInt();
		}
		else if(reader.name()=="goalTimeID")
		{
			goalTimeID=reader.readElementText().toInt();
		}
		else if(reader.name()=="dsq")
		{
			dsq=reader.readElementText()=="true"?true:false;
		}
		else if(reader.name()=="errors")
		{
			errors=reader.readElementText();
		}
		else if(reader.name()=="published")
		{
			// ignore the published flag, it defaults to false
			//published=reader.readElementText()=="true"?true:false;
			reader.readElementText();
			published=false;
		}
		else if(reader.name()=="notes")
		{
			notes=reader.readElementText();
		}
		else if(reader.name()=="fireBrigade")
		{
			fireBrigade=reader.readElementText();
		}
		else if(reader.name()=="valuationClass")
		{
			valuationClass=reader.readElementText();
		}
		else if(reader.name()=="agePoints")
		{
			agePoints=reader.readElementText();
		}
		else
		{
			reader.raiseError(tr("unbekanntes XML-Tag innerhalb von 'run', Zeile: ") + QString::number(reader.lineNumber()));
		}
	}

	if(ID==0)
	{
		reader.raiseError(tr("Lauf hat ungültige ID!"));
	}
}
Example #14
0
/*!
    \fn void ExtensionInfoPrivate::readExtensionInfo(QXmlStreamReader &reader)
    \internal
*/
void ExtensionInfoPrivate::readExtensionInfo(QXmlStreamReader &reader)
{
    QString element = reader.name().toString();
    if (element != QString(EXTENSION)) {
        reader.raiseError(QCoreApplication::translate("ExtensionInfo", "Expected element '%1' as top level element").arg(EXTENSION));
        return;
    }
    name = reader.attributes().value(EXTENSION_NAME).toString();
    if (name.isEmpty()) {
        reader.raiseError(msgAttributeMissing(EXTENSION, EXTENSION_NAME));
        return;
    }
    version = reader.attributes().value(EXTENSION_VERSION).toString();
    if (version.isEmpty()) {
        reader.raiseError(msgAttributeMissing(EXTENSION, EXTENSION_VERSION));
        return;
    }
    if (!isValidVersion(version)) {
        reader.raiseError(msgInvalidFormat(EXTENSION_VERSION));
        return;
    }
    compatVersion = reader.attributes().value(EXTENSION_COMPATVERSION).toString();
    if (!compatVersion.isEmpty() && !isValidVersion(compatVersion)) {
        reader.raiseError(msgInvalidFormat(EXTENSION_COMPATVERSION));
        return;
    } else if (compatVersion.isEmpty()) {
        compatVersion = version;
    }
    QString experimentalString = reader.attributes().value(EXTENSION_EXPERIMENTAL).toString();
    experimental = (experimentalString.compare(QLatin1String("true"), Qt::CaseInsensitive) == 0);
    if (!experimentalString.isEmpty() && !experimental
            && experimentalString.compare(QLatin1String("false"), Qt::CaseInsensitive) != 0) {
        reader.raiseError(msgInvalidFormat(EXTENSION_EXPERIMENTAL));
        return;
    }
    enabled = !experimental;
    while (!reader.atEnd()) {
        reader.readNext();
        switch (reader.tokenType()) {
        case QXmlStreamReader::StartElement:
            element = reader.name().toString();
            if (element == VENDOR)
                vendor = reader.readElementText().trimmed();
            else if (element == COPYRIGHT)
                copyright = reader.readElementText().trimmed();
            else if (element == LICENSE)
                license = reader.readElementText().trimmed();
            else if (element == DESCRIPTION)
                description = reader.readElementText().trimmed();
            else if (element == URL)
                url = reader.readElementText().trimmed();
            else if (element == CATEGORY)
                category = reader.readElementText().trimmed();
            else if (element == DEPENDENCYLIST)
                readDependencies(reader);
            else if (element == ARGUMENTLIST)
                readArgumentDescriptions(reader);
            else
                reader.raiseError(msgInvalidElement(name));
            break;
        case QXmlStreamReader::EndDocument:
        case QXmlStreamReader::Comment:
        case QXmlStreamReader::EndElement:
        case QXmlStreamReader::Characters:
            break;
        default:
            reader.raiseError(msgUnexpectedToken());
            break;
        }
    }
}
Example #15
0
/*!
    \internal
*/
void PluginSpecPrivate::readPluginSpec(QXmlStreamReader &reader)
{
    QString element = reader.name().toString();
    if (element != QLatin1String(PLUGIN)) {
        reader.raiseError(QCoreApplication::translate("PluginSpec", "Expected element '%1' as top level element")
                          .arg(QLatin1String(PLUGIN)));
        return;
    }
    name = reader.attributes().value(QLatin1String(PLUGIN_NAME)).toString();
    if (name.isEmpty()) {
        reader.raiseError(msgAttributeMissing(PLUGIN, PLUGIN_NAME));
        return;
    }
    version = reader.attributes().value(QLatin1String(PLUGIN_VERSION)).toString();
    if (version.isEmpty()) {
        reader.raiseError(msgAttributeMissing(PLUGIN, PLUGIN_VERSION));
        return;
    }
    if (!isValidVersion(version)) {
        reader.raiseError(msgInvalidFormat(PLUGIN_VERSION));
        return;
    }
    compatVersion = reader.attributes().value(QLatin1String(PLUGIN_COMPATVERSION)).toString();
    if (!compatVersion.isEmpty() && !isValidVersion(compatVersion)) {
        reader.raiseError(msgInvalidFormat(PLUGIN_COMPATVERSION));
        return;
    } else if (compatVersion.isEmpty()) {
        compatVersion = version;
    }
    disabledByDefault = readBooleanValue(reader, PLUGIN_DISABLED_BY_DEFAULT);
    experimental = readBooleanValue(reader, PLUGIN_EXPERIMENTAL);
    if (reader.hasError())
        return;
    if (experimental)
        disabledByDefault = true;
    enabledInSettings = !disabledByDefault;
    while (!reader.atEnd()) {
        reader.readNext();
        switch (reader.tokenType()) {
        case QXmlStreamReader::StartElement:
            element = reader.name().toString();
            if (element == QLatin1String(VENDOR))
                vendor = reader.readElementText().trimmed();
            else if (element == QLatin1String(COPYRIGHT))
                copyright = reader.readElementText().trimmed();
            else if (element == QLatin1String(LICENSE))
                license = reader.readElementText().trimmed();
            else if (element == QLatin1String(DESCRIPTION))
                description = reader.readElementText().trimmed();
            else if (element == QLatin1String(URL))
                url = reader.readElementText().trimmed();
            else if (element == QLatin1String(CATEGORY))
                category = reader.readElementText().trimmed();
            else if (element == QLatin1String(DEPENDENCYLIST))
                readDependencies(reader);
            else if (element == QLatin1String(ARGUMENTLIST))
                readArgumentDescriptions(reader);
            else
                reader.raiseError(msgInvalidElement(name));
            break;
        case QXmlStreamReader::EndDocument:
        case QXmlStreamReader::Comment:
        case QXmlStreamReader::EndElement:
        case QXmlStreamReader::Characters:
            break;
        default:
            reader.raiseError(msgUnexpectedToken());
            break;
        }
    }
}
Example #16
0
void Point::loadXml(QXmlStreamReader &reader)
{
  LOG4CPP_INFO_S ((*mainCat)) << "Point::loadXml";

  bool success = true;

  QXmlStreamAttributes attributes = reader.attributes();

  if (attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_IDENTIFIER) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_ORDINAL) &&
      attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_IDENTIFIER_INDEX)) {

    m_identifier = attributes.value(DOCUMENT_SERIALIZE_POINT_IDENTIFIER).toString();
    m_ordinal = attributes.value(DOCUMENT_SERIALIZE_POINT_ORDINAL).toDouble();
    m_identifierIndex = attributes.value(DOCUMENT_SERIALIZE_POINT_IDENTIFIER_INDEX).toInt();

    while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
           (reader.name () != DOCUMENT_SERIALIZE_POINT)) {

      loadNextFromReader(reader);
      if (reader.atEnd()) {
        success = false;
        break;
      }

      if (reader.tokenType () == QXmlStreamReader::StartElement) {

        if (reader.name() == DOCUMENT_SERIALIZE_POINT_POSITION_SCREEN) {

          attributes = reader.attributes();

          if (attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_X) &&
              attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_Y)) {

            m_posScreen.setX (attributes.value(DOCUMENT_SERIALIZE_POINT_X).toDouble());
            m_posScreen.setY (attributes.value(DOCUMENT_SERIALIZE_POINT_Y).toDouble());

          } else {
            success = false;
            break;
          }
        } else if (reader.name() == DOCUMENT_SERIALIZE_POINT_POSITION_GRAPH) {

          attributes = reader.attributes();

          if (attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_X) &&
              attributes.hasAttribute(DOCUMENT_SERIALIZE_POINT_Y)) {

            m_posGraph.setX (attributes.value(DOCUMENT_SERIALIZE_POINT_X).toDouble());
            m_posGraph.setY (attributes.value(DOCUMENT_SERIALIZE_POINT_Y).toDouble());

          } else {
            success = false;
            break;
          }
        }
      }
    }
  } else {
    success = false;
  }

  if (!success) {
    reader.raiseError("Cannot read point data");
  }
}
Example #17
0
/*!
    \fn void PluginSpecPrivate::readPluginSpec(QXmlStreamReader &reader)
    \internal
*/
void PluginSpecPrivate::readPluginSpec(QXmlStreamReader &reader)
{
    QString element = reader.name().toString();
    if (element != QString(PLUGIN)) {
        reader.raiseError(QCoreApplication::translate("PluginSpec", "Expected element '%1' as top level element").arg(PLUGIN));
        return;
    }
    name = reader.attributes().value(PLUGIN_NAME).toString();
    if (name.isEmpty()) {
        reader.raiseError(msgAttributeMissing(PLUGIN, PLUGIN_NAME));
        return;
    }
    version = reader.attributes().value(PLUGIN_VERSION).toString();
    if (version.isEmpty()) {
        reader.raiseError(msgAttributeMissing(PLUGIN, PLUGIN_VERSION));
        return;
    }
    if (!isValidVersion(version)) {
        reader.raiseError(msgInvalidFormat(PLUGIN_VERSION));
        return;
    }
    compatVersion = reader.attributes().value(PLUGIN_COMPATVERSION).toString();
    if (!compatVersion.isEmpty() && !isValidVersion(compatVersion)) {
        reader.raiseError(msgInvalidFormat(PLUGIN_COMPATVERSION));
        return;
    } else if (compatVersion.isEmpty()) {
        compatVersion = version;
    }
    while (!reader.atEnd()) {
        reader.readNext();
        switch (reader.tokenType()) {
        case QXmlStreamReader::StartElement:
            element = reader.name().toString();
            if (element == VENDOR)
                vendor = reader.readElementText().trimmed();
            else if (element == COPYRIGHT)
                copyright = reader.readElementText().trimmed();
            else if (element == LICENSE)
                license = reader.readElementText().trimmed();
            else if (element == DESCRIPTION)
                description = reader.readElementText().trimmed();
            else if (element == URL)
                url = reader.readElementText().trimmed();
            else if (element == DEPENDENCYLIST)
                readDependencies(reader);
            else if (element == ARGUMENTLIST)
                readArgumentDescriptions(reader);
            else
                reader.raiseError(msgInvalidElement(name));
            break;
        case QXmlStreamReader::EndDocument:
        case QXmlStreamReader::Comment:
        case QXmlStreamReader::EndElement:
        case QXmlStreamReader::Characters:
            break;
        default:
            reader.raiseError(msgUnexpectedToken());
            break;
        }
    }
}
void process(QXmlStreamReader &xml, const QByteArray &headerPath, const QByteArray &prefix)
{
    if (!xml.readNextStartElement())
        return;

    if (xml.name() != "protocol") {
        xml.raiseError(QStringLiteral("The file is not a wayland protocol file."));
        return;
    }

    protocolName = byteArrayValue(xml, "name");

    if (protocolName.isEmpty()) {
        xml.raiseError(QStringLiteral("Missing protocol name."));
        return;
    }

    //We should convert - to _ so that the preprocessor wont generate code which will lead to unexpected behavior
    //However, the wayland-scanner doesn't do so we will do the same for now
    //QByteArray preProcessorProtocolName = QByteArray(protocolName).replace('-', '_').toUpper();
    QByteArray preProcessorProtocolName = QByteArray(protocolName).toUpper();

    QList<WaylandInterface> interfaces;

    while (xml.readNextStartElement()) {
        if (xml.name() == "interface")
            interfaces << readInterface(xml);
        else
            xml.skipCurrentElement();
    }

    if (xml.hasError())
        return;

    if (option == ServerHeader) {
        QByteArray inclusionGuard = QByteArray("QT_WAYLAND_SERVER_") + preProcessorProtocolName.constData();
        printf("#ifndef %s\n", inclusionGuard.constData());
        printf("#define %s\n", inclusionGuard.constData());
        printf("\n");
        printf("#include \"wayland-server.h\"\n");
        if (headerPath.isEmpty())
            printf("#include \"wayland-%s-server-protocol.h\"\n", QByteArray(protocolName).replace('_', '-').constData());
        else
            printf("#include <%s/wayland-%s-server-protocol.h>\n", headerPath.constData(), QByteArray(protocolName).replace('_', '-').constData());
        printf("#include <QByteArray>\n");
        printf("#include <QMultiMap>\n");
        printf("#include <QString>\n");

        printf("\n");
        printf("#ifndef WAYLAND_VERSION_CHECK\n");
        printf("#define WAYLAND_VERSION_CHECK(major, minor, micro) \\\n");
        printf("    ((WAYLAND_VERSION_MAJOR > (major)) || \\\n");
        printf("    (WAYLAND_VERSION_MAJOR == (major) && WAYLAND_VERSION_MINOR > (minor)) || \\\n");
        printf("    (WAYLAND_VERSION_MAJOR == (major) && WAYLAND_VERSION_MINOR == (minor) && WAYLAND_VERSION_MICRO >= (micro)))\n");
        printf("#endif\n");

        printf("\n");
        printf("QT_BEGIN_NAMESPACE\n");

        QByteArray serverExport;
        if (headerPath.size()) {
            serverExport = QByteArray("Q_WAYLAND_SERVER_") + preProcessorProtocolName + "_EXPORT";
            printf("\n");
            printf("#if !defined(%s)\n", serverExport.constData());
            printf("#  if defined(QT_SHARED)\n");
            printf("#    define %s Q_DECL_EXPORT\n", serverExport.constData());
            printf("#  else\n");
            printf("#    define %s\n", serverExport.constData());
            printf("#  endif\n");
            printf("#endif\n");
        }
        printf("\n");
        printf("namespace QtWaylandServer {\n");

        for (int j = 0; j < interfaces.size(); ++j) {
            const WaylandInterface &interface = interfaces.at(j);

            if (ignoreInterface(interface.name))
                continue;

            const char *interfaceName = interface.name.constData();

            QByteArray stripped = stripInterfaceName(interface.name, prefix);
            const char *interfaceNameStripped = stripped.constData();

            printf("    class %s %s\n    {\n", serverExport.constData(), interfaceName);
            printf("    public:\n");
            printf("        %s(struct ::wl_client *client, int id, int version);\n", interfaceName);
            printf("        %s(struct ::wl_display *display, int version);\n", interfaceName);
            printf("        %s();\n", interfaceName);
            printf("\n");
            printf("        virtual ~%s();\n", interfaceName);
            printf("\n");
            printf("        class Resource\n");
            printf("        {\n");
            printf("        public:\n");
            printf("            Resource() : %s_object(0), handle(0) {}\n", interfaceNameStripped);
            printf("            virtual ~Resource() {}\n");
            printf("\n");
            printf("            %s *%s_object;\n", interfaceName, interfaceNameStripped);
            printf("            struct ::wl_resource *handle;\n");
            printf("\n");
            printf("            struct ::wl_client *client() const { return handle->client; }\n");
            printf("            int version() const { return wl_resource_get_version(handle); }\n");
            printf("\n");
            printf("            static Resource *fromResource(struct ::wl_resource *resource) { return static_cast<Resource *>(resource->data); }\n");
            printf("        };\n");
            printf("\n");
            printf("        void init(struct ::wl_client *client, int id, int version);\n");
            printf("        void init(struct ::wl_display *display, int version);\n");
            printf("\n");
            printf("        Resource *add(struct ::wl_client *client, int version);\n");
            printf("        Resource *add(struct ::wl_client *client, int id, int version);\n");
            printf("        Resource *add(struct wl_list *resource_list, struct ::wl_client *client, int id, int version);\n");
            printf("\n");
            printf("        Resource *resource() { return m_resource; }\n");
            printf("        const Resource *resource() const { return m_resource; }\n");
            printf("\n");
            printf("        QMultiMap<struct ::wl_client*, Resource*> resourceMap() { return m_resource_map; }\n");
            printf("        const QMultiMap<struct ::wl_client*, Resource*> resourceMap() const { return m_resource_map; }\n");
            printf("\n");
            printf("        bool isGlobal() const { return m_global != 0; }\n");
            printf("        bool isResource() const { return m_resource != 0; }\n");

            printEnums(interface.enums);

            bool hasEvents = !interface.events.isEmpty();

            if (hasEvents) {
                printf("\n");
                foreach (const WaylandEvent &e, interface.events) {
                    printf("        void send_");
                    printEvent(e);
                    printf(";\n");
                    printf("        void send_");
                    printEvent(e, false, true);
                    printf(";\n");
                }
            }

            printf("\n");
            printf("    protected:\n");
            printf("        virtual Resource *%s_allocate();\n", interfaceNameStripped);
            printf("\n");
            printf("        virtual void %s_bind_resource(Resource *resource);\n", interfaceNameStripped);
            printf("        virtual void %s_destroy_resource(Resource *resource);\n", interfaceNameStripped);

            bool hasRequests = !interface.requests.isEmpty();

            if (hasRequests) {
                printf("\n");
                foreach (const WaylandEvent &e, interface.requests) {
                    printf("        virtual void %s_", interfaceNameStripped);
                    printEvent(e);
                    printf(";\n");
                }
            }

            printf("\n");
            printf("    private:\n");
            printf("        static void bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id);\n");
            printf("        static void destroy_func(struct ::wl_resource *client_resource);\n");
            printf("\n");
            printf("        Resource *bind(struct ::wl_client *client, uint32_t id, int version);\n");

            if (hasRequests) {
                printf("\n");
                printf("        static const struct ::%s_interface m_%s_interface;\n", interfaceName, interfaceName);

                printf("\n");
                for (int i = 0; i < interface.requests.size(); ++i) {
                    const WaylandEvent &e = interface.requests.at(i);
                    printf("        static void ");

                    printEventHandlerSignature(e, interfaceName);
                    printf(";\n");
                }
            }

            printf("\n");
            printf("        QMultiMap<struct ::wl_client*, Resource*> m_resource_map;\n");
            printf("        Resource *m_resource;\n");
            printf("        struct ::wl_global *m_global;\n");
            printf("        uint32_t m_globalVersion;\n");
            printf("    };\n");

            if (j < interfaces.size() - 1)
                printf("\n");
        }

        printf("}\n");
        printf("\n");
        printf("QT_END_NAMESPACE\n");
        printf("\n");
        printf("#endif\n");
    }
Example #19
0
void QgsOSMXmlImport::readWay( QXmlStreamReader& xml )
{
  /*
   <way id="141756602" user="******" uid="527259" visible="true" version="1" changeset="10145142" timestamp="2011-12-18T10:43:14Z">
    <nd ref="318529958"/>
    <nd ref="1551725779"/>
    <nd ref="1551725792"/>
    <nd ref="809695938"/>
    <nd ref="1551725689"/>
    <nd ref="809695935"/>
    <tag k="highway" v="service"/>
    <tag k="oneway" v="yes"/>
   </way>
  */
  QXmlStreamAttributes attrs = xml.attributes();
  QgsOSMId id = attrs.value( "id" ).toString().toLongLong();

  // insert to DB
  sqlite3_bind_int64( mStmtInsertWay, 1, id );

  if ( sqlite3_step( mStmtInsertWay ) != SQLITE_DONE )
  {
    xml.raiseError( QString( "Storing way %1 failed." ).arg( id ) );
  }

  sqlite3_reset( mStmtInsertWay );

  int way_pos = 0;

  while ( !xml.atEnd() )
  {
    xml.readNext();

    if ( xml.isEndElement() ) // </way>
      break;

    if ( xml.isStartElement() )
    {
      if ( xml.name() == "nd" )
      {
        QgsOSMId node_id = xml.attributes().value( "ref" ).toString().toLongLong();

        sqlite3_bind_int64( mStmtInsertWayNode, 1, id );
        sqlite3_bind_int64( mStmtInsertWayNode, 2, node_id );
        sqlite3_bind_int( mStmtInsertWayNode, 3, way_pos );

        if ( sqlite3_step( mStmtInsertWayNode ) != SQLITE_DONE )
        {
          xml.raiseError( QString( "Storing ways_nodes %1 - %2 failed." ).arg( id ).arg( node_id ) );
        }

        sqlite3_reset( mStmtInsertWayNode );

        way_pos++;

        xml.skipCurrentElement();
      }
      else if ( xml.name() == "tag" )
        readTag( true, id, xml );
      else
        xml.skipCurrentElement();
    }
  }
}
bool DMARC::PublishedPolicyPrivate::parse(QXmlStreamReader& r)
{
	bool seen_domain = false;
	bool seen_adkim  = false;
	bool seen_aspf   = false;
	bool seen_p      = false;
	bool seen_sp     = false;
	bool seen_pct    = false;

	while (r.readNextStartElement()) {
		if (r.name() == QLatin1String("domain")) {
			if (!seen_domain) {
				seen_domain  = true;
				this->domain = r.readElementText();
			}
			else {
				r.raiseError(QCoreApplication::translate("dmarcparser", "Duplicate <%1> tag").arg(QLatin1String("domain")));
			}
		}
		else if (r.name() == QLatin1String("adkim")) {
			if (!seen_adkim) {
				seen_adkim    = true;
				QString value = r.readElementText();
				this->adkim   = string2policy(value);

				if (DMARC::UnknownPolicy == this->adkim) {
					r.raiseError(QCoreApplication::translate("dmarcparser", "Value '%1' is not valid for <%2>").arg(value, QLatin1String("adkim")));
				}
			}
			else {
				r.raiseError(QCoreApplication::translate("dmarcparser", "Duplicate <%1> tag").arg(QLatin1String("adkim")));
			}
		}
		else if (r.name() == QLatin1String("aspf")) {
			if (!seen_aspf) {
				seen_aspf     = true;
				QString value = r.readElementText();
				this->aspf    = string2policy(value);

				if (DMARC::UnknownPolicy == this->aspf) {
					r.raiseError(QCoreApplication::translate("dmarcparser", "Value '%1' is not valid for <%2>").arg(value, QLatin1String("aspf")));
				}
			}
			else {
				r.raiseError(QCoreApplication::translate("dmarcparser", "Duplicate <%1> tag").arg(QLatin1String("aspf")));
			}
		}
		else if (r.name() == QLatin1String("p")) {
			if (!seen_p) {
				seen_p        = true;
				QString value = r.readElementText();
				this->p       = string2disposition(value);

				if (DMARC::DispositionUnknown == this->p) {
					r.raiseError(QCoreApplication::translate("dmarcparser", "Value '%1' is not valid for <%2>").arg(value, QLatin1String("p")));
				}
			}
			else {
				r.raiseError(QCoreApplication::translate("dmarcparser", "Duplicate <%1> tag").arg(QLatin1String("p")));
			}
		}
		else if (r.name() == QLatin1String("sp")) {
			if (!seen_sp) {
				seen_sp       = true;
				QString value = r.readElementText();
				this->sp      = string2disposition(value);

				if (DMARC::DispositionUnknown == this->sp) {
					r.raiseError(QCoreApplication::translate("dmarcparser", "Value '%1' is not valid for <%2>").arg(value, QLatin1String("sp")));
				}
			}
			else {
				r.raiseError(QCoreApplication::translate("dmarcparser", "Duplicate <%1> tag").arg(QLatin1String("sp")));
			}
		}
		else if (r.name() == QLatin1String("pct")) {
			if (!seen_pct) {
				bool ok;
				seen_pct      = true;
				QString value = r.readElementText();
				this->pct     = value.toInt(&ok);

				if (!ok) {
					r.raiseError(QCoreApplication::translate("dmarcparser", "Value '%1' is not a valid integer").arg(value));
				}
			}
			else {
				r.raiseError(QCoreApplication::translate("dmarcparser", "Duplicate <%1> tag").arg(QLatin1String("pct")));
			}
		}
		else {
			r.raiseError(QCoreApplication::translate("dmarcparser", "Unexpected element <%1>").arg(r.name().toString()));
		}
	}

	if (!r.hasError()) {
		if (!seen_domain) {
			r.raiseError(QCoreApplication::translate("dmarcparser", "No <%1> tag").arg(QLatin1String("domain")));
		}
		else if (!seen_adkim) {
			r.raiseError(QCoreApplication::translate("dmarcparser", "No <%1> tag").arg(QLatin1String("adkim")));
		}
		else if (!seen_aspf) {
			r.raiseError(QCoreApplication::translate("dmarcparser", "No <%1> tag").arg(QLatin1String("aspf")));
		}
		else if (!seen_p) {
			r.raiseError(QCoreApplication::translate("dmarcparser", "No <%1> tag").arg(QLatin1String("p")));
		}
		else if (!seen_pct) {
			r.raiseError(QCoreApplication::translate("dmarcparser", "No <%1> tag").arg(QLatin1String("pct")));
		}
	}

	return !r.hasError();
}