Merge "Updated pom.xml to build documentation only on jenkins merge-job"
[openflowjava.git] / third-party / openflow-codec / src / main / java / org / openflow / codec / protocol / statistics / OFPExperimenterMultipartHeader.java
1 package org.openflow.codec.protocol.statistics;
2
3 import java.util.Arrays;
4
5 import org.openflow.codec.io.IDataBuffer;
6
7 /**
8  * Represents ofp_experimenter_multipart_header
9  *
10  * @author AnilGujele
11  */
12 public class OFPExperimenterMultipartHeader implements OFPExtStatistics {
13     public static int MINIMUM_LENGTH = 8;
14
15     private int experimenter;
16     private int expType;
17     private byte[] data;
18
19     // non-message field
20     private int length;
21
22     /**
23      * constructor
24      */
25     public OFPExperimenterMultipartHeader() {
26         this.length = 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         this.experimenter = data.getInt();
68         this.expType = data.getInt();
69         if (this.length > MINIMUM_LENGTH) {
70             this.data = new byte[this.length - MINIMUM_LENGTH];
71             data.get(this.data);
72             updateLength();
73         }
74     }
75
76     @Override
77     public void writeTo(IDataBuffer data) {
78         data.putInt(this.experimenter);
79         data.putInt(this.expType);
80         if (this.data != null)
81             data.put(this.data);
82     }
83
84     /**
85      * @return the data
86      */
87     public byte[] getData() {
88         return data;
89     }
90
91     /**
92      * @param data
93      *            the data to set
94      */
95     public void setData(byte[] data) {
96         this.data = data;
97         updateLength();
98     }
99
100     /**
101      * update length
102      */
103     private void updateLength() {
104         int dataLength = (null == data) ? 0 : data.length;
105         this.length = OFPExperimenterMultipartHeader.MINIMUM_LENGTH + dataLength;
106     }
107
108     /*
109      * (non-Javadoc)
110      *
111      * @see java.lang.Object#hashCode()
112      */
113     @Override
114     public int hashCode() {
115         final int prime = 337;
116         int result = 0;
117         result = prime * result + Arrays.hashCode(data);
118         result = prime * result + experimenter;
119         result = prime * result + expType;
120         return result;
121     }
122
123     /*
124      * (non-Javadoc)
125      *
126      * @see java.lang.Object#equals(java.lang.Object)
127      */
128     @Override
129     public boolean equals(Object obj) {
130         if (this == obj)
131             return true;
132         if (null == obj)
133             return false;
134         if (!(obj instanceof OFPExperimenterMultipartHeader))
135             return false;
136         OFPExperimenterMultipartHeader other = (OFPExperimenterMultipartHeader) obj;
137         if (experimenter != other.experimenter)
138             return false;
139         if (expType != other.expType)
140             return false;
141         if (!Arrays.equals(data, other.data))
142             return false;
143         return true;
144     }
145
146     @Override
147     public int getLength() {
148         return length;
149     }
150
151     @Override
152     public void setLength(int length) {
153         this.length = length;
154
155     }
156 }