Merge "add basic lib - plugin communication"
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / serialization / EncoderTable.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.serialization;\r
3 \r
4 import java.util.HashMap;\r
5 import java.util.Map;\r
6 \r
7 import org.opendaylight.openflowjava.protocol.impl.core.OFVersionDetector;\r
8 import org.opendaylight.openflowjava.protocol.impl.serialization.factories.HelloInputMessageFactory;\r
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;\r
10 import org.opendaylight.yangtools.yang.binding.DataObject;\r
11 \r
12 /**\r
13  * @author michal.polkorab\r
14  *\r
15  */\r
16 public class EncoderTable {\r
17     \r
18     private static final short OF13 = OFVersionDetector.OF13_VERSION_ID;\r
19     private static EncoderTable instance;\r
20     private Map<MessageTypeKey<?>, OFSerializer<?>> table;\r
21     \r
22 \r
23     private EncoderTable() {\r
24         // do nothing\r
25     }\r
26     \r
27     /**\r
28      * @return singleton instance\r
29      */\r
30     public static EncoderTable getInstance() {\r
31         if (instance == null) {\r
32             synchronized (EncoderTable.class) {\r
33                 instance = new EncoderTable();\r
34                 instance.init();\r
35             }\r
36         }\r
37         return instance;\r
38     }\r
39     \r
40     /**\r
41      * Encoder table provisioning\r
42      */\r
43     public void init() {\r
44         table = new HashMap<>();\r
45         table.put(new MessageTypeKey<>(OF13, HelloInput.class), HelloInputMessageFactory.getInstance());\r
46     }\r
47     \r
48     /**\r
49      * @param msgTypeKey\r
50      * @return encoder for current type of message (msgTypeKey)\r
51      */\r
52     @SuppressWarnings("unchecked")\r
53     public <E extends DataObject> OFSerializer<E> getEncoder(MessageTypeKey<E> msgTypeKey) {\r
54         return (OFSerializer<E>) table.get(msgTypeKey);\r
55     }\r
56 \r
57 }\r