488b24ae114491d4c7e8af7e69e82c9322786290
[openflowjava.git] / third-party / openflow-codec / src / main / java / org / openflow / codec / protocol / OFPHelloElemType.java
1 package org.openflow.codec.protocol;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 /**
7  * Represents struct ofp_hello_elem_type
8  *
9  * @author AnilGujele
10  *
11  */
12 public enum OFPHelloElemType {
13     /* Bitmap of version supported. */
14     VERSIONBITMAP((short) 1, new Instantiable<OFPHelloElemHeader>() {
15         @Override
16         public OFPHelloElemHeader instantiate() {
17             return new OFPHelloElemVersionBitmap();
18         }
19     });
20
21     private static Map<Short, OFPHelloElemType> mapping;
22
23     private short type;
24
25     private Instantiable<OFPHelloElemHeader> instantiable;
26
27     /**
28      *
29      * @param type
30      */
31     OFPHelloElemType(short type, Instantiable<OFPHelloElemHeader> instantiable) {
32         this.setTypeValue(type);
33         OFPHelloElemType.addMapping(type, this);
34         this.instantiable = instantiable;
35     }
36
37     /**
38      * add mapping to store
39      *
40      * @param type
41      * @param helloElementType
42      */
43     private static void addMapping(short type, OFPHelloElemType helloElementType) {
44         if (null == mapping) {
45             mapping = new HashMap<Short, OFPHelloElemType>();
46         }
47         mapping.put(type, helloElementType);
48     }
49
50     /**
51      * get OFHelloElementType correspond to value type
52      *
53      * @param type
54      * @return OFHelloElementType
55      */
56     public static OFPHelloElemType valueOf(short type) {
57         return mapping.get(type);
58     }
59
60     /**
61      * get HelloElement type value
62      *
63      * @return
64      */
65     public short getTypeValue() {
66         return type;
67     }
68
69     /**
70      * set HelloElement type value
71      *
72      * @param type
73      */
74     public void setTypeValue(short type) {
75         this.type = type;
76     }
77
78     /**
79      * Returns a new instance of the OFPHelloElemHeader represented by this
80      * OFPHelloElemType
81      *
82      * @return the new object
83      */
84     public OFPHelloElemHeader newInstance() {
85         return instantiable.instantiate();
86     }
87
88 }