acb5b15460f5dc6c7b3be72e3f02030ab34e2c89
[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         /* Vendor should take care of padding here to make the structure align*/
75     }
76
77     @Override
78     public void writeTo(IDataBuffer data) {
79         super.writeTo(data);
80         data.putInt(this.experimenter);
81         data.putInt(this.expType);
82         if (this.data != null)
83             data.put(this.data);
84         /* Vendor should take care of padding here to make the structure align*/
85     }
86
87     /**
88      * @return the data
89      */
90     public byte[] getData() {
91         return data;
92     }
93
94     /**
95      * @param data
96      *            the data to set
97      */
98     public void setData(byte[] data) {
99         this.data = data;
100         updateLength();
101     }
102
103     /**
104      * update length
105      */
106     private void updateLength() {
107         int dataLength = (null == data) ? 0 : data.length;
108         this.length = (short) (OFPExperimenterHeader.MINIMUM_LENGTH + dataLength);
109     }
110
111     /*
112      * (non-Javadoc)
113      *
114      * @see java.lang.Object#hashCode()
115      */
116     @Override
117     public int hashCode() {
118         final int prime = 337;
119         int result = super.hashCode();
120         result = prime * result + Arrays.hashCode(data);
121         result = prime * result + experimenter;
122         result = prime * result + expType;
123         return result;
124     }
125
126     /*
127      * (non-Javadoc)
128      *
129      * @see java.lang.Object#equals(java.lang.Object)
130      */
131     @Override
132     public boolean equals(Object obj) {
133         if (this == obj)
134             return true;
135         if (!super.equals(obj))
136             return false;
137         if (getClass() != obj.getClass())
138             return false;
139         OFPExperimenterHeader other = (OFPExperimenterHeader) obj;
140         if (experimenter != other.experimenter)
141             return false;
142         if (expType != other.expType)
143             return false;
144         if (!Arrays.equals(data, other.data))
145             return false;
146         return true;
147     }
148 }