-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAssessmentController.java
More file actions
137 lines (110 loc) · 3.53 KB
/
Copy pathAssessmentController.java
File metadata and controls
137 lines (110 loc) · 3.53 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
package HealthCareSystem;
import GenCol.*;
import genDevs.modeling.*;
import simView.*;
public class AssessmentController
extends ViewableAtomic {
protected boolean doctor_available;
protected boolean npatientarrivalReq;
protected boolean emergpatientarrivalReq;
public AssessmentController() {
this("Assessment controller");
}
public AssessmentController(String nm) {
super(nm);
doctor_available = true;
npatientarrivalReq = false;
emergpatientarrivalReq = false;
addInport("in");
addOutport("out");
addTestInput("in", new entity("Normal_Patient"), 0);
addTestInput("in", new entity("Normal_Patient"), 5);
addTestInput("in", new entity("Normal_Patient"), 10);
addTestInput("in", new entity("Emergency_Patient"), 0);
addTestInput("in", new entity("Emergency_Patient"), 5);
addTestInput("in", new entity("Emergency_Patient"), 10);
addTestInput("in", new entity("AvailableForAssessment"), 0);
addTestInput("in", new entity("AvailableForAssessment"), 5);
addTestInput("in", new entity("AvailableForAssessment"), 10);
/* the ID number of the aircraft in the queue
that is reporting making an approach ; it ranges
from 1 to 10 according to the Max size of the arriving queue*/
//addTestInput("progress_in", new doubleEnt(1), 0);
}
public void initialize() {
super.initialize();
doctor_available = true;
npatientarrivalReq = false;
emergpatientarrivalReq = false;
holdIn("FREE", INFINITY);
}
public void deltext(double e, message x) {
Continue(e);
/* arriving aircraft have priority over departing aircraft because
their fuel capacity doesn't permit them to wait for long periods.
This is solved as shown below using the member variable runway_is_clears
*/
if (somethingOnPort(x, "in")) {
entity ent = getEntityOnPort(x, "in");
if (ent.eq("Emergency_Patient")) {
if (doctor_available) {
doctor_available = false;
holdIn("Assessing_EmergPatient", 0);
}
else {
npatientarrivalReq = true;
}
}
else if (ent.eq("Normal_Patient")) {
if (doctor_available) {
doctor_available = false;
holdIn("Assessing_NormalPatient", 0);
}
else {
emergpatientarrivalReq = true;
}
}
else if (ent.eq("AvailableForAssessment")) {
// order of servicing reflects priority order of landing over takeoff
if (npatientarrivalReq) {
npatientarrivalReq = false;
doctor_available = false;
holdIn("Assessing_NormalPatient", 0);
}
else
if (emergpatientarrivalReq) {
emergpatientarrivalReq = false;
doctor_available = false;
holdIn("Assessing_EmergPatient", 0);
}
else {
doctor_available = true;
holdIn("FREE", INFINITY); //back to initial state
}
}
}
}
public void deltint() {
if (phaseIs("Assessing_NormalPatient")) {
holdIn("Assessing_NormalPatient", INFINITY);
}
else if (phaseIs("Assessing_EmergPatient")) {
holdIn("Assessing_EmergPatient", INFINITY);
}
doctor_available = false;
}
public void deltcon(double e, message x) {
deltint();
deltext(0, x);
}
public message out() {
message m = new message();
if (phaseIs("Assessing_NormalPatient")) {
m.add(makeContent("out", new entity("Normal_Patient_Assessed")));
}
else if (phaseIs("Assessing_EmergPatient")) {
m.add(makeContent("out", new entity("Emergency_Patient_Assessed")));
}
return m;
}
} // end of class controller