blob: 17f93481f2e2ab616bb834507e1c7e2f591e496c [file] [log] [blame]
tom64b7aac2014-08-26 00:18:21 -07001package org.onlab.onos.net;
2
tombb58c202014-09-07 22:51:50 -07003import java.util.Objects;
4
alshabibdf652ad2014-09-09 11:53:19 -07005import com.google.common.base.MoreObjects;
tombb58c202014-09-07 22:51:50 -07006
tom64b7aac2014-08-26 00:18:21 -07007/**
8 * Abstraction of a network connection point expressed as a pair of the
tombb58c202014-09-07 22:51:50 -07009 * network element identifier and port number.
tom64b7aac2014-08-26 00:18:21 -070010 */
tombb58c202014-09-07 22:51:50 -070011public class ConnectPoint {
12
13 private final ElementId elementId;
14 private final PortNumber portNumber;
tom64b7aac2014-08-26 00:18:21 -070015
16 /**
tombb58c202014-09-07 22:51:50 -070017 * Creates a new connection point.
tom64b7aac2014-08-26 00:18:21 -070018 *
tombb58c202014-09-07 22:51:50 -070019 * @param elementId network element identifier
20 * @param portNumber port number
tom64b7aac2014-08-26 00:18:21 -070021 */
tombb58c202014-09-07 22:51:50 -070022 public ConnectPoint(ElementId elementId, PortNumber portNumber) {
23 this.elementId = elementId;
24 this.portNumber = portNumber;
25 }
26
27 /**
28 * Returns the network element identifier.
29 *
30 * @return element identifier
31 */
32 public ElementId elementId() {
33 return elementId;
34 }
35
36 /**
37 * Returns the identifier of the infrastructure device if the connection
38 * point belongs to a network element which is indeed an infrastructure
39 * device.
40 *
41 * @return network element identifier as a device identifier
42 * @throws java.lang.IllegalStateException if connection point is not
43 * associated with a device
44 */
tombb58c202014-09-07 22:51:50 -070045 public DeviceId deviceId() {
46 if (elementId instanceof DeviceId) {
47 return (DeviceId) elementId;
48 }
49 throw new IllegalStateException("Connection point not associated " +
tomf5c9d922014-10-03 15:22:03 -070050 "with an infrastructure device");
51 }
52
53 /**
54 * Returns the identifier of the infrastructure device if the connection
55 * point belongs to a network element which is indeed an end-station host.
56 *
57 * @return network element identifier as a host identifier
58 * @throws java.lang.IllegalStateException if connection point is not
59 * associated with a host
60 */
61 public HostId hostId() {
62 if (elementId instanceof HostId) {
63 return (HostId) elementId;
64 }
65 throw new IllegalStateException("Connection point not associated " +
66 "with an end-station host");
tombb58c202014-09-07 22:51:50 -070067 }
tom64b7aac2014-08-26 00:18:21 -070068
69 /**
70 * Returns the connection port number.
71 *
72 * @return port number
73 */
tombb58c202014-09-07 22:51:50 -070074 public PortNumber port() {
75 return portNumber;
76 }
77
78 @Override
79 public int hashCode() {
80 return Objects.hash(elementId, portNumber);
81 }
82
83 @Override
84 public boolean equals(Object obj) {
tomfc9a4ff2014-09-22 18:22:47 -070085 if (this == obj) {
86 return true;
87 }
tombb58c202014-09-07 22:51:50 -070088 if (obj instanceof ConnectPoint) {
89 final ConnectPoint other = (ConnectPoint) obj;
90 return Objects.equals(this.elementId, other.elementId) &&
91 Objects.equals(this.portNumber, other.portNumber);
92 }
93 return false;
94 }
95
96 @Override
97 public String toString() {
alshabibdf652ad2014-09-09 11:53:19 -070098 return MoreObjects.toStringHelper(this)
tombb58c202014-09-07 22:51:50 -070099 .add("elementId", elementId)
100 .add("portNumber", portNumber)
101 .toString();
102 }
tom64b7aac2014-08-26 00:18:21 -0700103
104}