OF1.0 fixes
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / OF10ErrorMessageFactory.java
index f7fc25df0edfa55594594b850e33aff08ed4c659..e9e37284e9c66c16cadc05e5230280b06411aace 100644 (file)
@@ -20,7 +20,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  */\r
 public class OF10ErrorMessageFactory implements OFDeserializer<ErrorMessage> {\r
 \r
-private static OF10ErrorMessageFactory instance;\r
+       private static final String UNKNOWN_TYPE = "UNKNOWN_TYPE";\r
+    private static final String UNKNOWN_CODE = "UNKNOWN_CODE";\r
+    \r
+    private static OF10ErrorMessageFactory instance;\r
     \r
     private OF10ErrorMessageFactory() {\r
         // do nothing, just singleton\r
@@ -41,78 +44,108 @@ private static OF10ErrorMessageFactory instance;
         ErrorMessageBuilder builder = new ErrorMessageBuilder();\r
         builder.setVersion(version);\r
         builder.setXid(rawMessage.readUnsignedInt());\r
-        ErrorTypeV10 type = ErrorTypeV10.forValue(rawMessage.readUnsignedShort());\r
-        decodeType(builder, type);\r
-        decodeCode(rawMessage, builder, type);\r
+        int type = rawMessage.readUnsignedShort();\r
+        ErrorTypeV10 errorType = ErrorTypeV10.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, ErrorTypeV10 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
             ErrorTypeV10 type) {\r
-        switch (type) {\r
-        case HELLOFAILED:\r
-        {\r
-            HelloFailedCodeV10 code = HelloFailedCodeV10.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.name());\r
-            }\r
-            break;\r
-        }\r
-        case BADREQUEST:\r
-        {\r
-            BadRequestCodeV10 code = BadRequestCodeV10.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.name());\r
-            }\r
-            break;\r
-        }\r
-        case BADACTION:\r
-        {\r
-            BadActionCodeV10 code = BadActionCodeV10.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.name());\r
-            }\r
-            break;\r
-        }\r
-        case FLOWMODFAILED:\r
-        {\r
-            FlowModFailedCodeV10 code = FlowModFailedCodeV10.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.name());\r
-            }\r
-            break;\r
-        }\r
-        case PORTMODFAILED:\r
-        {\r
-            PortModFailedCodeV10 code = PortModFailedCodeV10.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.name());\r
-            }\r
-            break;\r
-        }\r
-        case QUEUEOPFAILED:\r
-        {\r
-            QueueOpFailedCodeV10 code = QueueOpFailedCodeV10.forValue(rawMessage.readUnsignedShort());\r
-            if (code != null) {\r
-                builder.setCode(code.name());\r
-            }\r
-            break;\r
-        }\r
-        default:\r
-            builder.setCode("UNKNOWN_CODE");\r
-            break;\r
-        }\r
+        int code = rawMessage.readUnsignedShort();\r
+       if (type != null) {\r
+               switch (type) {\r
+               case HELLOFAILED:\r
+               {\r
+                       HelloFailedCodeV10 errorCode = HelloFailedCodeV10.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 BADREQUEST:\r
+               {\r
+                       BadRequestCodeV10 errorCode = BadRequestCodeV10.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 BADACTION:\r
+               {\r
+                       BadActionCodeV10 errorCode = BadActionCodeV10.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 FLOWMODFAILED:\r
+               {\r
+                       FlowModFailedCodeV10 errorCode = FlowModFailedCodeV10.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 PORTMODFAILED:\r
+               {\r
+                       PortModFailedCodeV10 errorCode = PortModFailedCodeV10.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 QUEUEOPFAILED:\r
+               {\r
+                       QueueOpFailedCodeV10 errorCode = QueueOpFailedCodeV10.forValue(code);\r
+                       if (errorCode != null) {\r
+                               setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+                       } else {\r
+                               setUnknownCode(builder, code);\r
+                       }\r
+                       break;\r
+               }\r
+               default:\r
+                       setUnknownCode(builder, code);\r
+                       break;\r
+               }\r
+       } else {\r
+               setUnknownCode(builder, code);\r
+       }\r
     }\r
-\r
-    private static void decodeType(ErrorMessageBuilder builder, ErrorTypeV10 type) {\r
-        if (type != null) {\r
-            builder.setType(type.name());\r
-        } else {\r
-            builder.setType("UNKNOWN_TYPE");\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