Skip to content

Commit 9ea909f

Browse files
committed
~ implement equals and hashCode in DynamicStruct
1 parent 9b28905 commit 9ea909f

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

opc-ua-sdk/sdk-core/src/main/java/org/eclipse/milo/opcua/sdk/core/types/DynamicStruct.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import java.util.Arrays;
1414
import java.util.LinkedHashMap;
15+
import java.util.Objects;
1516
import java.util.function.Supplier;
1617
import java.util.stream.Collectors;
1718
import org.eclipse.milo.opcua.sdk.core.typetree.DataType;
@@ -60,6 +61,18 @@ public ExpandedNodeId getJsonEncodingId() {
6061
return jsonEncodingId != null ? jsonEncodingId.expanded() : ExpandedNodeId.NULL_VALUE;
6162
}
6263

64+
@Override
65+
public boolean equals(Object o) {
66+
if (o == null || getClass() != o.getClass()) return false;
67+
DynamicStruct that = (DynamicStruct) o;
68+
return Objects.equals(dataType, that.dataType) && Objects.equals(members, that.members);
69+
}
70+
71+
@Override
72+
public int hashCode() {
73+
return Objects.hash(dataType, members);
74+
}
75+
6376
@Override
6477
public String toString() {
6578
return "DynamicStruct{" + "members={" + joinMembers(members) + "}}";

opc-ua-sdk/sdk-core/src/test/java/org/eclipse/milo/opcua/sdk/core/types/DynamicStructCodecTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.ushort;
1717
import static org.junit.jupiter.api.Assertions.*;
1818

19+
import java.util.LinkedHashMap;
1920
import java.util.UUID;
2021
import java.util.stream.Stream;
2122
import org.eclipse.milo.opcua.sdk.core.types.util.DynamicEncodingContext;
@@ -101,6 +102,34 @@ void structWithScalarFields() {
101102
var encoded2 = ExtensionObject.encode(new DynamicEncodingContext(), decoded);
102103

103104
assertEquals(encoded1, encoded2);
105+
106+
var members = new LinkedHashMap<String, Object>();
107+
members.put("Boolean", struct.getBoolean());
108+
members.put("SByte", struct.getSByte());
109+
members.put("Byte", struct.getByte());
110+
members.put("Int16", struct.getInt16());
111+
members.put("UInt16", struct.getUInt16());
112+
members.put("Int32", struct.getInt32());
113+
members.put("UInt32", struct.getUInt32());
114+
members.put("Int64", struct.getInt64());
115+
members.put("UInt64", struct.getUInt64());
116+
members.put("Float", struct.getFloat());
117+
members.put("Double", struct.getDouble());
118+
members.put("String", struct.getString());
119+
members.put("DateTime", struct.getDateTime());
120+
members.put("Guid", struct.getGuid());
121+
members.put("ByteString", struct.getByteString());
122+
members.put("XmlElement", struct.getXmlElement());
123+
members.put("NodeId", struct.getNodeId());
124+
members.put("ExpandedNodeId", struct.getExpandedNodeId());
125+
members.put("StatusCode", struct.getStatusCode());
126+
members.put("QualifiedName", struct.getQualifiedName());
127+
members.put("LocalizedText", struct.getLocalizedText());
128+
members.put("DataValue", struct.getDataValue());
129+
members.put("Variant", struct.getVariant());
130+
DynamicStruct expected = new DynamicStruct(decoded.getDataType(), members);
131+
132+
assertEquals(expected, decoded);
104133
}
105134

106135
@Test

0 commit comments

Comments
 (0)