Added support for OF 1.0
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / ExperimenterMessageFactory.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
2 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
3
4 import io.netty.buffer.ByteBuf;
5
6 import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;
7 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessageBuilder;
9
10 /**
11  * 
12  * @author michal.polkorab, 
13  * @author timotej.kubas
14  *
15  */
16 public class ExperimenterMessageFactory implements OFDeserializer<ExperimenterMessage>{
17
18     private static ExperimenterMessageFactory instance;
19     
20     private ExperimenterMessageFactory() {
21         //singleton
22     }
23     
24     
25     /**
26      * @return singleton factory
27      */
28     public static synchronized ExperimenterMessageFactory getInstance(){
29         if (instance == null){
30            instance = new ExperimenterMessageFactory(); 
31         }
32         return instance;
33     }
34
35     @Override
36     public ExperimenterMessage bufferToMessage(ByteBuf rawMessage, short version) {
37         ExperimenterMessageBuilder builder = new ExperimenterMessageBuilder();
38         builder.setVersion(version);
39         builder.setXid(rawMessage.readUnsignedInt());
40         builder.setExperimenter(rawMessage.readUnsignedInt());
41         builder.setExpType(rawMessage.readUnsignedInt());
42         int remainingBytes = rawMessage.readableBytes();
43         if (remainingBytes > 0) {
44             builder.setData(rawMessage.readBytes(remainingBytes).array());
45         }
46         return builder.build();
47     }
48 }