Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added domain-model.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
103 changes: 103 additions & 0 deletions src/main/java/com/booleanuk/core/TodoList.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,108 @@
package com.booleanuk.core;

import java.util.*;

public class TodoList {

Map<String, Boolean> tasks;

public TodoList(Map<String, Boolean> tasks) {
this.tasks = tasks;
}

public Boolean addTask(String taskName) {
taskName = taskName.strip().toLowerCase();
if (taskName.isBlank()) {
return null;
}

for (String key : tasks.keySet()) {
if (taskName.equals(key.toLowerCase())) {
return false;
}
}
tasks.put(taskName, false); // not completed by default
return true;
}

public List<String> getTasks() {
return new ArrayList<>(tasks.keySet());
}

public List<String> getCompletedTasks() {
List<String> completedTasks = new ArrayList<>();
for (String key : tasks.keySet()) {
if (tasks.get(key)) {
completedTasks.add(key);
}
}
return completedTasks;
}

public List<String> getIncompleteTasks() {
List<String> incompleteTasks = new ArrayList<>();
for (String key : tasks.keySet()) {
if (!tasks.get(key)) {
incompleteTasks.add(key);
}
}
return incompleteTasks;
}

public Boolean changeTaskStatus(String taskName) {
taskName = taskName.strip().toLowerCase();
if (taskName.isBlank())
return false;

for (String key : tasks.keySet()) {
if (taskName.equals(key.toLowerCase())) {
tasks.put(key, !tasks.get(key));
return true;
}
}
return false;
}

public List<String> searchTask(String searchString) {
List<String> searchResults = new ArrayList<>();

for (String key : tasks.keySet()) {
if (key.toLowerCase().contains(searchString)) {
searchResults.add(key);
}
}

if (searchResults.isEmpty()) {
searchResults.add("No tasks found");
}

return searchResults;
}

public Boolean removeTask(String taskName) {
taskName = taskName.strip().toLowerCase();
if (taskName.isBlank()) {
return false;
}

for (String key : tasks.keySet()) {
if (taskName.equals(key.toLowerCase())) {
tasks.remove(key);
return true;
}
}
return false;
}

public List<String> getAllTasksOrdered(boolean descending) {

List<String> sortedTasks = new ArrayList<>(tasks.keySet());

if (!descending) {
return sortedTasks.stream().sorted().toList();
} else {
return sortedTasks.stream().sorted().toList().reversed();
}
}

}
49 changes: 49 additions & 0 deletions src/main/java/com/booleanuk/extension/Task.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.booleanuk.extension;

import java.time.LocalDateTime;

public class Task {
private int id;
private String name;
private boolean completed;
private LocalDateTime creationDate;

public Task(int id, String name, boolean completed, LocalDateTime creationDate) {
this.id = id;
this.name = name;
this.completed = completed;
this.creationDate = creationDate;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public boolean isCompleted() {
return completed;
}

public void setCompleted(boolean completionStatus) {
this.completed = completionStatus;
}

public LocalDateTime getCreationDate() {
return creationDate;
}

public void setCreationDate(LocalDateTime creationDate) {
this.creationDate = creationDate;
}
}
46 changes: 46 additions & 0 deletions src/main/java/com/booleanuk/extension/TodoListExtension.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.booleanuk.extension;

import java.time.LocalDateTime;
import java.util.List;

public class TodoListExtension {

List<Task> tasks;

public TodoListExtension(List<Task> tasks) {
this.tasks = tasks;
}

public String searchTaskById(int taskId) {
return tasks.stream()
.filter(t -> t.getId() == taskId)
.findFirst()
.map(Task::getName)
.orElse("No task found");
}

public Boolean updateTaskNameById(int taskId, String newName) {
return tasks.stream()
.filter(t -> t.getId() == taskId)
.findFirst()
.map(t -> { t.setName(newName); return true;})
.orElse(false);
}

public Boolean changeTaskStatusById(int taskId) {
return tasks.stream()
.filter(t -> t.getId() == taskId)
.findFirst()
.map(t -> {t.setCompleted(!t.isCompleted()); return true;})
.orElse(false);
}

public LocalDateTime getTaskCreationDate(int taskId) {
return tasks.stream()
.filter(t -> t.getId() == taskId)
.findFirst()
.map(Task::getCreationDate)
.orElse(null);
}

}
Loading
Loading