OF1.0 fixes
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / ErrorMessageFactory.java
index 45c30ef9c1577a08c02758a8daedb4f56a9864a1..3463855bafd1ef70f7a88f83b23054210d72df45 100644 (file)
@@ -33,7 +33,6 @@ public class ErrorMessageFactory implements OFDeserializer<ErrorMessage> {
 \r
     private static final String UNKNOWN_CODE = "UNKNOWN_CODE";\r
     private static final String UNKNOWN_TYPE = "UNKNOWN_TYPE";\r
-    private static final int NO_CORRECT_ENUM_FOUND_VALUE = -1;\r
     \r
     private static ErrorMessageFactory instance;\r
     \r
@@ -56,166 +55,194 @@ public class ErrorMessageFactory implements OFDeserializer<ErrorMessage> {
         ErrorMessageBuilder builder = new ErrorMessageBuilder();\r
         builder.setVersion(version);\r
         builder.setXid(rawMessage.readUnsignedInt());\r
-        ErrorType type = ErrorType.forValue(rawMessage.readUnsignedShort());\r
-        decodeType(builder, type);\r
-        decodeCode(rawMessage, builder, type);\r
+        int type = rawMessage.readUnsignedShort();\r
+        ErrorType errorType = ErrorType.forValue(type);\r
+        decodeType(builder, errorType, type);\r
+        decodeCode(rawMessage, builder, errorType);\r
         if (rawMessage.readableBytes() > 0) {\r
             builder.setData(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
         }\r
         return builder.build();\r
     }\r
+    \r
+    private static void decodeType(ErrorMessageBuilder builder, ErrorType type, int readValue) {\r
+        if (type != null) {\r
+            builder.setType(type.getIntValue());\r
+            builder.setTypeString(type.name());\r
+        } else {\r
+            builder.setType(readValue);\r
+            builder.setTypeString(UNKNOWN_TYPE);\r
+        }\r
+    }\r
 \r
     private static void decodeCode(ByteBuf rawMessage, ErrorMessageBuilder builder,\r
             ErrorType type) {\r
-        \r
-        switch (type) {\r
-        case HELLOFAILED:\r
-        {\r
-            HelloFailedCode code = HelloFailedCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+        int code = rawMessage.readUnsignedShort();\r
+        if (type != null) {\r
+            switch (type) {\r
+            case HELLOFAILED:\r
+            {\r
+                HelloFailedCode errorCode = HelloFailedCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case BADREQUEST:\r
-        {\r
-            BadRequestCode code = BadRequestCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case BADREQUEST:\r
+            {\r
+                BadRequestCode errorCode = BadRequestCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case BADACTION:\r
-        {\r
-            BadActionCode code = BadActionCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case BADACTION:\r
+            {\r
+                BadActionCode errorCode = BadActionCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case BADINSTRUCTION:\r
-        {\r
-            BadInstructionCode code = BadInstructionCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case BADINSTRUCTION:\r
+            {\r
+                BadInstructionCode errorCode = BadInstructionCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case BADMATCH:\r
-        {\r
-            BadMatchCode code = BadMatchCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case BADMATCH:\r
+            {\r
+                BadMatchCode errorCode = BadMatchCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case FLOWMODFAILED:\r
-        {\r
-            FlowModFailedCode code = FlowModFailedCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case FLOWMODFAILED:\r
+            {\r
+                FlowModFailedCode errorCode = FlowModFailedCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case GROUPMODFAILED:\r
-        {\r
-            GroupModFailedCode code = GroupModFailedCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case GROUPMODFAILED:\r
+            {\r
+                GroupModFailedCode errorCode = GroupModFailedCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case PORTMODFAILED:\r
-        {\r
-            PortModFailedCode code = PortModFailedCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case PORTMODFAILED:\r
+            {\r
+                PortModFailedCode errorCode = PortModFailedCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case TABLEMODFAILED:\r
-        {\r
-            TableModFailedCode code = TableModFailedCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case TABLEMODFAILED:\r
+            {\r
+                TableModFailedCode errorCode = TableModFailedCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case QUEUEOPFAILED:\r
-        {\r
-            QueueOpFailedCode code = QueueOpFailedCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case QUEUEOPFAILED:\r
+            {\r
+                QueueOpFailedCode errorCode = QueueOpFailedCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case SWITCHCONFIGFAILED:\r
-        {\r
-            SwitchConfigFailedCode code = SwitchConfigFailedCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case SWITCHCONFIGFAILED:\r
+            {\r
+                SwitchConfigFailedCode errorCode = SwitchConfigFailedCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case ROLEREQUESTFAILED:\r
-        {\r
-            RoleRequestFailedCode code = RoleRequestFailedCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case ROLEREQUESTFAILED:\r
+            {\r
+                RoleRequestFailedCode errorCode = RoleRequestFailedCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case METERMODFAILED:\r
-        {\r
-            MeterModFailedCode code = MeterModFailedCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case METERMODFAILED:\r
+            {\r
+                MeterModFailedCode errorCode = MeterModFailedCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case TABLEFEATURESFAILED:\r
-        {\r
-            TableFeaturesFailedCode code = TableFeaturesFailedCode.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.getIntValue());\r
-                builder.setCodeString(code.name());\r
+            case TABLEFEATURESFAILED:\r
+            {\r
+                TableFeaturesFailedCode errorCode = TableFeaturesFailedCode.forValue(code);\r
+                if (errorCode != null) {\r
+                    setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                } else {\r
+                    setUnknownCode(builder, code);\r
+                }\r
+                break;\r
+            }\r
+            case EXPERIMENTER:\r
+                ExperimenterErrorBuilder expBuilder = new ExperimenterErrorBuilder();\r
+                expBuilder.setExpType(code);\r
+                expBuilder.setExperimenter(rawMessage.readUnsignedInt());\r
+                builder.addAugmentation(ExperimenterError.class, expBuilder.build());\r
+                break;\r
+            default:\r
+                setUnknownCode(builder, code);\r
+                break;\r
             }\r
-            break;\r
-        }\r
-        case EXPERIMENTER:\r
-            ExperimenterErrorBuilder expBuilder = new ExperimenterErrorBuilder();\r
-            expBuilder.setExpType(rawMessage.readUnsignedShort());\r
-            expBuilder.setExperimenter(rawMessage.readUnsignedInt());\r
-            builder.addAugmentation(ExperimenterError.class, expBuilder.build());\r
-            break;\r
-        default:\r
-            builder.setCode(NO_CORRECT_ENUM_FOUND_VALUE);\r
-            builder.setCodeString(UNKNOWN_CODE);\r
-            break;\r
-        }\r
-    }\r
-\r
-    private static void decodeType(ErrorMessageBuilder builder, ErrorType type) {\r
-        if (type != null) {\r
-            builder.setType(type.getIntValue());\r
-            builder.setTypeString(type.name());\r
         } else {\r
-            builder.setType(NO_CORRECT_ENUM_FOUND_VALUE);\r
-            builder.setTypeString(UNKNOWN_TYPE);\r
+            setUnknownCode(builder, code);\r
         }\r
     }\r
+    \r
+    private static void setUnknownCode(ErrorMessageBuilder builder, int readValue) {\r
+        builder.setCode(readValue);\r
+        builder.setCodeString(UNKNOWN_CODE);\r
+    }\r
+    \r
+    private static void setCode(ErrorMessageBuilder builder, int code, String codeString) {\r
+        builder.setCode(code);\r
+        builder.setCodeString(codeString);\r
+    }\r
 \r
 }\r