This is an automated email from the ASF dual-hosted git repository. bossenti pushed a commit to branch dev in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-extensions.git
commit cdd0398ac63e7e8a5b9ea8da664a5c0f0fa2b26b Author: bossenti <[email protected]> AuthorDate: Tue Apr 20 16:08:44 2021 +0200 [STREAMPIPES-345] refactoring --- .../streampipes/connect/adapters/opcua/OpcUa.java | 37 +++++++++++----------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java index 0f09f5d..fadad08 100644 --- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java +++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java @@ -19,6 +19,7 @@ package org.apache.streampipes.connect.adapters.opcua; +import static org.apache.streampipes.connect.adapters.opcua.utils.OpcUaUtil.updateDataTypes; import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint; import static org.eclipse.milo.opcua.stack.core.util.ConversionUtil.toList; @@ -68,7 +69,7 @@ public class OpcUa { static Logger LOG = LoggerFactory.getLogger(OpcUa.class); - private NodeId node; + private NodeId originNodeId; private String opcServerURL; private OpcUaClient client; private boolean unauthenticated; @@ -107,9 +108,9 @@ public class OpcUa { if (isInteger(nodeId)) { int integerNodeId = Integer.parseInt(nodeId); - this.node = new NodeId(namespaceIndex, integerNodeId); + this.originNodeId = new NodeId(namespaceIndex, integerNodeId); } else { - this.node = new NodeId(namespaceIndex, nodeId); + this.originNodeId = new NodeId(namespaceIndex, nodeId); } } @@ -308,19 +309,24 @@ public class OpcUa { } /*** - * Search for related nodes relative to {@link OpcUa#node} + * Search for related nodes relative to {@link OpcUa#originNodeId} * @param selectNodes indicates whether only nodes of {@link OpcUa#selectedNodeNames} should be returned - * @return List of {@link OpcNode}s related to {@link OpcUa#node} + * @return List of {@link OpcNode}s related to {@link OpcUa#originNodeId} * @throws AdapterException */ public List<OpcNode> browseNode(boolean selectNodes) throws AdapterException { - List<OpcNode> referenceDescriptions = browseNode(node, selectNodes); - - if (referenceDescriptions.size() == 0) { - referenceDescriptions = getRootNote(node); + List<OpcNode> discoveredNodes = browseNode(originNodeId, selectNodes); + + if (discoveredNodes.size() == 0) { + discoveredNodes = getRootNote(originNodeId); + } else if (selectNodes) { // only required for getSchema where the selectedNodes are already set. + /* In case a node with sub-nodes is queried, the data types are not detected appropriately. + This has to be performed separately. + */ + updateDataTypes(client, discoveredNodes); } - return referenceDescriptions; + return discoveredNodes; } private List<OpcNode> getRootNote(NodeId browseRoot) { @@ -361,9 +367,9 @@ public class OpcUa { } /*** - * Search for related nodes relative to {@link OpcUa#node} + * Search for related nodes relative to {@link OpcUa#originNodeId} * @param selectNodes indicates whether only nodes of {@link OpcUa#selectedNodeNames} should be returned - * @return List of {@link OpcNode}s related to {@link OpcUa#node} + * @return List of {@link OpcNode}s related to {@link OpcUa#originNodeId} * @throws AdapterException */ private List<OpcNode> browseNode(NodeId browseRoot, boolean selectNodes) throws AdapterException { @@ -448,13 +454,6 @@ public class OpcUa { rd.getNodeId(); result.add(opcNode); - rd.getNodeId().toNodeId(client.getNamespaceTable()).ifPresent(nodeId -> { - try { - browseNode(nodeId, selectNodes); - } catch (AdapterException e) { - e.printStackTrace(); - } - }); } } }
