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();
-                            }
-                        });
                     }
                 }
             }

Reply via email to