QPatternist::Item ExternalSourceLoader::evaluateSingleton(const QXmlName name, const QPatternist::DynamicContext::Ptr &context) { Q_ASSERT(!name.isNull()); const VariableValue variable(m_variableMap.value(Global::namePool()->stringForLocalName(name.localName()))); if(variable.second == Document) { Q_ASSERT_X(QFile::exists(variable.first.toLocalFile()), Q_FUNC_INFO, qPrintable(QString::fromLatin1("The file %1 doesn't exist").arg(variable.first.toLocalFile()))); Q_ASSERT_X(m_resourceLoader->openDocument(variable.first, context), Q_FUNC_INFO, "We're supposed to have the value. If not, an error should have been issued at query compile time."); return m_resourceLoader->openDocument(variable.first, context); } else if(variable.second == Query) { /* Well, here we open the file and execute it. */ m_query.setQuery(QUrl::fromLocalFile(variable.first.toLocalFile())); Q_ASSERT(m_query.isValid()); QXmlResultItems result; m_query.evaluateTo(&result); return QPatternist::Item::fromPublic(result.next()); } else { Q_ASSERT(variable.second == URI); return QPatternist::AtomicString::fromValue(variable.first.toString()); } }
//! [9] QObjectXmlModel::AllMetaObjects QObjectXmlModel::allMetaObjects() const { QXmlQuery query(namePool()); query.bindVariable("root", root()); query.setQuery("declare variable $root external;" "$root/descendant-or-self::QObject"); Q_ASSERT(query.isValid()); QXmlResultItems result; query.evaluateTo(&result); QXmlItem i(result.next()); AllMetaObjects objects; while (!i.isNull()) { const QMetaObject *moo = asQObject(i.toNodeModelIndex())->metaObject(); while (moo) { if (!objects.contains(moo)) objects.append(moo); moo = moo->superClass(); } i = result.next(); } Q_ASSERT(!objects.contains(0)); return objects; }
SimXmlElement SimXmlDoc::findElement(const std::string& elementName, const std::string& refId) const { SimXmlElement result(QSharedPointer<QDomElement>(), *this); if (isNull()){ return result; } QString queryString = simQuery("/SimModel/" + elementName + "[@RefId='" + refId + "'][1]"); QXmlQuery query; QDomNodeModel model(query.namePool(), *(impl())); query.setFocus(QXmlItem(model.fromDomNode(impl()->documentElement()))); query.setQuery(queryString, QUrl(QString::fromStdString(this->path()))); if (query.isValid()) { QXmlResultItems items; query.evaluateTo(&items); QXmlItem item(items.next()); if(!item.isNull()) { QDomElement elem = model.toDomNode(item.toNodeModelIndex()).toElement(); QSharedPointer<QDomElement> impl(new QDomElement(elem)); result = SimXmlElement(impl, *this); } } return result; }
void tst_QXmlResultItems::constCorrectness() const { const QXmlResultItems result; /* These functions should be const. */ result.current(); result.hasError(); }
void RssFeedNode::render(Grantlee::OutputStream* stream, Grantlee::Context* c) { QNetworkAccessManager *mgr = new QNetworkAccessManager(this); QUrl url(Grantlee::getSafeString(m_url.resolve(c))); QNetworkReply *reply = mgr->get(QNetworkRequest(url)); QEventLoop eLoop; connect( mgr, SIGNAL( finished( QNetworkReply * ) ), &eLoop, SLOT( quit() ) ); eLoop.exec( QEventLoop::ExcludeUserInputEvents ); c->push(); foreach(Grantlee::Node *n, m_childNodes) { if (!n->inherits(XmlNamespaceNode::staticMetaObject.className())) continue; Grantlee::OutputStream _dummy; n->render(&_dummy, c); } QXmlQuery query; QByteArray ba = reply->readAll(); QBuffer buffer; buffer.setData(ba); buffer.open(QIODevice::ReadOnly); query.bindVariable("inputDocument", &buffer); QString ns; QHash<QString, QVariant> h = c->lookup("_ns").toHash(); QHash<QString, QVariant>::const_iterator it = h.constBegin(); const QHash<QString, QVariant>::const_iterator end = h.constEnd(); for ( ; it != end; ++it ) { if (it.key().isEmpty()) { ns += QLatin1Literal( "declare default element namespace " ) + QLatin1Literal( " \"" ) + it.value().toString() + QLatin1Literal( "\";\n" ); } else { ns += QLatin1Literal( "declare namespace " ) + it.key() + QLatin1Literal( " = \"" ) + it.value().toString() + QLatin1Literal( "\";\n" ); } } query.setQuery(ns + "doc($inputDocument)" + Grantlee::getSafeString(m_query.resolve(c)).get()); QXmlResultItems result; query.evaluateTo(&result); QXmlItem item(result.next()); int count = 0; while (!item.isNull()) { if (count++ > 20) break; query.setFocus(item); c->push(); foreach(Grantlee::Node *n, m_childNodes) { if (n->inherits(XmlNamespaceNode::staticMetaObject.className())) continue; c->insert("_q", QVariant::fromValue(query)); n->render(stream, c); } c->pop(); item = result.next(); } c->pop(); }
void tst_QXmlResultItems::evalateWithQueryError() const { /* This query is invalid. */ const QXmlQuery query; QXmlResultItems result; query.evaluateTo(&result); QVERIFY(result.hasError()); QVERIFY(result.next().isNull()); }
void tst_QXmlResultItems::hasError() const { /* Check default value. */ { QXmlResultItems result; QVERIFY(!result.hasError()); } /* Stress it on a default constructed value. */ { QXmlResultItems result; QVERIFY(!result.hasError()); QVERIFY(!result.hasError()); QVERIFY(!result.hasError()); } }
void tst_QXmlResultItems::next() const { /* Check default value. */ { QXmlResultItems result; QVERIFY(result.next().isNull()); } /* Stress it on a default constructed value. */ { QXmlResultItems result; QVERIFY(result.next().isNull()); QVERIFY(result.next().isNull()); QVERIFY(result.next().isNull()); } }
void tst_QXmlResultItems::evaluate() const { QFETCH(QString, queryString); QXmlQuery query; query.setQuery(queryString); QVERIFY(query.isValid()); QXmlResultItems result; query.evaluateTo(&result); QXmlItem item(result.next()); while(!item.isNull()) { QVERIFY(!result.current().isNull()); QVERIFY(!result.hasError()); item = result.next(); } /* Now, stress beyond the end. */ for(int i = 0; i < 3; ++i) { QVERIFY(result.current().isNull()); QVERIFY(result.next().isNull()); } }
/*! What's special about this is that it's not the QAbstractXmlForwardIterator::next() that triggers the error, it's QPatternist::Expression::evaluateSingleton() directly. */ void tst_QXmlResultItems::evalateWithInstantError() const { QXmlQuery query; MessageSilencer silencer; query.setMessageHandler(&silencer); query.setQuery(QLatin1String("fn:error()")); QXmlResultItems result; query.evaluateTo(&result); /* Check the values, and stress it. */ for(int i = 0; i < 3; ++i) { QVERIFY(result.current().isNull()); QVERIFY(result.next().isNull()); QVERIFY(result.hasError()); } }
Presets *PtzManagement::getPresets() { Presets *presets = NULL; Message *msg = newMessage(); QDomElement getPresets = newElement("wsdl:GetPresets"); QDomElement profileToken = newElement("wsdl:ProfileToken","profile_CIF"); getPresets.appendChild(profileToken); msg->appendToBody(getPresets); MessageParser *result = sendMessage(msg); if(result != NULL){ presets = new Presets(); QXmlQuery *query = result->query(); QXmlResultItems items; QXmlItem item; QString value,xml; QDomDocument doc; QDomNodeList itemNodeList; QDomNode node; query->setQuery(result->nameSpace()+"doc($inputDocument)//tptz:Preset"); query->evaluateTo(&items); item = items.next(); while(!item.isNull()){ query->setFocus(item); query->setQuery(result->nameSpace()+"."); query->evaluateTo(&xml); doc.setContent(xml); itemNodeList = doc.elementsByTagName("tptz:Preset"); for(int i=0; i<itemNodeList.size(); i++) { node = itemNodeList.at(i); value = node.toElement().attribute("token"); presets->setToken(value.trimmed()); } query->setQuery(result->nameSpace()+"./tt:Name/string()"); query->evaluateTo(&value); presets->setName(value.trimmed()); item = items.next(); } } delete msg; delete result; return presets; }
bool setFocusHelper(QXmlQuery *const queryInstance, const TInputType &focusValue) { /* We call resourceLoader(), so we have ensured that we have a resourceLoader * that we will share in our copy. */ queryInstance->d->resourceLoader(); QXmlQuery focusQuery(*queryInstance); /* Now we use the same, so we own the loaded document. */ focusQuery.d->m_resourceLoader = queryInstance->d->m_resourceLoader; /* The copy constructor doesn't allow us to copy an existing QXmlQuery and * changing the language at the same time so we need to use private API. */ focusQuery.d->queryLanguage = QXmlQuery::XQuery10; Q_ASSERT(focusQuery.queryLanguage() == QXmlQuery::XQuery10); focusQuery.bindVariable(QChar::fromLatin1('u'), focusValue); focusQuery.setQuery(QLatin1String("doc($u)")); Q_ASSERT(focusQuery.isValid()); QXmlResultItems focusResult; queryInstance->d->m_resourceLoader = focusQuery.d->m_resourceLoader; focusQuery.evaluateTo(&focusResult); const QXmlItem focusItem(focusResult.next()); if(focusItem.isNull() || focusResult.hasError()) { /* The previous focus must be cleared in error situations. * Otherwise the query may be left in an inconsistent state. */ queryInstance->setFocus(QXmlItem()); return false; } else { queryInstance->setFocus(focusItem); return true; } }
void WfsCapabilitiesParser::parseFeatures(std::vector<Resource> &wfsFeatures) { qDebug() << "WfsCapabilitiesParser::parseFeatures()"; QXmlResultItems results; UPXmlQuery& query = _parser->queryFromRoot("//wfs:WFS_Capabilities/wfs:FeatureTypeList/wfs:FeatureType"); if (query->isValid()) { query->evaluateTo( &results); QXmlItem item(results.next()); while (!item.isNull()) { WfsFeature feature; parseFeature(item, feature); wfsFeatures.push_back(feature); item = results.next(); } if (results.hasError()) { ERROR0(TR(QString("XPath evaluation failed."))); } } }
std::vector<SimXmlElement> SimXmlDoc::getElements(const std::string& elementName) const { std::vector<SimXmlElement> result; if (isNull()){ return result; } QString queryString = simQuery("/SimModel/" + elementName); QXmlQuery query; QDomNodeModel model(query.namePool(), *(impl())); query.setFocus(QXmlItem(model.fromDomNode(impl()->documentElement()))); query.setQuery(queryString, QUrl(QString::fromStdString(this->path()))); if (query.isValid()) { QString junk; QXmlResultItems items; query.evaluateTo(&items); QXmlItem item(items.next()); while (!item.isNull()) { QDomElement elem = model.toDomNode(item.toNodeModelIndex()).toElement(); QSharedPointer<QDomElement> impl(new QDomElement(elem)); result.push_back(SimXmlElement(impl, *this)); // get next item item = items.next(); } } return result; }
static PyObject *meth_QXmlResultItems_next(PyObject *sipSelf, PyObject *sipArgs) { PyObject *sipParseErr = NULL; { QXmlResultItems *sipCpp; if (sipParseArgs(&sipParseErr, sipArgs, "B", &sipSelf, sipType_QXmlResultItems, &sipCpp)) { QXmlItem*sipRes; sipRes = new QXmlItem(sipCpp->next()); return sipConvertFromNewType(sipRes,sipType_QXmlItem,NULL); } } /* Raise an exception if the arguments couldn't be parsed. */ sipNoMethod(sipParseErr, sipName_QXmlResultItems, sipName_next, doc_QXmlResultItems_next); return NULL; }
void TestSimulationMaker::testXmlQuery() { writeQuery("/simulation/model", 1); writeQuery("/simulation//model[@type='LifeCycle']", 2); writeQuery("/simulation/model[@name='wasp']/model[@name='egg']/parameter[@name='k']", 3); writeQuery("/simulation/output[@name='butterflyOutput']/" "presentation[@name='butterflyPlot']/xyvariables[@name='butterflyXY']", 4); QXmlQuery query; query.setQuery("<e/>, 1, 'two'"); QXmlResultItems result; if (query.isValid()) { query.evaluateTo(&result); QXmlItem item(result.next()); while (!item.isNull()) { // use item item = result.next(); } if (result.hasError()) /* Runtime error! */; } }
Nodes *PtzManagement::getNodes() { Nodes *nodes = NULL; Message *msg = newMessage(); QDomElement getNodes = newElement("wsdl:GetNodes"); msg->appendToBody(getNodes); MessageParser *result = sendMessage(msg); if(result != NULL){ nodes = new Nodes(); QXmlQuery *query = result->query(); QXmlResultItems items; QXmlItem item; QDomDocument doc; QDomNodeList itemNodeList; QDomNode node; QString value,xml; query->setQuery(result->nameSpace()+"doc($inputDocument)//tptz:PTZNode"); query->evaluateTo(&items); item = items.next(); while(!item.isNull()){ query->setFocus(item); query->setQuery(result->nameSpace()+"."); query->evaluateTo(&xml); doc.setContent(xml); itemNodeList = doc.elementsByTagName("tptz:PTZNode"); for(int i=0; i<itemNodeList.size();i++) { node = itemNodeList.at(i); value = node.toElement().attribute("token"); nodes->setPtzNodeToken(value.trimmed()); } query->setQuery(result->nameSpace()+"./tt:Name/string()"); query->evaluateTo(&value); nodes->setName(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:AbsolutePanTiltPositionSpace/tt:URI/string()"); query->evaluateTo(&value); nodes->setAppsUri(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:AbsolutePanTiltPositionSpace/tt:XRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setAppsXRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:AbsolutePanTiltPositionSpace/tt:XRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setAppsXRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:AbsolutePanTiltPositionSpace/tt:YRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setAppsYRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:AbsolutePanTiltPositionSpace/tt:YRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setAppsYRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:AbsoluteZoomPositionSpace/tt:URI/string()"); query->evaluateTo(&value); nodes->setAzpsUri(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:AbsoluteZoomPositionSpace/tt:XRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setAzpsXRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:AbsoluteZoomPositionSpace/tt:XRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setAzpsXRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:RelativePanTiltTranslationSpace/tt:URI/string()"); query->evaluateTo(&value); nodes->setRptsUri(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:RelativePanTiltTranslationSpace/tt:XRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setRptsXRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:RelativePanTiltTranslationSpace/tt:XRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setRptsXRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:RelativePanTiltTranslationSpace/tt:YRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setRptsYRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:RelativePanTiltTranslationSpace/tt:YRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setRptsYRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:RelativeZoomTranslationSpace/tt:URI/string()"); query->evaluateTo(&value); nodes->setRztsUri(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:RelativeZoomTranslationSpace/tt:XRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setRztsXRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:RelativeZoomTranslationSpace/tt:XRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setRztsXRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ContinuousPanTiltVelocitySpace/tt:URI/string()"); query->evaluateTo(&value); nodes->setCpvsUri(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ContinuousPanTiltVelocitySpace/tt:XRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setCpvsXRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ContinuousPanTiltVelocitySpace/tt:XRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setCpvsXRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ContinuousPanTiltVelocitySpace/tt:YRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setCpvsYRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ContinuousPanTiltVelocitySpace/tt:YRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setCpvsYRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ContinuousZoomVelocitySpace/tt:URI/string()"); query->evaluateTo(&value); nodes->setCzvsUri(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ContinuousZoomVelocitySpace/tt:XRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setCzvsXRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ContinuousZoomVelocitySpace/tt:XRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setCzvsXRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:PanTiltSpeedSpace/tt:URI/string()"); query->evaluateTo(&value); nodes->setPssUri(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:PanTiltSpeedSpace/tt:XRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setPssXRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:PanTiltSpeedSpace/tt:XRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setPssXRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ZoomSpeedSpace/tt:URI/string()"); query->evaluateTo(&value); nodes->setZssUri(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ZoomSpeedSpace/tt:XRange/tt:Min/string()"); query->evaluateTo(&value); nodes->setZssXRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:SupportedPTZSpaces/tt:ZoomSpeedSpace/tt:XRange/tt:Max/string()"); query->evaluateTo(&value); nodes->setZssXRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:MaximumNumberOfPresets/string()"); query->evaluateTo(&value); nodes->setMaximumNumberOfPresets(value.trimmed().toInt()); query->setQuery(result->nameSpace()+"./tt:HomeSupported/string()"); query->evaluateTo(&value); nodes->setHomeSupported(value.trimmed() == "true"?true:false); item = items.next(); } } delete msg; delete result; return nodes; }
//Load the asset from the specified file bool GMAsset_Sprite::Load(const QFileInfo &file) { this->GMAsset::Load(file); QFile spriteFile(file.absoluteFilePath()); if (!spriteFile.exists()) return false; //File does not exist if (!spriteFile.open(QIODevice::ReadOnly | QIODevice::Text)) return false; //Failed to open the file QXmlQuery query; QXmlResultItems result; QXmlItem item; query.setFocus(&spriteFile); //Type of sprite query.setQuery("sprite/type/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) SetType(item.toAtomicValue().toInt()); } QPoint origin; //X Origin query.setQuery("sprite/xorig/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) origin.setX(item.toAtomicValue().toInt()); } //Y Origin query.setQuery("sprite/yorigin/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) origin.setY(item.toAtomicValue().toInt()); } SetOrigin(origin); //Collision Kind query.setQuery("sprite/colkind/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) SetCollisionKind((CollisionKind)item.toAtomicValue().toInt()); } //Color Tolerance query.setQuery("sprite/coltolerance/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) SetColTolerance(item.toAtomicValue().toInt()); } //Seprate Masks? query.setQuery("sprite/sepmasks/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) SetSepMasks(item.toAtomicValue().toBool()); } //Bounding Box Mode query.setQuery("sprite/bboxmode/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) SetBboxMode((BoundingBoxMode)item.toAtomicValue().toInt()); } QRect bbox; //Bounding box //Bounding Box Left query.setQuery("sprite/bbox_left/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) bbox.setLeft(item.toAtomicValue().toInt()); } //Bounding Box Right query.setQuery("sprite/bbox_right/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) bbox.setRight(item.toAtomicValue().toInt()); } //Bounding Box Top query.setQuery("sprite/bbox_top/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) bbox.setTop(item.toAtomicValue().toInt()); } //Bounding Box Bottom query.setQuery("sprite/bbox_bottom/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) bbox.setBottom(item.toAtomicValue().toInt()); } SetBbox(bbox); //Set the bounding box //Horizontal Tile? query.setQuery("sprite/HTile/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) SetHTile(item.toAtomicValue().toBool()); } //Vertical Tile? query.setQuery("sprite/VTile/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) SetVTile(item.toAtomicValue().toBool()); } //For 3D? query.setQuery("sprite/For3D/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) SetFor3D(item.toAtomicValue().toBool()); } QSize size; //Width of sprite query.setQuery("sprite/width/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) size.setWidth(item.toAtomicValue().toInt()); } //Height of Sprite query.setQuery("sprite/height/string()"); query.evaluateTo(&result); item = result.next(); if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) size.setHeight(item.toAtomicValue().toInt()); } SetSize(size); //Set the size of the sprite //We will now get all of the frames for the sprite (NOTE: This ignores the index attribute and just adds them in order) query.setQuery("sprite/frames/frame/string()"); query.evaluateTo(&result); item = result.next(); while (!item.isNull()) { if (item.isAtomicValue()) { //Make sure the item is an atomic value (ie, the node string was returned) QString frameFilePath = GetFileInfo().absolutePath().append("/").append(item.toAtomicValue().toString()); frames.push_back(QFileInfo(frameFilePath)); } item = result.next(); } spriteFile.close(); //Close the XML File return true; }
Configurations *PtzManagement::getConfigurations() { Configurations *configurations = NULL; Message *msg = newMessage(); msg->appendToBody(newElement("wsdl:GetConfigurations")); MessageParser *result = sendMessage(msg); if(result != NULL){ configurations = new Configurations(); QXmlQuery *query = result->query(); QString value,xml; QDomDocument doc; QDomNodeList itemNodeList; QDomNode node; QXmlResultItems items; QXmlItem item; query->setQuery(result->nameSpace()+"doc($inputDocument)//tptz:PTZConfiguration"); query->evaluateTo(&items); item = items.next(); while(!item.isNull()){ query->setFocus(item); query->setQuery(result->nameSpace()+"."); query->evaluateTo(&xml); doc.setContent(xml); itemNodeList = doc.elementsByTagName("tptz:PTZConfiguration"); for(int i=0; i<itemNodeList.size(); i++) { node = itemNodeList.at(i); value = node.toElement().attribute("token"); configurations->setToken(value.trimmed()); } query->setQuery(result->nameSpace()+"./tt:Name/string()"); query->evaluateTo(&value); configurations->setName(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:UseCount/string()"); query->evaluateTo(&value); configurations->setUseCount(value.trimmed().toInt()); query->setQuery(result->nameSpace()+"./tt:NodeToken/string()"); query->evaluateTo(&value); configurations->setNodeToken(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:DefaultAbsolutePantTiltPositionSpace/string()"); query->evaluateTo(&value); configurations->setDefaultAbsolutePantTiltPositionSpace(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:DefaultAbsoluteZoomPositionSpace/string()"); query->evaluateTo(&value); configurations->setDefaultAbsoluteZoomPositionSpace(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:DefaultRelativePanTiltTranslationSpace/string()"); query->evaluateTo(&value); configurations->setDefaultRelativePanTiltTranslationSpace(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:DefaultRelativeZoomTranslationSpace/string()"); query->evaluateTo(&value); configurations->setDefaultRelativeZoomTranslationSpace(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:DefaultContinuousPanTiltVelocitySpace/string()"); query->evaluateTo(&value); configurations->setDefaultContinuousPanTiltVelocitySpace(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:DefaultContinuousZoomVelocitySpace/string()"); query->evaluateTo(&value); configurations->setDefaultContinuousZoomVelocitySpace(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:DefaultPTZSpeed/tt:PanTilt"); query->evaluateTo(&xml); doc.setContent(xml); itemNodeList = doc.elementsByTagName("tt:PanTilt"); for(int i=0; i<itemNodeList.size();i++) { node = itemNodeList.at(i); value = node.toElement().attribute("space"); configurations->setPanTiltSpace(value.trimmed()); value = node.toElement().attribute("y"); configurations->setPanTiltY(value.trimmed().toFloat()); value = node.toElement().attribute("x"); configurations->setPanTiltX(value.trimmed().toFloat()); } query->setQuery(result->nameSpace()+"./tt:DefaultPTZSpeed/tt:Zoom"); query->evaluateTo(&xml); doc.setContent(xml); itemNodeList = doc.elementsByTagName("tt:Zoom"); for(int i=0; i<itemNodeList.size(); i++) { node = itemNodeList.at(i); value = node.toElement().attribute("space"); configurations->setZoomSpace(value.trimmed()); value = node.toElement().attribute("x"); configurations->setZoomX(value.trimmed().toFloat()); } query->setQuery(result->nameSpace()+"./tt:DefaultPTZTimeout/string()"); query->evaluateTo(&value); configurations->setDefaultPTZTimeout(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:PanTiltLimits/tt:Range/tt:URI/string()"); query->evaluateTo(&value); configurations->setPanTiltRangeUri(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:PanTiltLimits/tt:Range/tt:XRange/tt:Min/string()"); query->evaluateTo(&value); configurations->setPanTiltXRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:PanTiltLimits/tt:Range/tt:XRange/tt:Max/string()"); query->evaluateTo(&value); configurations->setPanTiltXRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:PanTiltLimits/tt:Range/tt:YRange/tt:Min/string()"); query->evaluateTo(&value); configurations->setPanTiltYRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:PanTiltLimits/tt:Range/tt:YRange/tt:Max/string()"); query->evaluateTo(&value); configurations->setPanTiltYRangeMax(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:ZoomLimits/tt:Range/tt:URI/string()"); query->evaluateTo(&value); configurations->setZoomRangeUri(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:ZoomLimits/tt:Range/tt:XRange/tt:Min/string()"); query->evaluateTo(&value); configurations->setZoomXRangeMin(value.trimmed().toFloat()); query->setQuery(result->nameSpace()+"./tt:ZoomLimits/tt:Range/tt:XRange/tt:Max/string()"); query->evaluateTo(&value); configurations->setZoomXRangeMax(value.trimmed().toFloat()); item = items.next(); } } delete msg; delete result; return configurations; }
TestResult::List TestCase::execute(const ExecutionStage stage) { ErrorHandler errHandler; ErrorHandler::installQtMessageHandler(&errHandler); pDebug() << "TestCase::execute()"; delete m_result; QXmlQuery query(language(), Global::namePoolAsPublic()); query.d->setExpressionFactory(s_exprFact); query.setInitialTemplateName(initialTemplateName()); QXmlQuery openDoc(query.namePool()); if(contextItemSource().isValid()) { openDoc.setQuery(QString::fromLatin1("doc('") + contextItemSource().toString() + QLatin1String("')")); Q_ASSERT(openDoc.isValid()); QXmlResultItems result; openDoc.evaluateTo(&result); const QXmlItem item(result.next()); Q_ASSERT(!item.isNull()); query.setFocus(item); } TestResult::List retval; const Scenario scen(scenario()); TestResult::Status resultStatus = TestResult::Unknown; bool ok = false; const QString queryString(sourceCode(ok)); if(!ok) { /* Loading the query file failed, or similar. */ resultStatus = TestResult::Fail; m_result = new TestResult(name(), resultStatus, s_exprFact->astTree(), errHandler.messages(), QPatternist::Item::List(), QString()); retval.append(m_result); ErrorHandler::installQtMessageHandler(0); changed(this); return retval; } query.setMessageHandler(&errHandler); QXmlNamePool namePool(query.namePool()); /* Bind variables. */ QPatternist::ExternalVariableLoader::Ptr loader(externalVariableLoader()); if(loader) { Q_ASSERT(loader); const ExternalSourceLoader::VariableMap vMap(static_cast<const ExternalSourceLoader *>(loader.data())->variableMap()); const QStringList variables(vMap.keys()); for(int i = 0; i < variables.count(); ++i) { const QXmlName name(namePool, variables.at(i)); const QXmlItem val(QPatternist::Item::toPublic(loader->evaluateSingleton(name, QPatternist::DynamicContext::Ptr()))); query.bindVariable(name, val); } } /* We pass in the testCasePath(), such that the base URI is correct fort * XSL-T stylesheets. */ query.setQuery(queryString, testCasePath()); if(!query.isValid()) { pDebug() << "Got compilation exception."; resultStatus = TestBaseLine::scanErrors(errHandler.messages(), baseLines()); Q_ASSERT(resultStatus != TestResult::Unknown); m_result = new TestResult(name(), resultStatus, s_exprFact->astTree(), errHandler.messages(), QPatternist::Item::List(), QString()); retval.append(m_result); ErrorHandler::installQtMessageHandler(0); changed(this); return retval; } if(stage == CompileOnly) { m_result = new TestResult(name(), TestResult::Fail, s_exprFact->astTree(), errHandler.messages(), QPatternist::Item::List(), QString()); retval.append(m_result); return retval; } Q_ASSERT(stage == CompileAndRun); if(scen == ParseError) /* We're supposed to have received an error at this point. */ { m_result = new TestResult(name(), TestResult::Fail, s_exprFact->astTree(), errHandler.messages(), QPatternist::Item::List(), QString()); ErrorHandler::installQtMessageHandler(0); retval.append(m_result); changed(this); return retval; } QPatternist::Item::List itemList; QByteArray output; QBuffer buffer(&output); buffer.open(QIODevice::WriteOnly); QXmlSerializer serializer(query, &buffer); pDebug() << "-------------------------- evaluateToPushCallback() ---------------------------- "; const bool success = query.evaluateTo(&serializer); pDebug() << "------------------------------------------------------------------------------------ "; buffer.close(); const QString serialized(QString::fromUtf8(output.constData(), output.size())); if(!success) { resultStatus = TestBaseLine::scanErrors(errHandler.messages(), baseLines()); Q_ASSERT(resultStatus != TestResult::Unknown); m_result = new TestResult(name(), resultStatus, s_exprFact->astTree(), errHandler.messages(), QPatternist::Item::List(), serialized); retval.append(m_result); ErrorHandler::installQtMessageHandler(0); changed(this); return retval; } /* It's a regular test. */ Q_ASSERT(scen == Standard || scen == RuntimeError); resultStatus = TestBaseLine::scan(serialized, baseLines()); Q_ASSERT(resultStatus != TestResult::Unknown); /* Check that errHandler()->messages() at most only contains * warnings, since it shouldn't have errors at this point. */ const ErrorHandler::Message::List errors (errHandler.messages()); const ErrorHandler::Message::List::const_iterator end(errors.constEnd()); ErrorHandler::Message::List::const_iterator it(errors.constBegin()); for(; it != end; ++it) { const QtMsgType type = (*it).type(); if(type == QtFatalMsg) { m_result = new TestResult(name(), TestResult::Fail, s_exprFact->astTree(), errHandler.messages(), itemList, serialized); retval.append(m_result); ErrorHandler::installQtMessageHandler(0); changed(this); return retval; } } m_result = new TestResult(name(), resultStatus, s_exprFact->astTree(), errHandler.messages(), itemList, serialized); retval.append(m_result); ErrorHandler::installQtMessageHandler(0); changed(this); return retval; }