blob: d07def8862376be37c3ab47eecef33bb036801fd [file] [log] [blame]
tom29df6f42014-09-05 08:14:14 -07001package org.onlab.onos.net;
2
tomeadbb462014-09-07 16:10:19 -07003import static com.google.common.base.MoreObjects.toStringHelper;
tom29df6f42014-09-05 08:14:14 -07004
Jonathan Hartb79d6412014-09-19 11:24:06 -07005import java.util.Collections;
6import java.util.Objects;
7import java.util.Set;
8
Jonathan Hartfca736c2014-09-19 17:26:59 -07009import org.onlab.packet.IpPrefix;
Jonathan Hartb79d6412014-09-19 11:24:06 -070010
Yuta HIGUCHI9827a352014-09-21 17:01:29 -070011import com.google.common.collect.ImmutableSet;
12
tom29df6f42014-09-05 08:14:14 -070013/**
14 * Default port implementation.
15 */
16public class DefaultPort implements Port {
17
18 private final Element element;
19 private final PortNumber number;
20 private final boolean isEnabled;
21
Jonathan Hartb79d6412014-09-19 11:24:06 -070022 // Attributes
Jonathan Hartfca736c2014-09-19 17:26:59 -070023 private final Set<IpPrefix> ipAddresses;
Jonathan Hartb79d6412014-09-19 11:24:06 -070024
tom29df6f42014-09-05 08:14:14 -070025 /**
26 * Creates a network element attributed to the specified provider.
27 *
28 * @param element parent network element
29 * @param number port number
30 * @param isEnabled indicator whether the port is up and active
31 */
32 public DefaultPort(Element element, PortNumber number,
33 boolean isEnabled) {
Jonathan Hartb79d6412014-09-19 11:24:06 -070034 this(element, number, isEnabled, null);
35 }
36
37 /**
38 * Creates a network element attributed to the specified provider.
39 *
40 * @param element parent network element
41 * @param number port number
42 * @param isEnabled indicator whether the port is up and active
43 * @param ipAddresses set of IP addresses assigned to the port
44 */
45 public DefaultPort(Element element, PortNumber number,
Jonathan Hartfca736c2014-09-19 17:26:59 -070046 boolean isEnabled, Set<IpPrefix> ipAddresses) {
tom29df6f42014-09-05 08:14:14 -070047 this.element = element;
48 this.number = number;
49 this.isEnabled = isEnabled;
Yuta HIGUCHI9827a352014-09-21 17:01:29 -070050 this.ipAddresses = (ipAddresses == null) ? Collections.<IpPrefix>emptySet() :
51 ImmutableSet.copyOf(ipAddresses);
tom29df6f42014-09-05 08:14:14 -070052 }
53
54 @Override
55 public int hashCode() {
56 return Objects.hash(number, isEnabled);
57 }
58
59 @Override
60 public boolean equals(Object obj) {
tomfc9a4ff2014-09-22 18:22:47 -070061 if (this == obj) {
62 return true;
63 }
tom29df6f42014-09-05 08:14:14 -070064 if (obj instanceof DefaultPort) {
65 final DefaultPort other = (DefaultPort) obj;
66 return Objects.equals(this.element.id(), other.element.id()) &&
67 Objects.equals(this.number, other.number) &&
68 Objects.equals(this.isEnabled, other.isEnabled);
69 }
70 return false;
71 }
72
73 @Override
74 public String toString() {
75 return toStringHelper(this)
76 .add("element", element.id())
77 .add("number", number)
78 .add("isEnabled", isEnabled)
79 .toString();
80 }
81
82 @Override
83 public PortNumber number() {
84 return number;
85 }
86
87 @Override
88 public boolean isEnabled() {
89 return isEnabled;
90 }
91
92 @Override
93 public Element element() {
94 return element;
95 }
96
Jonathan Hartb79d6412014-09-19 11:24:06 -070097 @Override
Jonathan Hartfca736c2014-09-19 17:26:59 -070098 public Set<IpPrefix> ipAddresses() {
Jonathan Hartb79d6412014-09-19 11:24:06 -070099 return ipAddresses;
100 }
101
tom29df6f42014-09-05 08:14:14 -0700102}