e13f230f39bd5d2aad1216ba9be359db23a7cb7c
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / MultipartReplyMessageFactory.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 org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
7 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;\r
10 \r
11 /**\r
12  * @author timotej.kubas\r
13  * @author michal.polkorab\r
14  */\r
15 public class MultipartReplyMessageFactory implements OFDeserializer<MultipartReplyMessage> {\r
16 \r
17     private static MultipartReplyMessageFactory instance;\r
18     private static final byte PADDING_IN_MULTIPART_REPLY_HEADER = 4;\r
19     \r
20     private MultipartReplyMessageFactory() {\r
21         // singleton\r
22     }\r
23     \r
24     /**\r
25      * @return singleton factory\r
26      */\r
27     public static MultipartReplyMessageFactory getInstance(){\r
28         if (instance == null){\r
29 \r
30             instance = new MultipartReplyMessageFactory();\r
31         }\r
32         \r
33         return instance;\r
34     }\r
35 \r
36     @Override\r
37     public MultipartReplyMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
38         MultipartReplyMessageBuilder mrmb = new MultipartReplyMessageBuilder();\r
39         mrmb.setVersion(version);\r
40         mrmb.setXid(rawMessage.readUnsignedInt());\r
41         \r
42 //        TODO enum MultipartType\r
43 //        mrmb.setType(MultipartType.values()[rawMessage.readInt()]);\r
44         rawMessage.skipBytes(2); //instead of enum\r
45         \r
46         mrmb.setFlags(new MultipartRequestFlags((rawMessage.readUnsignedShort() & 0x01) > 0));\r
47         rawMessage.skipBytes(PADDING_IN_MULTIPART_REPLY_HEADER);\r
48         //mrmb.setBody(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
49         \r
50         return mrmb.build();\r
51     } \r
52 }\r