1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include <private/opcuaelementoperand_p.h>
5
6QT_BEGIN_NAMESPACE
7
8/*!
9 \qmltype ElementOperand
10 \inqmlmodule QtOpcUa
11 \brief The OPC UA ElementOperand type.
12 \since QtOpcUa 5.13
13
14 The ElementOperand is defined in OPC-UA part 4, 7.4.4.2.
15 It is used to identify another element in the filter by its index
16 (the first element has the index 0).
17
18 This is required to create complex filters, for example to reference
19 the two operands of the AND operation in ((Severity > 500) AND (Message == "TestString")).
20 The first step is to create content filter elements for the two conditions (Severity > 500)
21 and (Message == "TestString"). A third content filter element is required to create an AND
22 combination of the two conditions. It consists of the AND operator and two element operands
23 with the indices of the two conditions created before:
24
25 \code
26 import QtOpcUa as QtOpcUa
27
28 QtOpcUa.EventFilter {
29 select : [ ... ]
30 where: [
31 QtOpcUa.FilterElement {
32 operator: QtOpcUa.FilterElement.GreaterThan
33 firstOperand: QtOpcUa.SimpleAttributeOperand {
34 browsePath: [
35 QtOpcUa.NodeId {
36 identifier: "Severity"
37 ns: "http://opcfoundation.org/UA/"
38 }
39 ]
40 }
41 secondOperand: QtOpcUa.LiteralOperand {
42 value: 500
43 type: QtOpcUa.Constants.UInt16
44 }
45 }
46 QtOpcUa.FilterElement {
47 operator: QtOpcUa.FilterElement.Equals
48 firstOperand: QtOpcUa.SimpleAttributeOperand {
49 browsePath: [
50 QtOpcUa.NodeId {
51 identifier: "Message"
52 ns: "http://opcfoundation.org/UA/"
53 }
54 ]
55 }
56 secondOperand: QtOpcUa.LiteralOperand {
57 value: "TestString"
58 type: QtOpcUa.Constants.String
59 }
60 }
61 QtOpcUa.FilterElement {
62 operator: QtOpcUa.FilterElement.And
63 firstOperand: QtOpcUa.ElementOperand {
64 index: 0
65 }
66 secondOperand: QtOpcUa.ElementOperand {
67 index: 1
68 }
69 }
70 ]
71 }
72 \endcode
73*/
74
75/*!
76 \qmlproperty int ElementOperand::index
77
78 Index of the filter element that is going to be used as operand.
79*/
80
81OpcUaElementOperand::OpcUaElementOperand(QObject *parent)
82 : OpcUaOperandBase(parent)
83{
84}
85
86OpcUaElementOperand::~OpcUaElementOperand() = default;
87
88QVariant OpcUaElementOperand::toCppVariant(QOpcUaClient* client) const
89{
90 Q_UNUSED(client);
91 QOpcUaElementOperand value(*this);
92 return value;
93}
94
95quint32 OpcUaElementOperand::index() const
96{
97 return QOpcUaElementOperand::index();
98}
99
100void OpcUaElementOperand::setIndex(quint32 index)
101{
102 if (index != QOpcUaElementOperand::index()) {
103 QOpcUaElementOperand::setIndex(index);
104 emit dataChanged();
105 }
106}
107
108QT_END_NAMESPACE
109

source code of qtopcua/src/declarative_opcua/opcuaelementoperand.cpp