Make sure invokeOperation is set once
[controller.git] / opendaylight / adsal / sal / api / src / main / java / org / opendaylight / controller / sal / match / extensible / NwSrc.java
1 package org.opendaylight.controller.sal.match.extensible;
2
3 import java.net.Inet4Address;
4 import java.net.Inet6Address;
5 import java.net.InetAddress;
6
7 import javax.xml.bind.annotation.XmlAccessType;
8 import javax.xml.bind.annotation.XmlAccessorType;
9 import javax.xml.bind.annotation.XmlElement;
10 import javax.xml.bind.annotation.XmlRootElement;
11
12 import org.opendaylight.controller.sal.utils.NetUtils;
13
14 @XmlRootElement
15 @XmlAccessorType(XmlAccessType.NONE)
16 @Deprecated
17 public class NwSrc extends MatchField<InetAddress> {
18     private static final long serialVersionUID = 1L;
19     public static final String TYPE = "NW_SRC";
20     private InetAddress address;
21     private InetAddress mask;
22
23     /**
24      * Creates a Match field for the network source address
25      *
26      * @param address
27      *            the network address
28      * @param mask
29      *            the network mask
30      */
31     public NwSrc(InetAddress address, InetAddress mask) {
32         super(TYPE);
33         this.address = address;
34         this.mask = mask;
35     }
36
37     // To satisfy JAXB
38     private NwSrc() {
39         super(TYPE);
40     }
41
42     public NwSrc(InetAddress address) {
43         super(TYPE);
44         this.address = address;
45         this.mask = null;
46     }
47
48     @Override
49     public InetAddress getValue() {
50         return address;
51     }
52
53     @Override
54     @XmlElement(name = "value")
55     protected String getValueString() {
56         return address.toString();
57     }
58
59     @Override
60     public InetAddress getMask() {
61         return mask;
62     }
63
64     @Override
65     @XmlElement(name = "mask")
66     protected String getMaskString() {
67         return mask == null ? "null" : mask.toString();
68     }
69
70     @Override
71     public boolean isValid() {
72         if (address != null) {
73             if (mask != null) {
74                 return address instanceof Inet4Address && mask instanceof Inet4Address
75                         || address instanceof Inet6Address && mask instanceof Inet6Address;
76             }
77             return true;
78         }
79         return false;
80     }
81
82     @Override
83     public boolean hasReverse() {
84         return true;
85     }
86
87     @Override
88     public NwDst getReverse() {
89         return new NwDst(address, mask);
90     }
91
92     @Override
93     public NwSrc clone() {
94         return new NwSrc(address, mask);
95     }
96
97     @Override
98     public boolean isV6() {
99         return address instanceof Inet6Address;
100     }
101
102     @Override
103     public int hashCode() {
104         final int prime = 31;
105         int result = 1;
106         result = prime * result + ((address == null) ? 0 : address.hashCode());
107         result = prime * result + ((mask == null) ? 0 : mask.hashCode());
108         return result;
109     }
110
111     @Override
112     public boolean equals(Object obj) {
113         if (this == obj) {
114             return true;
115         }
116         if (obj == null) {
117             return false;
118         }
119         if (!(obj instanceof NwSrc)) {
120             return false;
121         }
122         NwSrc other = (NwSrc) obj;
123         // Equality to be checked against prefix addresses
124         int thisMaskLen = (this.mask == null) ? ((this.address instanceof Inet4Address) ? 32 : 128) : NetUtils
125                 .getSubnetMaskLength(this.mask);
126         int otherMaskLen = (other.mask == null) ? ((other.address instanceof Inet4Address) ? 32 : 128) : NetUtils
127                 .getSubnetMaskLength(other.mask);
128
129         return NetUtils.getSubnetPrefix(address, thisMaskLen).equals(
130                 NetUtils.getSubnetPrefix(other.address, otherMaskLen));
131     }
132 }