blob: de1863144fc068b2b391c2b6e4004fdfb2f1132f [file] [log] [blame]
Jonathan Hart062a2e82014-02-03 09:41:57 -08001package net.onrc.onos.ofcontroller.networkgraph;
2
Yuta HIGUCHI4bfdd532014-02-07 13:47:36 -08003import java.util.Collections;
4import java.util.HashSet;
5import java.util.Set;
6
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -08007/**
8 * Port Object stored in In-memory Topology.
9 *
10 * TODO REMOVE following design memo: This object itself may hold the DBObject,
11 * but this Object itself will not issue any read/write to the DataStore.
12 */
Jonathan Hart062a2e82014-02-03 09:41:57 -080013public class PortImpl extends NetworkGraphObject implements Port {
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080014
Jonathan Hart062a2e82014-02-03 09:41:57 -080015 private Switch sw;
Toshio Koide2f570c12014-02-06 16:55:32 -080016 private Long number;
17 protected Link outgoingLink;
18 protected Link incomingLink;
Yuta HIGUCHI4bfdd532014-02-07 13:47:36 -080019 protected Set<Device> devices;
Jonathan Hart062a2e82014-02-03 09:41:57 -080020
Toshio Koide2f570c12014-02-06 16:55:32 -080021 public PortImpl(NetworkGraph graph, Switch parentSwitch, Long number) {
Jonathan Hart062a2e82014-02-03 09:41:57 -080022 super(graph);
Toshio Koide2f570c12014-02-06 16:55:32 -080023 this.sw = parentSwitch;
24 this.number = number;
Yuta HIGUCHI4bfdd532014-02-07 13:47:36 -080025 this.devices = new HashSet<>();
Jonathan Hart062a2e82014-02-03 09:41:57 -080026 }
27
28 @Override
Toshio Koide2f570c12014-02-06 16:55:32 -080029 public Long getNumber() {
Jonathan Hart062a2e82014-02-03 09:41:57 -080030 return number;
31 }
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080032
Jonathan Hart062a2e82014-02-03 09:41:57 -080033 @Override
Toshio Koide2f570c12014-02-06 16:55:32 -080034 public Long getHardwareAddress() {
Jonathan Hart062a2e82014-02-03 09:41:57 -080035 // TODO Auto-generated method stub
Toshio Koide2f570c12014-02-06 16:55:32 -080036 return 0L;
Jonathan Hart062a2e82014-02-03 09:41:57 -080037 }
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080038
Jonathan Hart062a2e82014-02-03 09:41:57 -080039 @Override
40 public Switch getSwitch() {
41 return sw;
42 }
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080043
Toshio Koide2f570c12014-02-06 16:55:32 -080044 @Override
45 public Link getOutgoingLink() {
46 return outgoingLink;
Jonathan Hart062a2e82014-02-03 09:41:57 -080047 }
48
49 @Override
Toshio Koide2f570c12014-02-06 16:55:32 -080050 public Link getIncomingLink() {
51 return incomingLink;
Jonathan Hart062a2e82014-02-03 09:41:57 -080052 }
53
Yuta HIGUCHI4bfdd532014-02-07 13:47:36 -080054 @Override
55 public Iterable<Device> getDevices() {
56 return Collections.unmodifiableSet(this.devices);
57 }
58
Toshio Koide2f570c12014-02-06 16:55:32 -080059 public void setOutgoingLink(Link link) {
60 outgoingLink = link;
61 }
62
63 public void setIncomingLink(Link link) {
64 incomingLink = link;
65 }
66
Yuta HIGUCHI4bfdd532014-02-07 13:47:36 -080067 /**
68 *
69 * @param d
70 * @return true if successfully added
71 */
72 public boolean addDevice(Device d) {
73 return this.devices.add(d);
74 }
75
76 /**
77 *
78 * @param d
79 * @return true if device existed and was removed
80 */
81 public boolean removeDevice(Device d) {
82 return this.devices.remove(d);
83 }
84
Toshio Koide2f570c12014-02-06 16:55:32 -080085 @Override
86 public String toString() {
87 return String.format("%d:%d",
88 getSwitch().getDpid(),
89 getNumber());
90 }
Jonathan Hart062a2e82014-02-03 09:41:57 -080091}