70 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| @startuml
 | |
| package com.iluwatar.event.asynchronous {
 | |
|   class App {
 | |
|     - LOGGER : Logger {static}
 | |
|     + PROP_FILE_NAME : String {static}
 | |
|     ~ interactiveMode : boolean
 | |
|     + App()
 | |
|     + main(args : String[]) {static}
 | |
|     - processOption1(eventManager : EventManager, s : Scanner)
 | |
|     - processOption2(eventManager : EventManager, s : Scanner)
 | |
|     - processOption3(eventManager : EventManager, s : Scanner)
 | |
|     + quickRun()
 | |
|     + run()
 | |
|     + runInteractiveMode()
 | |
|     + setUp()
 | |
|   }
 | |
|   class Event {
 | |
|     - LOGGER : Logger {static}
 | |
|     - eventId : int
 | |
|     - eventListener : ThreadCompleteListener
 | |
|     - eventTime : int
 | |
|     - isComplete : boolean
 | |
|     - isSynchronous : boolean
 | |
|     - thread : Thread
 | |
|     + Event(eventId : int, eventTime : int, isSynchronous : boolean)
 | |
|     + addListener(listener : ThreadCompleteListener)
 | |
|     - completed()
 | |
|     + isSynchronous() : boolean
 | |
|     + removeListener(listener : ThreadCompleteListener)
 | |
|     + run()
 | |
|     + start()
 | |
|     + status()
 | |
|     + stop()
 | |
|   }
 | |
|   class EventManager {
 | |
|     - DOES_NOT_EXIST : String {static}
 | |
|     + MAX_EVENT_TIME : int {static}
 | |
|     + MAX_ID : int {static}
 | |
|     + MAX_RUNNING_EVENTS : int {static}
 | |
|     + MIN_ID : int {static}
 | |
|     - currentlyRunningSyncEvent : int
 | |
|     - eventPool : Map<Integer, Event>
 | |
|     - rand : Random
 | |
|     + EventManager()
 | |
|     + cancel(eventId : int)
 | |
|     + completedEventHandler(eventId : int)
 | |
|     + create(eventTime : int) : int
 | |
|     + createAsync(eventTime : int) : int
 | |
|     - createEvent(eventTime : int, isSynchronous : boolean) : int
 | |
|     - generateId() : int
 | |
|     + getEventPool() : Map<Integer, Event>
 | |
|     + numOfCurrentlyRunningSyncEvent() : int
 | |
|     + shutdown()
 | |
|     + start(eventId : int)
 | |
|     + status(eventId : int)
 | |
|     + statusOfAllEvents()
 | |
|   }
 | |
|   interface IEvent {
 | |
|     + start() {abstract}
 | |
|     + status() {abstract}
 | |
|     + stop() {abstract}
 | |
|   }
 | |
|   interface ThreadCompleteListener {
 | |
|     + completedEventHandler(int) {abstract}
 | |
|   }
 | |
| }
 | |
| Event -->  "-eventListener" ThreadCompleteListener
 | |
| Event ..|> IEvent 
 | |
| EventManager ..|> ThreadCompleteListener 
 | |
| @enduml |