-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathExchange.java
More file actions
153 lines (115 loc) · 2.93 KB
/
Exchange.java
File metadata and controls
153 lines (115 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
interface ExchangeInterface{
public Exchange parent();
public Exchange numChildren();
public Exchange child(int i);
public Boolean isRoot();
public RoutingMapTree subtree(int i);
public MobilePhoneSet residentSet();
}
public class Exchange{
/*
The nodes of the Routing Map structure.
*/
Integer id;
Exchange parent;
ExchangeList children;
MobilePhoneSet mobileSet;
public Exchange(int number){
/*
Constructor to create an exchange.
Unique identifier for an exchange is an integer.
*/
id = number;
children = new ExchangeList();
mobileSet = new MobilePhoneSet();
}
public Integer getUniqueId(){
return id;
}
public void setUniqueId(int i){
id = i;
}
public Exchange parent(){
// Returns the parent of the Exchange in RoutingMapTree
return parent;
}
public void setParent(Exchange node){
parent = node;
}
public void addMobileToResidentSet(MobilePhone mobile){
mobileSet.Insert(mobile);
}
public void deleteMobilefromResidentSet(MobilePhone mobile) throws MobilePhoneNotFoundException{
try{
mobileSet.Delete(mobile);
}
catch(NotInSetException e){
throw new MobilePhoneNotFoundException("Error - No mobile phone with identifer "+mobile.number()+" found in the network");
}
}
public void addChild(Exchange node){
node.setParent(this);
children.add(node);
}
public int numChildren(){
// Number of children
return children.getSize();
}
public Exchange child(int i) throws ChildNotFoundException{
// Returns the ith child
int num = numChildren();
if(i<num && i>=0){
ExchangeList.Node itr = children.head;
for(int j=num-1;j>i;j--){
itr = itr.next;
}
return (Exchange)itr.data;
}
else{
throw new ChildNotFoundException("Error - No "+ i +" child of Exchange "+this.getUniqueId());
}
}
public MobilePhone searchPhone(int i) throws MobilePhoneNotFoundException{
// Calls MobilePhoneSet operation searchPhone()
return mobileSet.searchPhone(i);
}
public Boolean isRoot(){
// Checks if the exchange is a root of a Routing Map Tree.
if(parent() == null){
return true;
}
return false;
}
public RoutingMapTree subtree(int i) throws ChildNotFoundException{
/*
Returns the ith subtree.
Throws exception if the child i is not found.
*/
Exchange subtreeAti = child(i);
RoutingMapTree rmt = new RoutingMapTree();
rmt.setRoot(subtreeAti);
return rmt;
}
public MobilePhoneSet residentSet(){
// Returns the resident set of mobile phones of the exchange
return mobileSet;
}
public boolean equals(Exchange o) {
/*
Two Exchanges are the same
if their identifiers are the same
*/
if (o == this) {
return true;
}
if (!(o instanceof Exchange)) {
return false;
}
return o.getUniqueId() == id;
}
public String toString(){
// Returns the id of Exchange
// In the form of a string
return String.valueOf(getUniqueId());
}
}