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