You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jm...@apache.org on 2018/01/05 03:24:08 UTC

[incubator-plc4x] branch master updated: clean up switch statements a little

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

jmclean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git


The following commit(s) were added to refs/heads/master by this push:
     new 63bba4d  clean up switch statements a little
63bba4d is described below

commit 63bba4d353f1caf9098a81f76ba5fc5a9571b02d
Author: Justin Mclean <jm...@apache.org>
AuthorDate: Fri Jan 5 14:23:59 2018 +1100

    clean up switch statements a little
---
 .../org/apache/plc4x/java/s7/netty/S7Protocol.java | 165 ++++++++++-----------
 1 file changed, 77 insertions(+), 88 deletions(-)

diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java
index ac524cf..5534d74 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java
@@ -103,42 +103,39 @@ public class S7Protocol extends MessageToMessageCodec<IsoTPMessage, S7Message> {
             buf.writeByte(s7Parameter.getType().getCode());
             switch (s7Parameter.getType()) {
                 case READ_VAR:
-                case WRITE_VAR: {
+                case WRITE_VAR:
                     VarParameter varParameter = (VarParameter) s7Parameter;
                     List<VarParameterItem> items = varParameter.getItems();
                     // ReadRequestItem count (Read one variable at a time)
                     buf.writeByte((byte) items.size());
                     for (VarParameterItem item : items) {
-                        switch (item.getAddressingMode()) {
-                            case S7ANY: {
-                                S7AnyVarParameterItem s7AnyRequestItem = (S7AnyVarParameterItem) item;
-                                buf.writeByte(s7AnyRequestItem.getSpecificationType().getCode());
-                                // Length of this item (excluding spec type and length)
-                                buf.writeByte((byte) 0x0a);
-                                buf.writeByte(s7AnyRequestItem.getAddressingMode().getCode());
-                                buf.writeByte(s7AnyRequestItem.getTransportSize().getCode());
-                                buf.writeShort(s7AnyRequestItem.getNumElements());
-                                buf.writeShort(s7AnyRequestItem.getDataBlockNumber());
-                                buf.writeByte(s7AnyRequestItem.getMemoryArea().getCode());
-                                // A S7 address is 3 bytes long. Unfortunately the byte-offset is NOT located in
-                                // byte 1 and byte 2 and the bit offset in byte 3. Siemens used the last 3 bits of
-                                // byte 3 for the bit-offset and the remaining 5 bits of byte 3 to contain the lowest
-                                // 5 bits of the byte-offset. The highest 5 bits of byte 1 are probably left unused
-                                // for future extensions.
-                                buf.writeShort((short) (s7AnyRequestItem.getByteOffset() >> 5));
-                                buf.writeByte((byte) ((
+                        VariableAddressingMode addressMode = item.getAddressingMode();
+                        if (addressMode == VariableAddressingMode.S7ANY) {
+                            S7AnyVarParameterItem s7AnyRequestItem = (S7AnyVarParameterItem) item;
+                            buf.writeByte(s7AnyRequestItem.getSpecificationType().getCode());
+                            // Length of this item (excluding spec type and length)
+                            buf.writeByte((byte) 0x0a);
+                            buf.writeByte(s7AnyRequestItem.getAddressingMode().getCode());
+                            buf.writeByte(s7AnyRequestItem.getTransportSize().getCode());
+                            buf.writeShort(s7AnyRequestItem.getNumElements());
+                            buf.writeShort(s7AnyRequestItem.getDataBlockNumber());
+                            buf.writeByte(s7AnyRequestItem.getMemoryArea().getCode());
+                            // A S7 address is 3 bytes long. Unfortunately the byte-offset is NOT located in
+                            // byte 1 and byte 2 and the bit offset in byte 3. Siemens used the last 3 bits of
+                            // byte 3 for the bit-offset and the remaining 5 bits of byte 3 to contain the lowest
+                            // 5 bits of the byte-offset. The highest 5 bits of byte 1 are probably left unused
+                            // for future extensions.
+                            buf.writeShort((short) (s7AnyRequestItem.getByteOffset() >> 5));
+                            buf.writeByte((byte) ((
                                     (s7AnyRequestItem.getByteOffset() & 0x1F) << 3)
                                     | (s7AnyRequestItem.getBitOffset() & 0x07)));
-                                break;
-                            }
-                            default:
-                                logger.error("writing this item type not implemented");
-                                return;
+                        } else {
+                            logger.error("writing this item type not implemented");
+                            return;
                         }
                     }
                     break;
-                }
-                case SETUP_COMMUNICATION: {
+                case SETUP_COMMUNICATION:
                     SetupCommunicationParameter setupCommunication = (SetupCommunicationParameter) s7Parameter;
                     // Reserved (is always constant 0x00)
                     buf.writeByte((byte) 0x00);
@@ -146,7 +143,9 @@ public class S7Protocol extends MessageToMessageCodec<IsoTPMessage, S7Message> {
                     buf.writeShort(setupCommunication.getMaxAmqCallee());
                     buf.writeShort(setupCommunication.getPduLength());
                     break;
-                }
+                default:
+                    logger.error("writing this parameter type not implemented");
+                    return;
             }
         }
 
@@ -154,7 +153,7 @@ public class S7Protocol extends MessageToMessageCodec<IsoTPMessage, S7Message> {
             for (S7Payload payload : in.getPayloads()) {
                 switch (payload.getType()) {
                     case READ_VAR:
-                    case WRITE_VAR: {
+                    case WRITE_VAR:
                         VarPayload varPayload = (VarPayload) payload;
                         for (VarPayloadItem payloadItem : varPayload.getPayloadItems()) {
                             buf.writeByte(payloadItem.getReturnCode().getCode());
@@ -163,7 +162,6 @@ public class S7Protocol extends MessageToMessageCodec<IsoTPMessage, S7Message> {
                             buf.writeBytes(payloadItem.getData());
                         }
                         break;
-                    }
                 }
             }
         }
@@ -209,12 +207,9 @@ public class S7Protocol extends MessageToMessageCodec<IsoTPMessage, S7Message> {
                     setupCommunicationParameter = (SetupCommunicationParameter) parameter;
                 }
                 if (parameter instanceof VarParameter) {
-                    switch (parameter.getType()) {
-                        case READ_VAR:
-                        case WRITE_VAR:{
-                            readWriteVarParameter = (VarParameter) parameter;
-                            break;
-                        }
+                    ParameterType paramType = parameter.getType();
+                    if (paramType == ParameterType.READ_VAR || paramType == ParameterType.WRITE_VAR) {
+                        readWriteVarParameter = (VarParameter) parameter;
                     }
                 }
                 i += getParameterLength(parameter);
@@ -280,16 +275,15 @@ public class S7Protocol extends MessageToMessageCodec<IsoTPMessage, S7Message> {
             return null;
         }
         switch (parameterType) {
-            case CPU_SERVICES: {
+            case CPU_SERVICES:
                 // Just read in the rest of the header as content of this parameter.
                 // Will have to do a lot more investigation on how this parameter is
                 // constructed.
                 byte[] cpuServices = new byte[restLength - 1];
                 in.readBytes(cpuServices);
                 return null;
-            }
             case READ_VAR:
-            case WRITE_VAR: {
+            case WRITE_VAR:
                 List<VarParameterItem> items = new LinkedList<>();
                 byte numItems = in.readByte();
                 if (!isResponse) {
@@ -302,44 +296,37 @@ public class S7Protocol extends MessageToMessageCodec<IsoTPMessage, S7Message> {
                             return null;
                         }
                         VariableAddressingMode variableAddressingMode = VariableAddressingMode.valueOf(in.readByte());
-                        switch (variableAddressingMode) {
-                            case S7ANY: {
-                                TransportSize transportSize = TransportSize.valueOf(in.readByte());
-                                short length = in.readShort();
-                                short dbNumber = in.readShort();
-                                MemoryArea memoryArea = MemoryArea.valueOf(in.readByte());
-                                short byteAddress = (short) (in.readShort() << 5);
-                                byte tmp = in.readByte();
-                                // Only the least 3 bits are the bit address, the
-                                byte bitAddress = (byte) (tmp & 0x07);
-                                // Bits 4-8 belong to the byte address
-                                byteAddress = (short) (byteAddress | (tmp >> 3));
-                                S7AnyVarParameterItem item = new S7AnyVarParameterItem(
+                        if (variableAddressingMode == VariableAddressingMode.S7ANY) {
+                            TransportSize transportSize = TransportSize.valueOf(in.readByte());
+                            short length = in.readShort();
+                            short dbNumber = in.readShort();
+                            MemoryArea memoryArea = MemoryArea.valueOf(in.readByte());
+                            short byteAddress = (short) (in.readShort() << 5);
+                            byte tmp = in.readByte();
+                            // Only the least 3 bits are the bit address, the
+                            byte bitAddress = (byte) (tmp & 0x07);
+                            // Bits 4-8 belong to the byte address
+                            byteAddress = (short) (byteAddress | (tmp >> 3));
+                            S7AnyVarParameterItem item = new S7AnyVarParameterItem(
                                     specificationType, memoryArea, transportSize,
                                     length, dbNumber, byteAddress, bitAddress);
-                                items.add(item);
-                                break;
-                            }
-                            default: {
-                                logger.error("Error parsing item type");
-                                return null;
-                            }
+                            items.add(item);
+                        } else {
+                            logger.error("Error parsing item type");
+                            return null;
                         }
                     }
                 }
                 return new VarParameter(parameterType, items);
-            }
-            case SETUP_COMMUNICATION: {
+            case SETUP_COMMUNICATION:
                 // Reserved (is always constant 0x00)
                 in.readByte();
                 short callingMaxAmq = in.readShort();
                 short calledMaxAmq = in.readShort();
                 short pduLength = in.readShort();
                 return new SetupCommunicationParameter(callingMaxAmq, calledMaxAmq, pduLength);
-            }
-            default: {
-                System.out.println("Unimplemented parameter type: " + parameterType.name());
-            }
+            default:
+                logger.error("Unimplemented parameter type: " + parameterType.name());
         }
         return null;
     }
@@ -370,32 +357,34 @@ public class S7Protocol extends MessageToMessageCodec<IsoTPMessage, S7Message> {
     }
 
     private short getParameterLength(S7Parameter parameter) {
-        if (parameter != null) {
-            switch (parameter.getType()) {
-                case READ_VAR:
-                case WRITE_VAR: {
-                    VarParameter varParameter = (VarParameter) parameter;
-                    short length = 2;
-                    for (VarParameterItem varParameterItem : varParameter.getItems()) {
-                        switch (varParameterItem.getAddressingMode()) {
-                            case S7ANY: {
-                                length += 12;
-                                break;
-                            }
-                            default: {
-                                logger.error("Not implemented");
-                                break;
-                            }
-                        }
-                    }
-                    return length;
-                }
-                case SETUP_COMMUNICATION: {
-                    return 8;
-                }
+        if (parameter == null) {
+            return 0;
+        }
+
+        switch (parameter.getType()) {
+            case READ_VAR:
+            case WRITE_VAR:
+                return getReadWriteVarParameterLength((VarParameter) parameter);
+            case SETUP_COMMUNICATION:
+                return 8;
+            default:
+                logger.error("Not implemented");
+                return 0;
+        }
+    }
+
+    private short getReadWriteVarParameterLength(VarParameter parameter) {
+        short length = 2;
+        for (VarParameterItem varParameterItem : parameter.getItems()) {
+            VariableAddressingMode addressMode = varParameterItem.getAddressingMode();
+
+            if (addressMode == VariableAddressingMode.S7ANY) {
+                length += 12;
+            } else {
+                logger.error("Not implemented");
             }
         }
-        return 0;
+        return length;
     }
 
     private short getPayloadLength(VarPayloadItem payloadItem) {

-- 
To stop receiving notification emails like this one, please contact
['"commits@plc4x.apache.org" <co...@plc4x.apache.org>'].