ofp_packet_queue structure - implemented missing fields
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / QueueGetConfigReplyMessageFactory.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
3 \r
4 import io.netty.buffer.ByteBuf;\r
5 \r
6 import java.util.ArrayList;\r
7 import java.util.List;\r
8 \r
9 import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueId;\r
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueProperties;\r
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutput;\r
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutputBuilder;\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.Queues;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.QueuesBuilder;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueuePropertyBuilder;\r
19 \r
20 /**\r
21  * @author timotej.kubas\r
22  * @author michal.polkorab\r
23  */\r
24 public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueueConfigOutput> {\r
25 \r
26     private static QueueGetConfigReplyMessageFactory instance;\r
27     private static final byte PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER = 4;\r
28     private static final byte PADDING_IN_PACKET_QUEUE_HEADER = 6;\r
29     private static final byte PADDING_IN_QUEUE_PROPERTY_HEADER = 4;\r
30     \r
31     private QueueGetConfigReplyMessageFactory() {\r
32         // singleton\r
33     }\r
34     \r
35     /**\r
36      * \r
37      * @return singleton factory\r
38      */\r
39     public static synchronized QueueGetConfigReplyMessageFactory getInstance(){\r
40         \r
41         if(instance == null){\r
42             instance = new QueueGetConfigReplyMessageFactory();\r
43         }\r
44         return instance;\r
45     }\r
46     \r
47     @Override\r
48     public GetQueueConfigOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
49         GetQueueConfigOutputBuilder builder = new GetQueueConfigOutputBuilder();\r
50         builder.setVersion(version);\r
51         builder.setXid((rawMessage.readUnsignedInt()));\r
52         builder.setPort(new PortNumber(rawMessage.readUnsignedInt()));\r
53         rawMessage.skipBytes(PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER);\r
54         builder.setQueues(createQueuesList(rawMessage));\r
55         return builder.build();\r
56     }\r
57     \r
58     private static List<Queues> createQueuesList(ByteBuf input){\r
59         List<Queues> queuesList = new ArrayList<>();\r
60         QueuesBuilder queueBuilder = new QueuesBuilder();\r
61         while (input.readableBytes() > 0) {\r
62             queueBuilder.setQueueId(new QueueId(input.readUnsignedInt()));\r
63             queueBuilder.setPort(new PortNumber(input.readUnsignedInt()));\r
64             input.skipBytes(2);\r
65             input.skipBytes(PADDING_IN_PACKET_QUEUE_HEADER);\r
66             queueBuilder.setQueueProperty(createPropertiesList(input));\r
67             queuesList.add(queueBuilder.build());\r
68         } \r
69         return queuesList;\r
70     }\r
71     \r
72     private static List<QueueProperty> createPropertiesList(ByteBuf propertiesInput){\r
73         List<QueueProperty> propertiesList = new ArrayList<>();\r
74         QueuePropertyBuilder propertiesBuilder = new QueuePropertyBuilder();\r
75         propertiesBuilder.setProperty(QueueProperties.forValue(propertiesInput.readUnsignedShort()));\r
76         propertiesInput.skipBytes(2);\r
77         propertiesInput.skipBytes(PADDING_IN_QUEUE_PROPERTY_HEADER);\r
78         propertiesList.add(propertiesBuilder.build());\r
79         return propertiesList;\r
80     }\r
81 \r
82 }\r