"Added more deserialization factories & their unit tests"
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / QueueGetConfigReplyMessageFactory.java
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactory.java
new file mode 100644 (file)
index 0000000..aa73fdb
--- /dev/null
@@ -0,0 +1,82 @@
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+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.common.types.rev130731.PortNumber;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutputBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.packet.queue.Properties;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.packet.queue.PropertiesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.Queues;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.QueuesBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueueConfigOutput> {\r
+\r
+    private static QueueGetConfigReplyMessageFactory instance;\r
+    private static final byte PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER = 4;\r
+    private static final byte PADDING_IN_PACKET_QUEUE_HEADER = 6;\r
+    private static final byte PADDING_IN_QUEUE_PROPERTY_HEADER = 4;\r
+    \r
+    private QueueGetConfigReplyMessageFactory() {\r
+        // singleton\r
+    }\r
+    \r
+    /**\r
+     * \r
+     * @return singleton factory\r
+     */\r
+    public static QueueGetConfigReplyMessageFactory getInstance(){\r
+        \r
+        if(instance == null){\r
+            instance = new QueueGetConfigReplyMessageFactory();\r
+        }\r
+        return instance;\r
+    }\r
+    \r
+    @Override\r
+    public GetQueueConfigOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
+        GetQueueConfigOutputBuilder builder = new GetQueueConfigOutputBuilder();\r
+        builder.setVersion(version);\r
+        builder.setXid((rawMessage.readUnsignedInt()));\r
+        builder.setPort(new PortNumber(rawMessage.readUnsignedInt()));\r
+        rawMessage.skipBytes(PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER);\r
+        builder.setQueues(createQueuesList(rawMessage));\r
+        return builder.build();\r
+    }\r
+    \r
+    private static List<Queues> createQueuesList(ByteBuf input){\r
+        List<Queues> queuesList = new ArrayList<Queues>();\r
+        QueuesBuilder queueBuilder = new QueuesBuilder();\r
+        while (input.readableBytes() > 0) {\r
+            queueBuilder.setQueueId(new QueueId(input.readUnsignedInt()));\r
+            queueBuilder.setPort(new PortNumber(input.readUnsignedInt()));\r
+            input.skipBytes(2);\r
+            input.skipBytes(PADDING_IN_PACKET_QUEUE_HEADER);\r
+            queueBuilder.setProperties(createPropertiesList(input));\r
+            queuesList.add(queueBuilder.build());\r
+        } \r
+        return queuesList;\r
+    }\r
+    \r
+    private static List<Properties> createPropertiesList(ByteBuf propertiesInput){\r
+        List<Properties> propertiesList = new ArrayList<Properties>();\r
+        PropertiesBuilder propertiesBuilder = new PropertiesBuilder();\r
+        propertiesBuilder.setProperty(QueueProperty.forValue(propertiesInput.readUnsignedShort()));\r
+        propertiesInput.skipBytes(2);\r
+        propertiesInput.skipBytes(PADDING_IN_QUEUE_PROPERTY_HEADER);\r
+        propertiesList.add(propertiesBuilder.build());\r
+        return propertiesList;\r
+    }\r
+\r
+}\r