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:17:44 UTC
[incubator-plc4x] 14/35: - Fixing sonar issues
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 9d65a8799ba890b2bee998cf878924422bd8ac93
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Mon Oct 29 14:32:32 2018 +0100
- Fixing sonar issues
---
.../plc4x/java/s7/netty/Plc4XS7Protocol.java | 249 ++++++++++++---------
.../plc4x/java/s7/netty/util/S7TypeDecoder.java | 5 +-
.../plc4x/java/s7/netty/util/S7TypeEncoder.java | 2 +-
.../plc4x/java/s7/utils/S7TsapIdEncoder.java | 12 +-
4 files changed, 155 insertions(+), 113 deletions(-)
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java
index 616ed41..07f62b5 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java
@@ -449,146 +449,79 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
// -----------------------------------------
// Bit
// -----------------------------------------
- case BOOL: {
- Boolean[] booleans = readAllValues(Boolean.class, field, i -> data.readByte() != 0x00);
- fieldItem = new DefaultBooleanFieldItem(booleans);
+ case BOOL:
+ fieldItem = decodeReadResponseBitField(field, data);
break;
- }
// -----------------------------------------
// Bit-strings
// -----------------------------------------
- case BYTE: { // 1 byte
- byte[] bytes = ArrayUtils.toPrimitive(readAllValues(Byte.class, field, i -> data.readByte()));
- BitSet bitSet = BitSet.valueOf(bytes);
- Boolean[] booleanValues = new Boolean[8 * bytes.length];
- for(int i = 0; i < 8 * bytes.length; i++) {
- booleanValues[i] = bitSet.get(i);
- }
- fieldItem = new DefaultBooleanFieldItem(booleanValues);
+ case BYTE: // 1 byte
+ fieldItem = decodeReadResponseByteBitStringField(field, data);
break;
- }
- case WORD: { // 2 byte (16 bit)
- BitSet bitSet = BitSet.valueOf(new byte[]{data.readByte(), data.readByte()});
- Boolean[] booleanValues = new Boolean[8];
- for(int i = 0; i < 16; i++) {
- booleanValues[i] = bitSet.get(i);
- }
- fieldItem = new DefaultBooleanFieldItem(booleanValues);
+ case WORD: // 2 byte (16 bit)
+ fieldItem = decodeReadResponseShortBitStringField(data);
break;
- }
- case DWORD: { // 4 byte (32 bit)
- BitSet bitSet = BitSet.valueOf(new byte[]{
- data.readByte(), data.readByte(), data.readByte(), data.readByte()});
- Boolean[] booleanValues = new Boolean[8];
- for(int i = 0; i < 32; i++) {
- booleanValues[i] = bitSet.get(i);
- }
- fieldItem = new DefaultBooleanFieldItem(booleanValues);
+ case DWORD: // 4 byte (32 bit)
+ fieldItem = decodeReadResponseIntegerBitStringField(data);
break;
- }
- case LWORD: { // 8 byte (64 bit)
- BitSet bitSet = BitSet.valueOf(new long[]{data.readLong()});
- Boolean[] booleanValues = new Boolean[8];
- for(int i = 0; i < 64; i++) {
- booleanValues[i] = bitSet.get(i);
- }
- fieldItem = new DefaultBooleanFieldItem(booleanValues);
+ case LWORD: // 8 byte (64 bit)
+ fieldItem = decodeReadResponseLongBitStringField(data);
break;
- }
// -----------------------------------------
// Integers
// -----------------------------------------
// 8 bit:
- case SINT: {
- Byte[] bytes = readAllValues(Byte.class, field, i -> data.readByte());
- fieldItem = new DefaultByteFieldItem(bytes);
+ case SINT:
+ fieldItem = decodeReadResponseSignedByteField(field, data);
break;
- }
- case USINT: {
- Short[] shorts = readAllValues(Short.class, field, i -> data.readUnsignedByte());
- fieldItem = new DefaultShortFieldItem(shorts);
+ case USINT:
+ fieldItem = decodeReadResponseUnsignedByteField(field, data);
break;
- }
// 16 bit:
- case INT: {
- Short[] shorts = readAllValues(Short.class, field, i -> data.readShort());
- fieldItem = new DefaultShortFieldItem(shorts);
+ case INT:
+ fieldItem = decodeReadResponseSignedShortField(field, data);
break;
- }
- case UINT: {
- Integer[] ints = readAllValues(Integer.class, field, i -> data.readUnsignedShort());
- fieldItem = new DefaultIntegerFieldItem(ints);
+ case UINT:
+ fieldItem = decodeReadResponseUnsignedShortField(field, data);
break;
- }
// 32 bit:
- case DINT: {
- Integer[] ints = readAllValues(Integer.class, field, i -> data.readInt());
- fieldItem = new DefaultIntegerFieldItem(ints);
+ case DINT:
+ fieldItem = decodeReadResponseSignedIntegerField(field, data);
break;
- }
- case UDINT: {
- Long[] longs = readAllValues(Long.class, field, i -> data.readUnsignedInt());
- fieldItem = new DefaultLongFieldItem(longs);
+ case UDINT:
+ fieldItem = decodeReadResponseUnsignedIntegerField(field, data);
break;
- }
// 64 bit:
- case LINT: {
- BigInteger[] bigIntegers = readAllValues(BigInteger.class, field, i -> readSigned64BitInteger(data));
- fieldItem = new DefaultBigIntegerFieldItem(bigIntegers);
+ case LINT:
+ fieldItem = decodeReadResponseSignedLongField(field, data);
break;
- }
- case ULINT: {
- BigInteger[] bigIntegers = readAllValues(BigInteger.class, field, i -> readUnsigned64BitInteger(data));
- fieldItem = new DefaultBigIntegerFieldItem(bigIntegers);
+ case ULINT:
+ fieldItem = decodeReadResponseUnsignedLongField(field, data);
break;
- }
// -----------------------------------------
// Floating point values
// -----------------------------------------
- case REAL: {
- Float[] floats = readAllValues(Float.class, field, i -> data.readFloat());
- fieldItem = new DefaultFloatFieldItem(floats);
+ case REAL:
+ fieldItem = decodeReadResponseFloatField(field, data);
break;
- }
- case LREAL: {
- Double[] doubles = readAllValues(Double.class, field, i -> data.readDouble());
- fieldItem = new DefaultDoubleFieldItem(doubles);
+ case LREAL:
+ fieldItem = decodeReadResponseDoubleField(field, data);
break;
- }
// -----------------------------------------
// Characters & Strings
// -----------------------------------------
- case CHAR: { // 1 byte (8 bit)
- // TODO: Double check, if this is ok?
- String stringValue = data.readCharSequence(1, StandardCharsets.UTF_8).toString();
- fieldItem = new DefaultStringFieldItem(stringValue);
+ case CHAR: // 1 byte (8 bit)
+ fieldItem = decodeReadResponseFixedLengthStringField(1, false, data);
break;
- }
- case WCHAR: { // 2 byte
- // TODO: Double check, if this is ok? Alternatives: BMP, UCS2
- String stringValue = data.readCharSequence(2, StandardCharsets.UTF_16).toString();
- fieldItem = new DefaultStringFieldItem(stringValue);
+ case WCHAR: // 2 byte
+ fieldItem = decodeReadResponseFixedLengthStringField(1, true, data);
break;
- }
- case STRING: {
- // Max length ... ignored.
- data.readByte();
- byte actualLength = data.readByte();
- // TODO: Double check, if this is ok?
- String stringValue = data.readCharSequence(actualLength, StandardCharsets.UTF_8).toString();
- fieldItem = new DefaultStringFieldItem(stringValue);
+ case STRING:
+ fieldItem = decodeReadResponseVarLengthStringField(false, data);
break;
- }
- case WSTRING: {
- // Max length ... ignored.
- data.readByte();
- byte actualLength = data.readByte();
- // TODO: Double check, if this is ok?
- String stringValue = data.readCharSequence(
- actualLength * 2, StandardCharsets.UTF_16).toString();
- fieldItem = new DefaultStringFieldItem(stringValue);
+ case WSTRING:
+ fieldItem = decodeReadResponseVarLengthStringField(true, data);
break;
- }
default:
throw new PlcProtocolException("Unsupported type " + field.getDataType());
}
@@ -601,6 +534,112 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
return new DefaultPlcReadResponse(plcReadRequest, values);
}
+ BaseDefaultFieldItem decodeReadResponseBitField(S7Field field, ByteBuf data) {
+ Boolean[] booleans = readAllValues(Boolean.class, field, i -> data.readByte() != 0x00);
+ return new DefaultBooleanFieldItem(booleans);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseByteBitStringField(S7Field field, ByteBuf data) {
+ byte[] bytes = ArrayUtils.toPrimitive(readAllValues(Byte.class, field, i -> data.readByte()));
+ BitSet bitSet = BitSet.valueOf(bytes);
+ Boolean[] booleanValues = new Boolean[8 * bytes.length];
+ for(int i = 0; i < 8 * bytes.length; i++) {
+ booleanValues[i] = bitSet.get(i);
+ }
+ return new DefaultBooleanFieldItem(booleanValues);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseShortBitStringField(ByteBuf data) {
+ BitSet bitSet = BitSet.valueOf(new byte[]{data.readByte(), data.readByte()});
+ Boolean[] booleanValues = new Boolean[8];
+ for(int i = 0; i < 16; i++) {
+ booleanValues[i] = bitSet.get(i);
+ }
+ return new DefaultBooleanFieldItem(booleanValues);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseIntegerBitStringField(ByteBuf data) {
+ BitSet bitSet = BitSet.valueOf(new byte[]{
+ data.readByte(), data.readByte(), data.readByte(), data.readByte()});
+ Boolean[] booleanValues = new Boolean[8];
+ for(int i = 0; i < 32; i++) {
+ booleanValues[i] = bitSet.get(i);
+ }
+ return new DefaultBooleanFieldItem(booleanValues);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseLongBitStringField(ByteBuf data) {
+ BitSet bitSet = BitSet.valueOf(new long[]{data.readLong()});
+ Boolean[] booleanValues = new Boolean[8];
+ for(int i = 0; i < 64; i++) {
+ booleanValues[i] = bitSet.get(i);
+ }
+ return new DefaultBooleanFieldItem(booleanValues);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseSignedByteField(S7Field field, ByteBuf data) {
+ Byte[] bytes = readAllValues(Byte.class, field, i -> data.readByte());
+ return new DefaultByteFieldItem(bytes);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseUnsignedByteField(S7Field field, ByteBuf data) {
+ Short[] shorts = readAllValues(Short.class, field, i -> data.readUnsignedByte());
+ return new DefaultShortFieldItem(shorts);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseSignedShortField(S7Field field, ByteBuf data) {
+ Short[] shorts = readAllValues(Short.class, field, i -> data.readShort());
+ return new DefaultShortFieldItem(shorts);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseUnsignedShortField(S7Field field, ByteBuf data) {
+ Integer[] ints = readAllValues(Integer.class, field, i -> data.readUnsignedShort());
+ return new DefaultIntegerFieldItem(ints);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseSignedIntegerField(S7Field field, ByteBuf data) {
+ Integer[] ints = readAllValues(Integer.class, field, i -> data.readInt());
+ return new DefaultIntegerFieldItem(ints);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseUnsignedIntegerField(S7Field field, ByteBuf data) {
+ Long[] longs = readAllValues(Long.class, field, i -> data.readUnsignedInt());
+ return new DefaultLongFieldItem(longs);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseSignedLongField(S7Field field, ByteBuf data) {
+ BigInteger[] bigIntegers = readAllValues(BigInteger.class, field, i -> readSigned64BitInteger(data));
+ return new DefaultBigIntegerFieldItem(bigIntegers);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseUnsignedLongField(S7Field field, ByteBuf data) {
+ BigInteger[] bigIntegers = readAllValues(BigInteger.class, field, i -> readUnsigned64BitInteger(data));
+ return new DefaultBigIntegerFieldItem(bigIntegers);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseFloatField(S7Field field, ByteBuf data) {
+ Float[] floats = readAllValues(Float.class, field, i -> data.readFloat());
+ return new DefaultFloatFieldItem(floats);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseDoubleField(S7Field field, ByteBuf data) {
+ Double[] doubles = readAllValues(Double.class, field, i -> data.readDouble());
+ return new DefaultDoubleFieldItem(doubles);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseFixedLengthStringField(int numChars, boolean isUtf16, ByteBuf data) {
+ int numBytes = isUtf16 ? numChars * 2 : numChars;
+ String stringValue = data.readCharSequence(numBytes, StandardCharsets.UTF_8).toString();
+ return new DefaultStringFieldItem(stringValue);
+ }
+
+ BaseDefaultFieldItem decodeReadResponseVarLengthStringField(boolean isUtf16, ByteBuf data) {
+ // Max length ... ignored.
+ data.skipBytes(1);
+ byte actualLength = data.readByte();
+ return decodeReadResponseFixedLengthStringField(actualLength, isUtf16, data);
+ }
+
private static <T> T[] readAllValues(Class<T> clazz, S7Field field, Function<Integer, T> extract) {
try {
return IntStream.rangeClosed(1, field.getNumElements())
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeDecoder.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeDecoder.java
index 896f506..cb60ee7 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeDecoder.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeDecoder.java
@@ -18,7 +18,6 @@
*/
package org.apache.plc4x.java.s7.netty.util;
-import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
import org.apache.plc4x.java.api.exceptions.PlcUnsupportedDataTypeException;
import java.nio.charset.StandardCharsets;
@@ -32,7 +31,7 @@ public class S7TypeDecoder {
}
@SuppressWarnings("unchecked")
- public static <T> List<T> decodeData(Class<T> datatype, byte[] s7Data) throws PlcProtocolException {
+ public static <T> List<T> decodeData(Class<T> datatype, byte[] s7Data) {
List<Object> result = new LinkedList<>();
int i = 0;
@@ -73,7 +72,7 @@ public class S7TypeDecoder {
| (((long) (s7Data[i + 3] & 0xff)) << 24)
| (((long) (s7Data[i + 4] & 0xff)) << 16)
| (((long) (s7Data[i + 5] & 0xff)) << 8)
- | (((long) s7Data[i + 6] & 0xff));
+ | ((long) s7Data[i + 6] & 0xff);
result.add(Double.longBitsToDouble(longValue));
i += 8;
} else if (datatype == String.class) {
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeEncoder.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeEncoder.java
index 263e6bd..bcadbde 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeEncoder.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeEncoder.java
@@ -97,7 +97,7 @@ public class S7TypeEncoder {
for (int i = 0; i < length; i++) {
double doubleValue = (double) values[i];
long longValue = Double.doubleToLongBits(doubleValue);
- result[(i * 8)] = (byte) ((longValue & 0xFF000000_00000000L) >> 56);
+ result[i * 8] = (byte) ((longValue & 0xFF000000_00000000L) >> 56);
result[(i * 8) + 1] = (byte) ((longValue & 0x00FF0000_00000000L) >> 48);
result[(i * 8) + 2] = (byte) ((longValue & 0x0000FF00_00000000L) >> 40);
result[(i * 8) + 3] = (byte) ((longValue & 0x000000FF_00000000L) >> 32);
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoder.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoder.java
index 2d7782d..73200a4 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoder.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoder.java
@@ -22,9 +22,13 @@ import org.apache.plc4x.java.isotp.netty.model.types.DeviceGroup;
public class S7TsapIdEncoder {
+ private S7TsapIdEncoder() {
+ // Prevent this from being instantiated.
+ }
+
public static short encodeS7TsapId(DeviceGroup deviceGroup, int rack, int slot) {
- short firstByte = ((short) (deviceGroup.getCode() << 8));
- short secondByte = ((short) ((rack << 4) | (slot & 0x0F)));
+ short firstByte = (short) (deviceGroup.getCode() << 8);
+ short secondByte = (short) ((rack << 4) | (slot & 0x0F));
return (short) (firstByte | secondByte);
}
@@ -34,11 +38,11 @@ public class S7TsapIdEncoder {
}
public static int decodeRack(short tsapId) {
- return ((tsapId >> 4) & 0xF);
+ return (tsapId >> 4) & 0xF;
}
public static int decodeSlot(short tsapId) {
- return (tsapId & 0xF);
+ return tsapId & 0xF;
}
}