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;