Added openflow-codec and openflowj_netty from openflowplugin
[openflowjava.git] / third-party / openflow-codec / src / main / java / org / openflow / codec / protocol / OFPExperimenterHeader.java
1 package org.openflow.codec.protocol;
2
3 import java.util.Arrays;
4
5 import org.openflow.codec.io.IDataBuffer;
6 import org.openflow.codec.util.U16;
7
8 /**
9  * Represents ofp_experimenter_header
10  *
11  * @author AnilGujele
12  */
13 public class OFPExperimenterHeader extends OFPMessage {
14     public static int MINIMUM_LENGTH = 16;
15
16     private int experimenter;
17     private int expType;
18     private byte[] data;
19
20     /**
21      * constructor
22      */
23     public OFPExperimenterHeader() {
24         super();
25         this.type = OFPType.EXPERIMENTER;
26         this.length = U16.t(MINIMUM_LENGTH);
27     }
28
29     /**
30      * get experimenter id
31      *
32      * @return
33      */
34     public int getExperimenter() {
35         return experimenter;
36     }
37
38     /**
39      * set experimenter id
40      *
41      * @param experimenter
42      */
43     public void setExperimenter(int experimenter) {
44         this.experimenter = experimenter;
45     }
46
47     /**
48      * get experimenter type
49      *
50      * @return
51      */
52     public int getExpType() {
53         return expType;
54     }
55
56     /**
57      * set experimenter type
58      *
59      * @param expType
60      */
61     public void setExpType(int expType) {
62         this.expType = expType;
63     }
64
65     @Override
66     public void readFrom(IDataBuffer data) {
67         super.readFrom(data);
68         this.experimenter = data.getInt();
69         this.expType = data.getInt();
70         if (this.length > MINIMUM_LENGTH) {
71             this.data = new byte[this.length - MINIMUM_LENGTH];
72             data.get(this.data);
73         }
74     }
75
76     @Override
77     public void writeTo(IDataBuffer data) {
78         super.writeTo(data);
79         data.putInt(this.experimenter);
80         data.putInt(this.expType);
81         if (this.data != null)
82             data.put(this.data);
83     }
84
85     /**
86      * @return the data
87      */
88     public byte[] getData() {
89         return data;
90     }
91
92     /**
93      * @param data
94      *            the data to set
95      */
96     public void setData(byte[] data) {
97         this.data = data;
98         updateLength();
99     }
100
101     /**
102      * update length
103      */
104     private void updateLength() {
105         int dataLength = (null == data) ? 0 : data.length;
106         this.length = (short) (OFPExperimenterHeader.MINIMUM_LENGTH + dataLength);
107     }
108
109     /*
110      * (non-Javadoc)
111      *
112      * @see java.lang.Object#hashCode()
113      */
114     @Override
115     public int hashCode() {
116         final int prime = 337;
117         int result = super.hashCode();
118         result = prime * result + Arrays.hashCode(data);
119         result = prime * result + experimenter;
120         result = prime * result + expType;
121         return result;
122     }
123
124     /*
125      * (non-Javadoc)
126      *
127      * @see java.lang.Object#equals(java.lang.Object)
128      */
129     @Override
130     public boolean equals(Object obj) {
131         if (this == obj)
132             return true;
133         if (!super.equals(obj))
134             return false;
135         if (getClass() != obj.getClass())
136             return false;
137         OFPExperimenterHeader other = (OFPExperimenterHeader) obj;
138         if (experimenter != other.experimenter)
139             return false;
140         if (expType != other.expType)
141             return false;
142         if (!Arrays.equals(data, other.data))
143             return false;
144         return true;
145     }
146 }