Skip to content

Commit 9a90f2d

Browse files
author
WSSIA
committed
Changes based on code review
1 parent fce30db commit 9a90f2d

7 files changed

Lines changed: 125 additions & 82 deletions

File tree

event-asynchronous/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ folder: event-asynchronous
55
permalink: /patterns/event-asynchronous/
66
categories: Other
77
tags:
8+
- difficulty-intermediate
9+
- performance
810
- Java
911
---
1012

event-asynchronous/etc/event-asynchronous.ucls

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -65,32 +65,40 @@
6565
</display>
6666
</class>
6767
<association id="7">
68-
<bendpoint x="433" y="475"/>
69-
<end type="SOURCE" refId="3" navigable="false">
70-
<attribute id="8" name="eventPool"/>
71-
<multiplicity id="9" minimum="0" maximum="2147483647"/>
68+
<end type="SOURCE" refId="6" navigable="false">
69+
<attribute id="8" name="app">
70+
<position height="0" width="0" x="0" y="0"/>
71+
</attribute>
72+
<multiplicity id="9" minimum="0" maximum="1">
73+
<position height="16" width="23" x="714" y="226"/>
74+
</multiplicity>
7275
</end>
73-
<end type="TARGET" refId="2" navigable="true"/>
76+
<end type="TARGET" refId="1" navigable="true"/>
7477
<display labels="true" multiplicity="true"/>
7578
</association>
7679
<association id="10">
7780
<end type="SOURCE" refId="2" navigable="false">
7881
<attribute id="11" name="eventListener">
7982
<position height="18" width="74" x="250" y="287"/>
8083
</attribute>
81-
<multiplicity id="12" minimum="0" maximum="1"/>
84+
<multiplicity id="12" minimum="0" maximum="1">
85+
<position height="0" width="0" x="0" y="0"/>
86+
</multiplicity>
8287
</end>
8388
<end type="TARGET" refId="5" navigable="true"/>
8489
<display labels="true" multiplicity="true"/>
8590
</association>
8691
<association id="13">
87-
<end type="SOURCE" refId="6" navigable="false">
88-
<attribute id="14" name="app"/>
89-
<multiplicity id="15" minimum="0" maximum="1">
90-
<position height="16" width="23" x="714" y="226"/>
92+
<bendpoint x="433" y="475"/>
93+
<end type="SOURCE" refId="3" navigable="false">
94+
<attribute id="14" name="eventPool">
95+
<position height="0" width="0" x="0" y="0"/>
96+
</attribute>
97+
<multiplicity id="15" minimum="0" maximum="2147483647">
98+
<position height="0" width="0" x="0" y="0"/>
9199
</multiplicity>
92100
</end>
93-
<end type="TARGET" refId="1" navigable="true"/>
101+
<end type="TARGET" refId="2" navigable="true"/>
94102
<display labels="true" multiplicity="true"/>
95103
</association>
96104
<realization id="16">

event-asynchronous/src/main/java/com/iluwatar/event/asynchronous/App.java

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
*/
4949
public class App {
5050

51+
public static final String PROP_FILE_NAME = "config.properties";
52+
5153
boolean interactiveMode = false;
5254

5355
/**
@@ -68,15 +70,14 @@ public static void main(String[] args) {
6870
*/
6971
public void setUp() {
7072
Properties prop = new Properties();
71-
String propFileName = "config.properties";
7273

73-
InputStream inputStream = App.class.getClassLoader().getResourceAsStream(propFileName);
74+
InputStream inputStream = App.class.getClassLoader().getResourceAsStream(PROP_FILE_NAME);
7475

7576
if (inputStream != null) {
7677
try {
7778
prop.load(inputStream);
7879
} catch (IOException e) {
79-
System.out.println(propFileName + " was not found. Defaulting to non-interactive mode.");
80+
System.out.println(PROP_FILE_NAME + " was not found. Defaulting to non-interactive mode.");
8081
}
8182
String property = prop.getProperty("INTERACTIVE_MODE");
8283
if (property.equalsIgnoreCase("YES")) {
@@ -104,23 +105,23 @@ public void quickRun() {
104105

105106
try {
106107
// Create an Asynchronous event.
107-
int aEventId = eventManager.createAsyncEvent(60);
108+
int aEventId = eventManager.createAsync(60);
108109
System.out.println("Event [" + aEventId + "] has been created.");
109-
eventManager.startEvent(aEventId);
110+
eventManager.start(aEventId);
110111
System.out.println("Event [" + aEventId + "] has been started.");
111112

112113
// Create a Synchronous event.
113-
int sEventId = eventManager.createSyncEvent(60);
114+
int sEventId = eventManager.create(60);
114115
System.out.println("Event [" + sEventId + "] has been created.");
115-
eventManager.startEvent(sEventId);
116+
eventManager.start(sEventId);
116117
System.out.println("Event [" + sEventId + "] has been started.");
117118

118-
eventManager.getStatus(aEventId);
119-
eventManager.getStatus(sEventId);
119+
eventManager.status(aEventId);
120+
eventManager.status(sEventId);
120121

121-
eventManager.stopEvent(aEventId);
122+
eventManager.cancel(aEventId);
122123
System.out.println("Event [" + aEventId + "] has been stopped.");
123-
eventManager.stopEvent(sEventId);
124+
eventManager.cancel(sEventId);
124125
System.out.println("Event [" + sEventId + "] has been stopped.");
125126

126127
} catch (MaxNumOfEventsAllowedException | LongRunningEventException | EventDoesNotExistException
@@ -136,35 +137,33 @@ public void runInteractiveMode() {
136137
EventManager eventManager = new EventManager();
137138

138139
Scanner s = new Scanner(System.in);
139-
int option = 0;
140-
option = -1;
140+
int option = -1;
141141
while (option != 5) {
142-
System.out
143-
.println("(1) START_EVENT \n(2) STOP_EVENT \n(3) STATUS_OF_EVENT \n(4) STATUS_OF_ALL_EVENTS \n(5) EXIT");
142+
System.out.println("Hello. Would you like to boil some eggs?");
143+
System.out.println(
144+
"(1) BOIL AN EGG \n(2) STOP BOILING THIS EGG \n(3) HOW IS MY EGG? \n(4) HOW ARE MY EGGS? \n(5) EXIT");
144145
System.out.print("Choose [1,2,3,4,5]: ");
145146
option = s.nextInt();
146147

147148
if (option == 1) {
148149
s.nextLine();
149-
System.out.print("(A)sync or (S)ync event?: ");
150+
System.out.print("Boil multiple eggs at once (A) or boil them one-by-one (S)?: ");
150151
String eventType = s.nextLine();
151-
System.out.print("How long should this event run for (in seconds)?: ");
152+
System.out.print("How long should this egg be boiled for (in seconds)?: ");
152153
int eventTime = s.nextInt();
153154
if (eventType.equalsIgnoreCase("A")) {
154155
try {
155-
int eventId = eventManager.createAsyncEvent(eventTime);
156-
System.out.println("Event [" + eventId + "] has been created.");
157-
eventManager.startEvent(eventId);
158-
System.out.println("Event [" + eventId + "] has been started.");
156+
int eventId = eventManager.createAsync(eventTime);
157+
eventManager.start(eventId);
158+
System.out.println("Egg [" + eventId + "] is being boiled.");
159159
} catch (MaxNumOfEventsAllowedException | LongRunningEventException | EventDoesNotExistException e) {
160160
System.out.println(e.getMessage());
161161
}
162162
} else if (eventType.equalsIgnoreCase("S")) {
163163
try {
164-
int eventId = eventManager.createSyncEvent(eventTime);
165-
System.out.println("Event [" + eventId + "] has been created.");
166-
eventManager.startEvent(eventId);
167-
System.out.println("Event [" + eventId + "] has been started.");
164+
int eventId = eventManager.create(eventTime);
165+
eventManager.start(eventId);
166+
System.out.println("Egg [" + eventId + "] is being boiled.");
168167
} catch (MaxNumOfEventsAllowedException | InvalidOperationException | LongRunningEventException
169168
| EventDoesNotExistException e) {
170169
System.out.println(e.getMessage());
@@ -173,24 +172,26 @@ public void runInteractiveMode() {
173172
System.out.println("Unknown event type.");
174173
}
175174
} else if (option == 2) {
176-
System.out.print("Event ID: ");
175+
System.out.print("Which egg?: ");
177176
int eventId = s.nextInt();
178177
try {
179-
eventManager.stopEvent(eventId);
180-
System.out.println("Event [" + eventId + "] has been stopped.");
178+
eventManager.cancel(eventId);
179+
System.out.println("Egg [" + eventId + "] is removed from boiler.");
181180
} catch (EventDoesNotExistException e) {
182181
System.out.println(e.getMessage());
183182
}
184183
} else if (option == 3) {
185-
System.out.print("Event ID: ");
184+
System.out.print("Which egg?: ");
186185
int eventId = s.nextInt();
187186
try {
188-
eventManager.getStatus(eventId);
187+
eventManager.status(eventId);
189188
} catch (EventDoesNotExistException e) {
190189
System.out.println(e.getMessage());
191190
}
192191
} else if (option == 4) {
193-
eventManager.getStatusOfAllEvents();
192+
eventManager.statusOfAllEvents();
193+
} else if (option == 5) {
194+
eventManager.shutdown();
194195
}
195196
}
196197

event-asynchronous/src/main/java/com/iluwatar/event/asynchronous/Event.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,10 @@ public class Event implements IEvent, Runnable {
2626
private int eventId;
2727
private int eventTime;
2828
private Thread thread;
29-
private long counter = 0;
3029
private boolean isComplete = false;
3130
private ThreadCompleteListener eventListener;
3231

33-
public Event(int eventId, int eventTime) {
32+
public Event(final int eventId, final int eventTime) {
3433
this.eventId = eventId;
3534
this.eventTime = eventTime;
3635
}
@@ -49,9 +48,9 @@ public void stop() {
4948
@Override
5049
public void status() {
5150
if (!isComplete) {
52-
System.out.println("[" + eventId + "] I am at not done. [" + counter + "%]");
51+
System.out.println("[" + eventId + "] is not done.");
5352
} else {
54-
System.out.println("[" + eventId + "] I am done.");
53+
System.out.println("[" + eventId + "] is done.");
5554
}
5655
}
5756

@@ -61,14 +60,13 @@ public void run() {
6160
long endTime = currentTime + (eventTime * 1000);
6261
while (System.currentTimeMillis() < endTime) {
6362
try {
64-
counter += 1;
6563
Thread.sleep(5000); // Sleep for 5 seconds.
6664
} catch (InterruptedException e) {
6765
return;
6866
}
6967
}
7068
isComplete = true;
71-
notifyListener();
69+
completed();
7270
}
7371

7472
public final void addListener(final ThreadCompleteListener listener) {
@@ -79,9 +77,9 @@ public final void removeListener(final ThreadCompleteListener listener) {
7977
this.eventListener = null;
8078
}
8179

82-
private final void notifyListener() {
80+
private final void completed() {
8381
if (eventListener != null) {
84-
eventListener.notifyOfThreadComplete(eventId);
82+
eventListener.completedEventHandler(eventId);
8583
}
8684
}
8785

0 commit comments

Comments
 (0)