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;
     }
 
 }