You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by er...@apache.org on 2020/05/04 08:25:29 UTC

[plc4x] branch feature/osgi updated: Added Type Parsing to TagData -When using OSGi blueprints, the Objects are passed as String (Numbers, Boolean). Added a method to parse to the correct type (if applicable)

This is an automated email from the ASF dual-hosted git repository.

erobinet pushed a commit to branch feature/osgi
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/feature/osgi by this push:
     new 99998ef  Added Type Parsing to TagData -When using OSGi blueprints, the Objects are passed as String (Numbers, Boolean). Added a method to parse to the correct type (if applicable)
     new 1a70894  Merge branch 'feature/osgi' of https://github.com/apache/plc4x into feature/osgi
99998ef is described below

commit 99998ef6d2f4b33f020b57de674553210e2b9909
Author: Etienne Robinet <et...@gmail.com>
AuthorDate: Thu Apr 9 10:11:47 2020 +0200

    Added Type Parsing to TagData
    -When using OSGi blueprints, the Objects are passed as String (Numbers, Boolean). Added a method to parse to the correct type (if applicable)
---
 .../java/eip/readwrite/field/EipFieldHandler.java  |  2 +-
 .../eip/readwrite/protocol/EipProtocolLogic.java   |  3 +-
 .../apache/plc4x/java/s7/readwrite/S7Driver.java   |  1 -
 .../main/java/org/apache/plc4x/camel/TagData.java  | 41 ++++++++++++++++++++++
 4 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipFieldHandler.java b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipFieldHandler.java
index a4ca56d..3afffbf 100644
--- a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipFieldHandler.java
+++ b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipFieldHandler.java
@@ -67,7 +67,7 @@ public class EipFieldHandler implements PlcFieldHandler {
     @Override
     public PlcValue encodeShort(PlcField field, Object[] values) {
         EipField eipField = (EipField)field;
-        if (eipField.getType() == CIPDataTypeCode.INT) {
+        if (eipField.getType() == CIPDataTypeCode.INT ||eipField.getType() == CIPDataTypeCode.DINT ) {
             return internalEncodeInteger(field, values);
         }
         throw new PlcRuntimeException("Invalid encoder for type " + eipField.getType());
diff --git a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java
index c6a3bc4..b0061ca 100644
--- a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java
+++ b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java
@@ -401,7 +401,8 @@ public class EipProtocolLogic extends Plc4xProtocolBase<EipPacket> implements Ha
         if (items.size() == 1) {
             tm.startRequest();
             CipRRData rrdata = new CipRRData(sessionHandle, 0L, senderContext, 0L,
-                new CipExchange(items.get(0)));
+                new CipExchange(
+                new CipUnconnectedRequest(items.get(0),(byte)configuration.getBackplane(),(byte)configuration.getSlot())));
             transaction.submit(() -> context.sendRequest(rrdata)
                 .expectResponse(EipPacket.class, REQUEST_TIMEOUT)
                 .onTimeout(future::completeExceptionally)
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/S7Driver.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/S7Driver.java
index 79328bd..01c4140 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/S7Driver.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/S7Driver.java
@@ -30,7 +30,6 @@ import org.apache.plc4x.java.spi.connection.ProtocolStackConfigurer;
 import org.apache.plc4x.java.spi.connection.GeneratedDriverBase;
 import org.apache.plc4x.java.spi.connection.SingleProtocolStackConfigurer;
 import org.apache.plc4x.java.spi.optimizer.BaseOptimizer;
-import org.osgi.service.component.annotations.Component;
 
 import java.util.function.Consumer;
 import java.util.function.ToIntFunction;
diff --git a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/TagData.java b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/TagData.java
index e77fe46..f57774f 100644
--- a/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/TagData.java
+++ b/plc4j/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/TagData.java
@@ -18,6 +18,10 @@ under the License.
 */
 package org.apache.plc4x.camel;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Predicate;
+
 public class TagData {
     private String tagName;
     private String query;
@@ -27,6 +31,7 @@ public class TagData {
         this.tagName = alias;
         this.query = query;
         this.value = value;
+        setType();
     }
 
     public TagData(String tagName, String query) {
@@ -58,6 +63,42 @@ public class TagData {
         this.value = value;
     }
 
+
+    private void setType(){
+        if(value!=null && value instanceof String){
+            String val = (String)value;
+            if(canParse.get(Boolean.TYPE).test(val)){
+                value = Boolean.parseBoolean(val);
+            }
+            if(canParse.get(Short.TYPE).test(val)){
+                value = Short.parseShort(val);
+            }
+            else if(canParse.get(Integer.TYPE).test(val)){
+                value = Integer.parseInt(val);
+            }
+            else if(canParse.get(Long.TYPE).test(val)){
+                value = Long.parseLong(val);
+            }
+            else if(canParse.get(Double.TYPE).test(val)){
+                value = Double.parseDouble(val);
+            }
+            else if(canParse.get(Float.TYPE).test(val)){
+                value = Float.parseFloat(val);
+            }
+
+        }
+    }
+
+    private Map<Class<?>, Predicate<String>> canParse = new HashMap<>();
+    {
+        canParse.put(Integer.TYPE, s -> {try {Integer.parseInt(s); return true;} catch(Exception e) {return false;}});
+        canParse.put(Long.TYPE, s -> {try {Long.parseLong(s); return true;} catch(Exception e) {return false;}});
+        canParse.put(Short.TYPE, s -> {try {Short.parseShort(s); return true;} catch(Exception e) {return false;}});
+        canParse.put(Boolean.TYPE, s -> {try {Boolean.parseBoolean(s); return true;} catch(Exception e) {return false;}});
+        canParse.put(Double.TYPE, s -> {try {Double.parseDouble(s); return true;} catch(Exception e) {return false;}});
+        canParse.put(Float.TYPE, s -> {try {Float.parseFloat(s); return true;} catch(Exception e) {return false;}});
+    };
+
     @Override
     public  String toString(){
         return "("+tagName+") : "+value;