tenthe commented on code in PR #4178:
URL: https://github.com/apache/streampipes/pull/4178#discussion_r2815447920


##########
streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/model/OpcUaNodeFactory.java:
##########
@@ -22,18 +22,90 @@
 import 
org.apache.streampipes.extensions.connectors.opcua.model.node.ExtensionObjectOpcUaNode;
 import org.apache.streampipes.extensions.connectors.opcua.model.node.OpcUaNode;
 import 
org.apache.streampipes.extensions.connectors.opcua.model.node.PrimitiveOpcUaNode;
-import org.apache.streampipes.extensions.connectors.opcua.utils.OpcUaTypes;
 
+import org.eclipse.milo.opcua.stack.core.BuiltinDataType;
+import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
+import org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject;
+import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
+import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode;
+
+import java.lang.reflect.Array;
 import java.util.List;
+import java.util.Objects;
 
 public class OpcUaNodeFactory {
 
-  public static OpcUaNode createOpcUaNode(BasicVariableNodeInfo nodeInfo,
-                                          List<String> runtimeNamesToDelete) {
-    if (OpcUaTypes.isExtensionOrCustom(nodeInfo.getNode())) {
-      return new ExtensionObjectOpcUaNode(nodeInfo, runtimeNamesToDelete);
-    } else {
-      return new PrimitiveOpcUaNode(nodeInfo, runtimeNamesToDelete);
+  public static OpcUaNode createOpcUaNode(
+      BasicVariableNodeInfo nodeInfo,
+      DataValue dataValue
+  ) {
+    Boolean byValue = isExtensionByValue(dataValue);
+    if (byValue != null) {
+      return byValue
+          ? new ExtensionObjectOpcUaNode(nodeInfo)
+          : new PrimitiveOpcUaNode(nodeInfo);
     }
+
+    return isExtensionByDataType(nodeInfo)
+        ? new ExtensionObjectOpcUaNode(nodeInfo)
+        : new PrimitiveOpcUaNode(nodeInfo);
+  }
+
+  /**
+   * @return TRUE  -> value is (or contains) ExtensionObject
+   *         FALSE -> value is present and not ExtensionObject
+   *         NULL  -> cannot decide from value (null DataValue, bad 
StatusCode, no Variant, etc.)
+   */
+  public static Boolean isExtensionByValue(DataValue dv) {

Review Comment:
   Can we change dv to dataValue?



##########
streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/OpcUaNodeBrowser.java:
##########
@@ -109,8 +108,9 @@ private OpcUaNode toOpcNode(String nodeName,
     );
 
     if (node instanceof VariableNode) {
+      var dv = ((VariableNode) node).getValue();
       var nodeInfo = new BasicVariableNodeInfo((VariableNode) node, 
spOpcConfig.getNamingStrategy());
-      return OpcUaNodeFactory.createOpcUaNode(nodeInfo, runtimeNamesToDelete);
+      return OpcUaNodeFactory.createOpcUaNode(nodeInfo, dv);

Review Comment:
   ```suggestion
         return OpcUaNodeFactory.createOpcUaNode(nodeInfo, dataValue);
   ```



##########
streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/OpcUaNodeBrowser.java:
##########
@@ -109,8 +108,9 @@ private OpcUaNode toOpcNode(String nodeName,
     );
 
     if (node instanceof VariableNode) {
+      var dv = ((VariableNode) node).getValue();

Review Comment:
   ```suggestion
         var dataValue = ((VariableNode) node).getValue();
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to