-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDoneEvent.java
More file actions
49 lines (46 loc) · 1.94 KB
/
DoneEvent.java
File metadata and controls
49 lines (46 loc) · 1.94 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
package cs2030.simulator;
/**
* DoneEvent where server is done serving a customer. The 'DoneEvent' class
* supports operators that includes: (i) Transition to IdleEvent, ServeEvent,
* or ServerRest depending on criteria.
* DoneEvent contains EventStatus status and ServerI server.
*/
public class DoneEvent extends Event {
private static final EventStatus status = EventStatus.DONE;
private final ServerI server;
/**
* Constructs a DoneEvent containing a customer, a serverI, and a lambda
* expression to transition to the next events: (i) IdleEvent if server has
* an empty queue. (ii) ServeEvent if server has customers in the queue.
* (iii) ServerRestEvent if server is going for a rest.
* @param customer Customer that is done being served by server.
* @param server ServerI that is done serving the customer.
*/
public DoneEvent(Customer customer, ServerI server) {
super(customer, server.getNextAvailableTime(), server, shop -> {
ServerI s = shop.get(server).get();
s = s.done();
return Pair.of(shop.replace(s), new IdleEvent(customer, s));
}, (shop, chance) -> {
ServerI s = shop.get(server).get();
s = s.goRest();
return Pair.of(shop.replace(s), new ServerRestEvent(customer, s));
}, status);
this.server = server;
}
/**
* Retrieve String representation of DoneEvent.
* @return Time when server is done, the customer who has been served,
* and server who served the customer.
*/
@Override
public String toString() {
if (server instanceof Server) {
return String.format("%s done serving by server %d",
super.toString(), server.getId());
} else {
return String.format("%s done serving by %s", super.toString(),
server.toString());
}
}
}