Merge "Randomize port to allow concurrent execution"
[bgpcep.git] / pcep / api / src / main / java / org / opendaylight / protocol / pcep / object / PCEPSvecObject.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.protocol.pcep.object;
9
10 import java.util.List;
11
12 import org.opendaylight.protocol.pcep.PCEPObject;
13 import com.google.common.base.Objects.ToStringHelper;
14
15 /**
16  * Structure of PCEP SVEC Object.
17  *
18  * @see <a href="http://tools.ietf.org/html/rfc5440#section-7.13">PCEP SVEC
19  *      Object</a>
20  * @see <a
21  *      href="http://tools.ietf.org/html/rfc6006#section-3.12">Synchronization
22  *      of P2MP TE Path Computation Requests [RFC6006]</a>
23  */
24 public class PCEPSvecObject extends PCEPObject {
25
26     private final boolean linkDiversed;
27
28     private final boolean nodeDiversed;
29
30     private final boolean srlgDiversed;
31
32     private final boolean paritialPathDiversed;
33
34     private final boolean linkDirectionDiversed;
35
36     private final List<Long> requestIDs;
37
38     /**
39      * Constructs PCEP SVEC Object.
40      *
41      * @param linkDiversed
42      *            boolean
43      * @param nodeDiversed
44      *            boolean
45      * @param srlgDiversed
46      *            boolean
47      * @param requestIDs
48      *            List<Long>. Can't be null or empty.
49      * @param processed
50      *            boolean
51      */
52     public PCEPSvecObject(boolean linkDiversed, boolean nodeDiversed, boolean srlgDiversed, boolean partialPathDiversed, boolean linkDirectionDiversed,
53             List<Long> requestIDs, boolean processed) {
54         super(processed, false);
55         this.linkDiversed = linkDiversed;
56         this.nodeDiversed = nodeDiversed;
57         this.srlgDiversed = srlgDiversed;
58         this.paritialPathDiversed = partialPathDiversed;
59         this.linkDirectionDiversed = linkDirectionDiversed;
60
61         if (requestIDs == null || requestIDs.isEmpty())
62             throw new IllegalArgumentException("RequestIDs can't be null or empty.");
63         this.requestIDs = requestIDs;
64     }
65
66     /**
67      * Gets Link Diversed flag.
68      *
69      * @return boolean
70      */
71     public boolean isLinkDiversed() {
72         return this.linkDiversed;
73     }
74
75     /**
76      * Gets Node Diversed flag.
77      *
78      * @return boolean
79      */
80     public boolean isNodeDiversed() {
81         return this.nodeDiversed;
82     }
83
84     /**
85      * Gets Srlg Diversed flag.
86      *
87      * @return boolean
88      */
89     public boolean isSrlgDiversed() {
90         return this.srlgDiversed;
91     }
92
93     public boolean isParitialPathDiversed() {
94         return this.paritialPathDiversed;
95     }
96
97     public boolean isLinkDirectionDiversed() {
98         return this.linkDirectionDiversed;
99     }
100
101     /**
102      * Gets list of Long representations of RequestIDs.
103      *
104      * @return List<Long>. Can't be null or empty.
105      */
106     public List<Long> getRequestIDs() {
107         return this.requestIDs;
108     }
109
110     @Override
111     public int hashCode() {
112         final int prime = 31;
113         int result = super.hashCode();
114         result = prime * result + (this.linkDiversed ? 1231 : 1237);
115         result = prime * result + (this.nodeDiversed ? 1231 : 1237);
116         result = prime * result + ((this.requestIDs == null) ? 0 : this.requestIDs.hashCode());
117         result = prime * result + (this.srlgDiversed ? 1231 : 1237);
118         return result;
119     }
120
121     @Override
122     public boolean equals(Object obj) {
123         if (this == obj)
124             return true;
125         if (!super.equals(obj))
126             return false;
127         if (this.getClass() != obj.getClass())
128             return false;
129         final PCEPSvecObject other = (PCEPSvecObject) obj;
130         if (this.linkDiversed != other.linkDiversed)
131             return false;
132         if (this.nodeDiversed != other.nodeDiversed)
133             return false;
134         if (this.requestIDs == null) {
135             if (other.requestIDs != null)
136                 return false;
137         } else if (!this.requestIDs.equals(other.requestIDs))
138             return false;
139         if (this.srlgDiversed != other.srlgDiversed)
140             return false;
141         return true;
142     }
143
144     @Override
145         protected ToStringHelper addToStringAttributes(ToStringHelper toStringHelper) {
146                 toStringHelper.add("linkDiversed", this.linkDiversed);
147                 toStringHelper.add("nodeDiversed", this.nodeDiversed);
148                 toStringHelper.add("srlgDiversed", this.srlgDiversed);
149                 toStringHelper.add("paritialPathDiversed", this.paritialPathDiversed);
150                 toStringHelper.add("linkDirectionDiversed", this.linkDirectionDiversed);
151                 toStringHelper.add("requestIDs", this.requestIDs);
152                 return super.addToStringAttributes(toStringHelper);
153         }
154 }