ErrorMessage - int values for type and code provided
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / ErrorMessageFactory.java
index 3b7970a4c53e81c391bece840b90b5f7e02a6944..45c30ef9c1577a08c02758a8daedb4f56a9864a1 100644 (file)
@@ -4,16 +4,37 @@ package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 import io.netty.buffer.ByteBuf;\r
 \r
 import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterError;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterErrorBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadActionCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadInstructionCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadMatchCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadRequestCode;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ErrorType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFailedCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModFailedCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloFailedCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModFailedCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortModFailedCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueOpFailedCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.RoleRequestFailedCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.SwitchConfigFailedCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableFeaturesFailedCode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableModFailedCode;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessageBuilder;\r
 \r
 /**\r
+ * Translates Error messages\r
  * @author michal.polkorab\r
- *\r
+ * @author timotej.kubas\r
  */\r
 public class ErrorMessageFactory implements OFDeserializer<ErrorMessage> {\r
 \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
     private ErrorMessageFactory() {\r
@@ -35,12 +56,166 @@ public class ErrorMessageFactory implements OFDeserializer<ErrorMessage> {
         ErrorMessageBuilder builder = new ErrorMessageBuilder();\r
         builder.setVersion(version);\r
         builder.setXid(rawMessage.readUnsignedInt());\r
-        builder.setType(ErrorType.forValue(rawMessage.readUnsignedShort()));\r
-        builder.setCode(rawMessage.readUnsignedShort());\r
+        ErrorType type = ErrorType.forValue(rawMessage.readUnsignedShort());\r
+        decodeType(builder, type);\r
+        decodeCode(rawMessage, builder, type);\r
         if (rawMessage.readableBytes() > 0) {\r
             builder.setData(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
         }\r
         return builder.build();\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
+            }\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
+            }\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
+            }\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
+            }\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
+            }\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
+            }\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
+            }\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
+            }\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
+            }\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
+            }\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
+            }\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
+            }\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
+            }\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
+            }\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
+        }\r
+    }\r
+\r
 }\r