Revision control
Copy as Markdown
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
// Qt-Security score:significant reason:default
#include <private/opcuasimpleattributeoperand_p.h>
#include <private/opcuanodeid_p.h>
#include <private/universalnode_p.h>
#include <QOpcUaQualifiedName>
QT_BEGIN_NAMESPACE
/*!
\qmltype SimpleAttributeOperand
\inqmlmodule QtOpcUa
\brief The OPC UA SimpleAttributeOperand type.
\since QtOpcUa 5.13
\deprecated [6.9]
The SimpleAttributeOperand is specified in OPC UA 1.05 part 4, 7.7.4.5.
It is used when a node attribute is required as operand.
For example, the following simple attribute operand represents the value
of the "Severity" field of the base event type:
\code
import QtOpcUa as QtOpcUa
QtOpcUa.SimpleAttributeOperand {
identifier: "Severity"
}
\endcode
*/
/*!
\qmlproperty list<OpcUaNodeId> SimpleAttributeOperand::browsePath
Browse path to the node holding the attribute.
\code
import QtOpcUa as QtOpcUa
QtOpcUa.SimpleAttributeOperand {
...
browsePath: [
QtOpcUa.NodeId {
identifier: "Message"
}
...
]
}
\endcode
*/
/*!
\qmlproperty string SimpleAttributeOperand::indexRange
Index range string used to identify a single value or subset of the attribute's value.
\code
import QtOpcUa as QtOpcUa
QtOpcUa.SimpleAttributeOperand {
...
indexRange: "0:2"
}
\endcode
*/
/*!
\qmlproperty Constants.NodeAttribute SimpleAttributeOperand::nodeAttribute
Attribute of the node \l browsePath is pointing to.
The default value is \c Constants.NodeAttribute.Value.
\code
import QtOpcUa as QtOpcUa
QtOpcUa.SimpleAttributeOperand {
...
nodeAttribute: QtOpcUa.Constants.NodeAttribute.Value
}
\endcode
*/
/*!
\qmlproperty string SimpleAttributeOperand::typeId
Node id of the type definition node. The operand will be of the type or one of its subtypes.
The default value is \c "ns=0;i=2041".
\code
import QtOpcUa as QtOpcUa
QtOpcUa.SimpleAttributeOperand {
...
typeId: "ns=0;i=2041"
}
\endcode
*/
OpcUaSimpleAttributeOperand::OpcUaSimpleAttributeOperand(QObject *parent)
: OpcUaOperandBase(parent)
{
QOpcUaSimpleAttributeOperand::setTypeId(QStringLiteral("ns=0;i=2041"));
QOpcUaSimpleAttributeOperand::setAttributeId(QOpcUa::NodeAttribute::Value);
}
OpcUaSimpleAttributeOperand::~OpcUaSimpleAttributeOperand() = default;
QOpcUaSimpleAttributeOperand OpcUaSimpleAttributeOperand::toSimpleAttributeOperand(QOpcUaClient *client) const
{
QOpcUaSimpleAttributeOperand value(*this);
for (UniversalNode i : m_browsePath) {
i.resolveNamespaceNameToIndex(client);
value.browsePathRef().append(i.toQualifiedName());
}
return value;
}
QVariant OpcUaSimpleAttributeOperand::toCppVariant(QOpcUaClient *client) const
{
return toSimpleAttributeOperand(client);
}
QString OpcUaSimpleAttributeOperand::indexRange() const
{
return QOpcUaSimpleAttributeOperand::indexRange();
}
void OpcUaSimpleAttributeOperand::setIndexRange(const QString &indexRange)
{
if (indexRange != QOpcUaSimpleAttributeOperand::indexRange()) {
QOpcUaSimpleAttributeOperand::setIndexRange(indexRange);
emit dataChanged();
}
}
QOpcUa::NodeAttribute OpcUaSimpleAttributeOperand::nodeAttribute() const
{
return QOpcUaSimpleAttributeOperand::attributeId();
}
void OpcUaSimpleAttributeOperand::setNodeAttribute(QOpcUa::NodeAttribute nodeAttribute)
{
if (nodeAttribute != QOpcUaSimpleAttributeOperand::attributeId()) {
QOpcUaSimpleAttributeOperand::setAttributeId(nodeAttribute);
emit dataChanged();
}
}
QString OpcUaSimpleAttributeOperand::typeId() const
{
return QOpcUaSimpleAttributeOperand::typeId();
}
void OpcUaSimpleAttributeOperand::setTypeId(const QString &typeId)
{
if (typeId != QOpcUaSimpleAttributeOperand::typeId()) {
QOpcUaSimpleAttributeOperand::setTypeId(typeId);
emit dataChanged();
}
}
QQmlListProperty<OpcUaNodeId> OpcUaSimpleAttributeOperand::browsePath()
{
return QQmlListProperty<OpcUaNodeId>(this, this,
&OpcUaSimpleAttributeOperand::appendBrowsePathElement,
&OpcUaSimpleAttributeOperand::browsePathSize,
&OpcUaSimpleAttributeOperand::browsePathElement,
&OpcUaSimpleAttributeOperand::clearBrowsePath);
}
void OpcUaSimpleAttributeOperand::appendBrowsePathElement(OpcUaNodeId *nodeId)
{
m_browsePath.append(nodeId);
emit dataChanged();
}
int OpcUaSimpleAttributeOperand::browsePathSize() const
{
return m_browsePath.size();
}
OpcUaNodeId *OpcUaSimpleAttributeOperand::browsePathElement(int index) const
{
return m_browsePath.at(index);
}
void OpcUaSimpleAttributeOperand::clearBrowsePath()
{
m_browsePath.clear();
emit dataChanged();
}
void OpcUaSimpleAttributeOperand::appendBrowsePathElement(QQmlListProperty<OpcUaNodeId> *list, OpcUaNodeId *nodeId)
{
reinterpret_cast<OpcUaSimpleAttributeOperand*>(list->data)->appendBrowsePathElement(nodeId);
}
qsizetype OpcUaSimpleAttributeOperand::browsePathSize(QQmlListProperty<OpcUaNodeId> *list)
{
return reinterpret_cast<OpcUaSimpleAttributeOperand*>(list->data)->browsePathSize();
}
OpcUaNodeId *OpcUaSimpleAttributeOperand::browsePathElement(QQmlListProperty<OpcUaNodeId> *list, qsizetype index)
{
return reinterpret_cast<OpcUaSimpleAttributeOperand*>(list->data)->browsePathElement(index);
}
void OpcUaSimpleAttributeOperand::clearBrowsePath(QQmlListProperty<OpcUaNodeId> *list)
{
reinterpret_cast<OpcUaSimpleAttributeOperand*>(list->data)->clearBrowsePath();
}
QT_END_NAMESPACE