diff options
Diffstat (limited to 'src/xmlpatterns/api/qsimplexmlnodemodel.cpp')
-rw-r--r-- | src/xmlpatterns/api/qsimplexmlnodemodel.cpp | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/src/xmlpatterns/api/qsimplexmlnodemodel.cpp b/src/xmlpatterns/api/qsimplexmlnodemodel.cpp new file mode 100644 index 0000000..119a4b1 --- /dev/null +++ b/src/xmlpatterns/api/qsimplexmlnodemodel.cpp @@ -0,0 +1,184 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QUrl> +#include <QVector> +#include <QXmlNamePool> + +#include "qabstractxmlnodemodel_p.h" +#include "qemptyiterator_p.h" +#include "qitemmappingiterator_p.h" +#include "qsequencemappingiterator_p.h" +#include "qsimplexmlnodemodel.h" +#include "qsingletoniterator_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +class QSimpleXmlNodeModelPrivate : public QAbstractXmlNodeModelPrivate +{ +public: + QSimpleXmlNodeModelPrivate(const QXmlNamePool &np) : namePool(np) + { + } + + mutable QXmlNamePool namePool; +}; + +/*! + \class QSimpleXmlNodeModel + \brief The QSimpleXmlNodeModel class is an implementation of QAbstractXmlNodeModel sufficient for many common cases. + \reentrant + \since 4.4 + \ingroup xml-tools + + Subclassing QAbstractXmlNodeModel can be a significant task, because it + requires implementing several, complex member functions. QSimpleXmlNodeModel + provides default implementations of these member functions that are suitable + for a wide range of node models. + + Subclasses of QSimpleXmlNodeModel must be thread-safe. + */ + +/*! + Constructs a QSimpleXmlNodeModel for use with with the specified + \a namePool. + */ +QSimpleXmlNodeModel::QSimpleXmlNodeModel(const QXmlNamePool &namePool) + : QAbstractXmlNodeModel(new QSimpleXmlNodeModelPrivate(namePool)) +{ +} + +/*! + Destructor. + */ +QSimpleXmlNodeModel::~QSimpleXmlNodeModel() +{ +} + +/*! + If \a node is an element or attribute, typedValue() is called, and + the return value converted to a string, as per XQuery's rules. + + If \a node is another type of node, the empty string is returned. + + If this function is overridden for comments or processing + instructions, it is important to remember to call it (for elements + and attributes having values not of type \c xs:string) to ensure that + the values are formatted according to XQuery. + + */ +QString QSimpleXmlNodeModel::stringValue(const QXmlNodeModelIndex &node) const +{ + const QXmlNodeModelIndex::NodeKind k= kind(node); + if(k == QXmlNodeModelIndex::Element || k == QXmlNodeModelIndex::Attribute) + { + const QVariant &candidate = typedValue(node); + if(candidate.isNull()) + return QString(); + else + return AtomicValue::toXDM(candidate).stringValue(); + } + else + return QString(); +} + +/*! + Returns the base URI for \a node. This is always the document + URI. + + \sa documentUri() + */ +QUrl QSimpleXmlNodeModel::baseUri(const QXmlNodeModelIndex &node) const +{ + return documentUri(node); +} + +/*! + Returns the name pool associated with this model. The + implementation of name() will use this name pool to create + names. + */ +QXmlNamePool &QSimpleXmlNodeModel::namePool() const +{ + Q_D(const QSimpleXmlNodeModel); + + return d->namePool; +} + +/*! + Always returns an empty QVector. This signals that no namespace + bindings are in scope for \a node. + */ +QVector<QXmlName> QSimpleXmlNodeModel::namespaceBindings(const QXmlNodeModelIndex &node) const +{ + Q_UNUSED(node); + return QVector<QXmlName>(); +} + +/*! + Always returns a default constructed QXmlNodeModelIndex instance, + regardless of \a id. + + This effectively means the model has no elements that have an id. + */ +QXmlNodeModelIndex QSimpleXmlNodeModel::elementById(const QXmlName &id) const +{ + Q_UNUSED(id); + return QXmlNodeModelIndex(); +} + +/*! + Always returns an empty vector, regardless of \a idref. + + This effectively means the model has no elements or attributes of + type \c IDREF. + */ +QVector<QXmlNodeModelIndex> QSimpleXmlNodeModel::nodesByIdref(const QXmlName &idref) const +{ + Q_UNUSED(idref); + return QVector<QXmlNodeModelIndex>(); +} + +QT_END_NAMESPACE + + |