--- /dev/null
+/* 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