From 8f875db252cfead19b029ff443f81d087c3cf097 Mon Sep 17 00:00:00 2001 From: Kamal Wickramanayake Date: Sun, 22 Mar 2026 15:33:43 +0530 Subject: Added 10-task-tracker --- oop/10-task-tracker/.gitignore | 1 + oop/10-task-tracker/.mvn/jvm.config | 0 oop/10-task-tracker/.mvn/maven.config | 0 oop/10-task-tracker/docs/01-requirements.txt | 6 ++ oop/10-task-tracker/docs/02-domain-model.uxf | 13 ++++ oop/10-task-tracker/docs/03-design.uxf | 40 ++++++++++ oop/10-task-tracker/pom.xml | 90 ++++++++++++++++++++++ .../src/main/java/lk/ac/pdn/ceit/tasks/App.java | 15 ++++ .../java/lk/ac/pdn/ceit/tasks/TaskManager.java | 9 +++ .../java/lk/ac/pdn/ceit/tasks/entities/Task.java | 84 ++++++++++++++++++++ .../java/lk/ac/pdn/ceit/tasks/entities/User.java | 32 ++++++++ .../main/java/lk/ac/pdn/ceit/tasks/ui/TextUI.java | 69 +++++++++++++++++ .../test/java/lk/ac/pdn/ceit/tasks/AppTest.java | 19 +++++ 13 files changed, 378 insertions(+) create mode 100644 oop/10-task-tracker/.gitignore create mode 100644 oop/10-task-tracker/.mvn/jvm.config create mode 100644 oop/10-task-tracker/.mvn/maven.config create mode 100644 oop/10-task-tracker/docs/01-requirements.txt create mode 100644 oop/10-task-tracker/docs/02-domain-model.uxf create mode 100644 oop/10-task-tracker/docs/03-design.uxf create mode 100644 oop/10-task-tracker/pom.xml create mode 100644 oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/App.java create mode 100644 oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/TaskManager.java create mode 100644 oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/entities/Task.java create mode 100644 oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/entities/User.java create mode 100644 oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/ui/TextUI.java create mode 100644 oop/10-task-tracker/src/test/java/lk/ac/pdn/ceit/tasks/AppTest.java (limited to 'oop') diff --git a/oop/10-task-tracker/.gitignore b/oop/10-task-tracker/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/oop/10-task-tracker/.gitignore @@ -0,0 +1 @@ +target diff --git a/oop/10-task-tracker/.mvn/jvm.config b/oop/10-task-tracker/.mvn/jvm.config new file mode 100644 index 0000000..e69de29 diff --git a/oop/10-task-tracker/.mvn/maven.config b/oop/10-task-tracker/.mvn/maven.config new file mode 100644 index 0000000..e69de29 diff --git a/oop/10-task-tracker/docs/01-requirements.txt b/oop/10-task-tracker/docs/01-requirements.txt new file mode 100644 index 0000000..932d793 --- /dev/null +++ b/oop/10-task-tracker/docs/01-requirements.txt @@ -0,0 +1,6 @@ +A task tracking system is to be developed. A user should be able to enter +new tasks into the system either assigning it to a user or unassigned. A +task should have a title and a description. It should be possible to update +the estimated time of a task. Once a task is completed, the user should be +able to set the actual time spent on the task. The software should allow +viewing the tasks assigned to a user. diff --git a/oop/10-task-tracker/docs/02-domain-model.uxf b/oop/10-task-tracker/docs/02-domain-model.uxf new file mode 100644 index 0000000..89ed41a --- /dev/null +++ b/oop/10-task-tracker/docs/02-domain-model.uxf @@ -0,0 +1,13 @@ +10UMLClass6010010060User +-- +id +usernameUMLClass360100100120Task +-- +id +title +description +estimatedTime +actualTime +completedRelation15010023040lt=<- +< createdBy10;20;210;20Relation15013023040lt=<- +< assignedTo10;20;210;20 \ No newline at end of file diff --git a/oop/10-task-tracker/docs/03-design.uxf b/oop/10-task-tracker/docs/03-design.uxf new file mode 100644 index 0000000..04a2deb --- /dev/null +++ b/oop/10-task-tracker/docs/03-design.uxf @@ -0,0 +1,40 @@ +10UMLClass2042012060User +-- +id: int +username: StringUMLClass290420150120Task +-- +id: int +title: String +description: String +estimatedTime: Duration +actualTime: Duration +completed: booleanRelation13042018040lt=<- +< createdBy10;20;160;20Relation13045018040lt=<- +< assignedTo10;20;160;20UMLClass30011090TextUI +-- +-- +createNewTask() +updateTask() +createNewUser() +start()UMLClass230032090<<interface>> +TaskManager +-- +-- +createNewTask(title: String, description: String): Task +findById(id: int): Task +updateTask(task: Task) +UMLClass017021070<<interface>> +UserManager +-- +-- +createNewUser(username: String)Relation1301012030lt=<-100;10;10;10Relation808030110lt=<-10;90;10;10UMLClass23019031090InMemoryTaskManager +-- +-- +createNewTask(title: String, description: String): Task +findById(id: int): Task +updateTask(task: Task) +Relation3508030130lt=<<.10;10;10;110Relation36027040170lt=<<<<- +m2=*10;10;10;150UMLClass032021050DBUserManager +-- +-- +createNewUser(username: String)Relation7023030110lt=<<.10;10;10;90 \ No newline at end of file diff --git a/oop/10-task-tracker/pom.xml b/oop/10-task-tracker/pom.xml new file mode 100644 index 0000000..7989c8c --- /dev/null +++ b/oop/10-task-tracker/pom.xml @@ -0,0 +1,90 @@ + + + 4.0.0 + + lk.ac.pdn.ceit.tasks + task-tracker + 1.0-SNAPSHOT + + task-tracker + + http://www.example.com + + + UTF-8 + 25 + + + + + + org.junit + junit-bom + 5.11.0 + pom + import + + + + + + + org.junit.jupiter + junit-jupiter-api + test + + + + org.junit.jupiter + junit-jupiter-params + test + + + + + + + + + maven-clean-plugin + 3.4.0 + + + + maven-resources-plugin + 3.3.1 + + + maven-compiler-plugin + 3.13.0 + + + maven-surefire-plugin + 3.3.0 + + + maven-jar-plugin + 3.4.2 + + + maven-install-plugin + 3.1.2 + + + maven-deploy-plugin + 3.1.2 + + + + maven-site-plugin + 3.12.1 + + + maven-project-info-reports-plugin + 3.6.1 + + + + + diff --git a/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/App.java b/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/App.java new file mode 100644 index 0000000..bb0ab24 --- /dev/null +++ b/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/App.java @@ -0,0 +1,15 @@ +package lk.ac.pdn.ceit.tasks; + +import lk.ac.pdn.ceit.tasks.ui.TextUI; + +/** + * Hello world! + */ +public class App { + public static void main(String[] args) { + TextUI ui = new TextUI(); + // ui.setTaskManager(); + + ui.start(); + } +} diff --git a/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/TaskManager.java b/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/TaskManager.java new file mode 100644 index 0000000..8e22b30 --- /dev/null +++ b/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/TaskManager.java @@ -0,0 +1,9 @@ +package lk.ac.pdn.ceit.tasks; + +import lk.ac.pdn.ceit.tasks.entities.Task; + +public interface TaskManager { + public Task createNewTask(String title, String description); + public Task findById(int id); + public void updateTask(Task task); +} diff --git a/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/entities/Task.java b/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/entities/Task.java new file mode 100644 index 0000000..26dfc4a --- /dev/null +++ b/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/entities/Task.java @@ -0,0 +1,84 @@ +package lk.ac.pdn.ceit.tasks.entities; + +import java.time.Duration; + +public class Task { + private User createdBy; + private User assignedTo; + + private int id; + private String title; + private String description; + private Duration estimatedTime; + private Duration actualTime; + private boolean completed; + + public Task() { + } + + public Task(int id, String title, String description) { + this.id = id; + this.title = title; + this.description = description; + } + + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public Duration getEstimatedTime() { + return estimatedTime; + } + public void setEstimatedTime(Duration estimatedTime) { + this.estimatedTime = estimatedTime; + } + public Duration getActualTime() { + return actualTime; + } + public void setActualTime(Duration actualTime) { + this.actualTime = actualTime; + } + public boolean isCompleted() { + return completed; + } + public void setCompleted(boolean completed) { + this.completed = completed; + } + + public User getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(User createdBy) { + this.createdBy = createdBy; + } + + public User getAssignedTo() { + return assignedTo; + } + + public void setAssignedTo(User assignedTo) { + this.assignedTo = assignedTo; + } + + @Override + public String toString() { + return "Task [id=" + id + ", title=" + title + ", description=" + description + ", estimatedTime=" + + estimatedTime + ", actualTime=" + actualTime + ", completed=" + completed + "]"; + } + +} diff --git a/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/entities/User.java b/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/entities/User.java new file mode 100644 index 0000000..2c45fc2 --- /dev/null +++ b/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/entities/User.java @@ -0,0 +1,32 @@ +package lk.ac.pdn.ceit.tasks.entities; + +public class User { + private int id; + private String username; + + public User() { + } + + public User(int id, String username) { + this.id = id; + this.username = username; + } + + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } + public String getUsername() { + return username; + } + public void setUsername(String username) { + this.username = username; + } + + @Override + public String toString() { + return "User [id=" + id + ", username=" + username + "]"; + } +} diff --git a/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/ui/TextUI.java b/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/ui/TextUI.java new file mode 100644 index 0000000..6bce661 --- /dev/null +++ b/oop/10-task-tracker/src/main/java/lk/ac/pdn/ceit/tasks/ui/TextUI.java @@ -0,0 +1,69 @@ +package lk.ac.pdn.ceit.tasks.ui; + +import lk.ac.pdn.ceit.tasks.TaskManager; +import lk.ac.pdn.ceit.tasks.entities.Task; + +public class TextUI { + private TaskManager taskManager; + + public void setTaskManager(TaskManager taskManager) { + this.taskManager = taskManager; + } + + public void start() { + while(true) { + String command = IO.readln("Command> "); + + switch (command.trim().toLowerCase()) { + case "q": + case "quit": + IO.println("Thank you for using Task Tracker."); + System.exit(0); + + case "createtask": + createNewTask(); + break; + + case "updatetask": + updateTask(); + break; + + default: + IO.println("Command not found."); + break; + } + } + } + + private void createNewTask() { + String title = IO.readln("Enter task title: "); + String description = IO.readln("Enter task description: "); + + Task newTask = taskManager.createNewTask(title, description); + + IO.print("New task created: " + newTask); + } + + private void updateTask() { + // Ask the user to enter task id + String taskId = IO.readln("Enter task ID: "); + + // Get the Task from TaskManager + Task task = taskManager.findById(Integer.parseInt(taskId)); + + // Show the Task details to user + IO.print(task); + + // Prompt the user to update Task properties + String title = IO.readln("New title: "); + if (! title.equals("")) { + task.setTitle(title); + } + // ... + + // Use the TaskManager and update the task + taskManager.updateTask(task); + IO.println("Task updated."); + } + +} diff --git a/oop/10-task-tracker/src/test/java/lk/ac/pdn/ceit/tasks/AppTest.java b/oop/10-task-tracker/src/test/java/lk/ac/pdn/ceit/tasks/AppTest.java new file mode 100644 index 0000000..c9bcf0c --- /dev/null +++ b/oop/10-task-tracker/src/test/java/lk/ac/pdn/ceit/tasks/AppTest.java @@ -0,0 +1,19 @@ +package lk.ac.pdn.ceit.tasks; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +/** + * Unit test for simple App. + */ +public class AppTest { + + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() { + assertTrue(true); + } +} -- cgit v1.2.3