1+ import com.garbereder.tasktracker.entities.ActivityCollection
2+ import com.garbereder.tasktracker.entities.ActivityCollectionImpl
3+ import com.garbereder.tasktracker.entities.Task
4+ import com.garbereder.tasktracker.entities.TaskCollection
5+ import com.garbereder.tasktracker.usecases.tasks.*
6+ import com.github.kinquirer.KInquirer
7+ import com.github.kinquirer.components.promptInput
8+ import com.github.kinquirer.components.promptList
9+ import kotlin.system.exitProcess
10+
11+ class CLI (private val taskCollectionReaderFactory : TaskCollectionReaderFactory ) {
12+ companion object {
13+ val back = " Return"
14+
15+ fun addTask (tasks : TaskCollection ): () -> Unit = {
16+ val taskName = KInquirer .promptInput(" Task name:" )
17+ if (taskName == back) {
18+ println (" Illegal Task Name" )
19+ } else {
20+ AddTask (tasks, taskName).invoke()
21+ }
22+ }
23+
24+ fun listActivities (activities : ActivityCollection ): () -> Unit = {
25+ val actIt = activities.iterator()
26+ while (actIt.hasNext()) {
27+ println (actIt.next())
28+ }
29+ }
30+
31+ fun listTasks (activities : ActivityCollection , tasks : TaskCollection ): () -> Unit = {
32+ val taskIterator = ListTasks (tasks).invoke()
33+ val taskList = mutableMapOf<String , Task >()
34+ while (taskIterator.hasNext()) {
35+ val task = taskIterator.next()
36+ taskList[" $task .name (${task.id} )" ] = task
37+ }
38+ val options = taskList.keys.toMutableList()
39+ options.add(back)
40+ val selection: String = KInquirer .promptList(" What do you want to start?" , options)
41+ if (selection != = back) {
42+ val activity = StartActivity (taskList[selection]!! ).invoke()
43+ activities.add(activity)
44+ KInquirer .promptInput(" ${activity.task} started at ${activity.start} . Finish now?" )
45+ val stoppedActivity = StopActivity (activity).invoke()
46+ activities.add(stoppedActivity)
47+ activities.remove(activity)
48+ println (" ${stoppedActivity.task} started at ${stoppedActivity.start} and finished at ${stoppedActivity.end} " )
49+ }
50+ }
51+
52+ val quit: () -> Unit = {
53+ exitProcess(0 )
54+ }
55+ }
56+
57+ fun run () {
58+
59+ println (" Welcome to Task-Tracker-CLI" )
60+ val tasks = LoadTasks (taskCollectionReaderFactory.create()).invoke()
61+
62+ val activities = LoadActivities (object : ActivityCollectionReader {
63+ override fun read (): ActivityCollection = ActivityCollectionImpl ()
64+ }).invoke()
65+
66+ val choices = mapOf (
67+ " AddTask" to addTask(tasks),
68+ " ListTask" to listTasks(activities, tasks),
69+ " ListActivities" to listActivities(activities),
70+ " Quit" to quit
71+ )
72+ while (true ) {
73+ val selection: String = KInquirer .promptList(" What do you want to do?" , choices.keys.toList())
74+ choices[selection]!! .invoke()
75+ }
76+ }
77+ }
0 commit comments