initial Mapping Service code upload
[lispflowmapping.git] / mappingservice / api / src / main / java / org / opendaylight / lispflowmapping / type / lisp / address / LispListLCAFAddress.java
1 package org.opendaylight.lispflowmapping.type.lisp.address;
2
3 import java.nio.ByteBuffer;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
8
9 public class LispListLCAFAddress extends LispLCAFAddress {
10     List<LispAddress> addresses;
11
12     public LispListLCAFAddress(byte res2, List<LispAddress> addresses) {
13         super(LispCanonicalAddressFormatEnum.LIST, res2);
14         this.addresses = addresses;
15     }
16
17     @Override
18     public void serialize(ByteBuffer buffer) {
19         super.internalSerialize(buffer);
20         for (LispAddress address : addresses) {
21             address.serialize(buffer);
22         }
23     }
24
25     @Override
26     public short getLcafLength() {
27         short totalSize = 0;
28         for (LispAddress address : addresses) {
29             totalSize += address.getAddressSize();
30         }
31         return totalSize;
32     }
33
34     public List<LispAddress> getAddresses() {
35         return addresses;
36     }
37
38     public static LispListLCAFAddress valueOf(byte res2, short length, ByteBuffer buffer) {
39         List<LispAddress> addresses = new ArrayList<LispAddress>();
40         while (length > 0) {
41             LispAddress address = LispAddress.valueOf(buffer);
42             length -= address.getAddressSize();
43             addresses.add(address);
44         }
45         return new LispListLCAFAddress(res2, addresses);
46     }
47
48     @Override
49     public int hashCode() {
50         final int prime = 31;
51         int result = super.hashCode();
52         result = prime * result + ((addresses == null) ? 0 : addresses.hashCode());
53         return result;
54     }
55
56     @Override
57     public boolean equals(Object obj) {
58         if (this == obj)
59             return true;
60         if (!super.equals(obj))
61             return false;
62         if (getClass() != obj.getClass())
63             return false;
64         LispListLCAFAddress other = (LispListLCAFAddress) obj;
65         if (addresses == null) {
66             if (other.addresses != null)
67                 return false;
68         } else if (!addresses.equals(other.addresses))
69             return false;
70         return true;
71     }
72
73     @Override
74     public String toString() {
75         return "LispListLCAFAddress#[addresses=" + addresses + "]" + super.toString();
76     }
77 }