You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2018/11/01 20:18:02 UTC
[incubator-plc4x] 32/35: [plc4j-s7] switch to switch on field
handler
This is an automated email from the ASF dual-hosted git repository.
jfeinauer pushed a commit to branch add-simple-mock-driver
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
commit ac1ec42e792f2ebfb5e972f5b644f2b717029593
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Nov 1 14:24:08 2018 +0100
[plc4j-s7] switch to switch on field handler
---
.../java/s7/netty/util/S7PlcFieldHandler.java | 128 +++++++++++++--------
1 file changed, 81 insertions(+), 47 deletions(-)
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7PlcFieldHandler.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7PlcFieldHandler.java
index cb5548e..d2a9a05 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7PlcFieldHandler.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7PlcFieldHandler.java
@@ -24,7 +24,6 @@ import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.base.connection.DefaultPlcFieldHandler;
import org.apache.plc4x.java.base.messages.items.*;
import org.apache.plc4x.java.s7.model.S7Field;
-import org.apache.plc4x.java.s7.netty.model.types.TransportSize;
import java.lang.reflect.InvocationTargetException;
import java.math.BigInteger;
@@ -47,117 +46,152 @@ public class S7PlcFieldHandler extends DefaultPlcFieldHandler {
public BaseDefaultFieldItem encodeBoolean(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
// All of these types are declared as Bit or Bit-String types.
- if ((s7Field.getDataType() == TransportSize.BOOL) || (s7Field.getDataType() == TransportSize.BYTE) ||
- (s7Field.getDataType() == TransportSize.WORD) || (s7Field.getDataType() == TransportSize.DWORD) ||
- (s7Field.getDataType() == TransportSize.LWORD)) {
- return internalEncodeBoolean(field, values);
+ switch (s7Field.getDataType()) {
+ case BOOL:
+ case BYTE:
+ case WORD:
+ case DWORD:
+ case LWORD:
+ return internalEncodeBoolean(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeByte(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if ((s7Field.getDataType() == TransportSize.BYTE) || (s7Field.getDataType() == TransportSize.SINT) ||
- (s7Field.getDataType() == TransportSize.USINT) || (s7Field.getDataType() == TransportSize.CHAR)) {
- return internalEncodeInteger(field, values);
+ // All of these types are declared as Bit or Bit-String types.
+ switch (s7Field.getDataType()) {
+ case BYTE:
+ case SINT:
+ case USINT:
+ case CHAR:
+ return internalEncodeInteger(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeShort(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if ((s7Field.getDataType() == TransportSize.WORD) || (s7Field.getDataType() == TransportSize.INT) ||
- (s7Field.getDataType() == TransportSize.UINT)) {
- return internalEncodeInteger(field, values);
+ switch (s7Field.getDataType()) {
+ case WORD:
+ case INT:
+ case UINT:
+ return internalEncodeInteger(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeInteger(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if ((s7Field.getDataType() == TransportSize.DWORD) || (s7Field.getDataType() == TransportSize.DINT) ||
- (s7Field.getDataType() == TransportSize.UDINT)) {
- return internalEncodeInteger(field, values);
+ switch (s7Field.getDataType()) {
+ case DWORD:
+ case DINT:
+ case UDINT:
+ return internalEncodeInteger(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeBigInteger(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if ((s7Field.getDataType() == TransportSize.DWORD) || (s7Field.getDataType() == TransportSize.DINT) ||
- (s7Field.getDataType() == TransportSize.UDINT)) {
- return internalEncodeInteger(field, values);
+ switch (s7Field.getDataType()) {
+ case DWORD:
+ case DINT:
+ case UDINT:
+ return internalEncodeInteger(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeLong(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if ((s7Field.getDataType() == TransportSize.LWORD) || (s7Field.getDataType() == TransportSize.LINT) ||
- (s7Field.getDataType() == TransportSize.ULINT)) {
- return internalEncodeInteger(field, values);
+ switch (s7Field.getDataType()) {
+ case LWORD:
+ case LINT:
+ case ULINT:
+ return internalEncodeInteger(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeFloat(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if (s7Field.getDataType() == TransportSize.REAL) {
- return internalEncodeFloatingPoint(field, values);
+ switch (s7Field.getDataType()) {
+ case REAL:
+ return internalEncodeFloatingPoint(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeDouble(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if (s7Field.getDataType() == TransportSize.LREAL) {
- return internalEncodeFloatingPoint(field, values);
+ switch (s7Field.getDataType()) {
+ case LREAL:
+ return internalEncodeFloatingPoint(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeString(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if ((s7Field.getDataType() == TransportSize.CHAR) || (s7Field.getDataType() == TransportSize.WCHAR) ||
- (s7Field.getDataType() == TransportSize.STRING) || (s7Field.getDataType() == TransportSize.WSTRING)) {
- return internalEncodeString(field, values);
+ switch (s7Field.getDataType()) {
+ case CHAR:
+ case WCHAR:
+ case STRING:
+ case WSTRING:
+ return internalEncodeString(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeTime(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if (s7Field.getDataType() == TransportSize.TIME) {
- return internalEncodeTemporal(field, values);
+ switch (s7Field.getDataType()) {
+ case TIME:
+ return internalEncodeTemporal(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeDate(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if (s7Field.getDataType() == TransportSize.DATE) {
- return internalEncodeTemporal(field, values);
+ switch (s7Field.getDataType()) {
+ case DATE:
+ return internalEncodeTemporal(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
@Override
public BaseDefaultFieldItem encodeDateTime(PlcField field, Object[] values) {
S7Field s7Field = (S7Field) field;
- if (s7Field.getDataType() == TransportSize.DATE_AND_TIME) {
- return internalEncodeTemporal(field, values);
+ switch (s7Field.getDataType()) {
+ case DATE_AND_TIME:
+ return internalEncodeTemporal(field, values);
+ default:
+ throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
- throw new PlcRuntimeException("Invalid encoder for type " + s7Field.getDataType().name());
}
private BaseDefaultFieldItem internalEncodeBoolean(PlcField field, Object[] values) {
@@ -333,7 +367,7 @@ public class S7PlcFieldHandler extends DefaultPlcFieldHandler {
"Value of " + value.toString() + " exceeds allowed maximum for type "
+ s7Field.getDataType().name() + " (max " + maxValue.toString() + ")");
}
- if(valueType == Byte[].class) {
+ if (valueType == Byte[].class) {
castedValues[i] = value.byteValue();
} else if (valueType == Short[].class) {
castedValues[i] = value.shortValue();
@@ -407,7 +441,7 @@ public class S7PlcFieldHandler extends DefaultPlcFieldHandler {
"Value of " + value + " exceeds allowed maximum for type "
+ s7Field.getDataType().name() + " (max " + maxValue.toString() + ")");
}
- if(valueType == Float[].class) {
+ if (valueType == Float[].class) {
castedValues[i] = value.floatValue();
} else {
castedValues[i] = value;