962c4d38e99c64049c0bafc0ecf022c593d8317d
[controller.git] / opendaylight / adsal / sal / api / src / main / java / org / opendaylight / controller / sal / match / extensible / DlSrc.java
1 package org.opendaylight.controller.sal.match.extensible;
2
3 import java.util.Arrays;
4
5 import javax.xml.bind.annotation.XmlAccessType;
6 import javax.xml.bind.annotation.XmlAccessorType;
7 import javax.xml.bind.annotation.XmlElement;
8 import javax.xml.bind.annotation.XmlRootElement;
9
10 import org.opendaylight.controller.sal.utils.HexEncode;
11 import org.opendaylight.controller.sal.utils.NetUtils;
12
13 @XmlRootElement
14 @XmlAccessorType(XmlAccessType.NONE)
15 public class DlSrc extends MatchField<byte[]> {
16     private static final long serialVersionUID = 1L;
17     public static final String TYPE = "DL_SRC";
18     private byte[] address;
19
20     /**
21      * Creates a Match field for the source datalayer address
22      *
23      * @param address
24      *            the datalayer address. The constructor makes a copy of it
25      */
26     public DlSrc(byte[] address) {
27         super(TYPE);
28         if (address != null) {
29             this.address = Arrays.copyOf(address, address.length);
30         }
31     }
32
33     // To satisfy JAXB
34     private DlSrc() {
35         super(TYPE);
36     }
37
38     @Override
39     public byte[] getValue() {
40         return Arrays.copyOf(address, address.length);
41     }
42
43     @Override
44     @XmlElement(name = "value")
45     protected String getValueString() {
46         return HexEncode.bytesToHexStringFormat(address);
47     }
48
49     @Override
50     public byte[] getMask() {
51         return null;
52     }
53
54     @Override
55     protected String getMaskString() {
56         return null;
57     }
58
59     @Override
60     public boolean isValid() {
61         return address != null && address.length == NetUtils.MACAddrLengthInBytes;
62     }
63
64     @Override
65     public boolean hasReverse() {
66         return true;
67     }
68
69     @Override
70     public DlDst getReverse() {
71         return new DlDst(address);
72     }
73
74     @Override
75     public DlSrc clone() {
76         return new DlSrc(address);
77     }
78
79     @Override
80     public boolean isV6() {
81         return true;
82     }
83
84     @Override
85     public int hashCode() {
86         final int prime = 31;
87         int result = 1;
88         result = prime * result + Arrays.hashCode(address);
89         return result;
90     }
91
92     @Override
93     public boolean equals(Object obj) {
94         if (this == obj) {
95             return true;
96         }
97         if (obj == null) {
98             return false;
99         }
100         if (!(obj instanceof DlSrc)) {
101             return false;
102         }
103         DlSrc other = (DlSrc) obj;
104         return Arrays.equals(address, other.address);
105     }
106 }