feature/tasks/enum-status-and-idgen #19

Merged
KamaSK merged 3 commits from feature/tasks/enum-status-and-idgen into main 2025-05-20 20:52:26 +03:00
3 changed files with 129 additions and 79 deletions
Showing only changes of commit 2db26eb77a - Show all commits

View File

@ -9,7 +9,7 @@ class Task {
private int id; private int id;
private String title; private String title;
private String description; private String description;
private boolean completed; private TaskStatus status;
private LocalDate createdAt; private LocalDate createdAt;
static { static {
@ -19,6 +19,7 @@ class Task {
{ {
id = ++nextId; id = ++nextId;
status = TaskStatus.NEW;
createdAt = LocalDate.now(); createdAt = LocalDate.now();
taskCount++; taskCount++;
} }
@ -32,17 +33,36 @@ class Task {
System.out.println("Колличество дел: " + taskCount); System.out.println("Колличество дел: " + taskCount);
} }
void printInfo() { boolean isCompleted() {
String stringCompleted = completed ? "[х]" : "[ ]"; return status == TaskStatus.COMPLETED;
System.out.printf("%-3d | %-20s | %s\n", id, title, stringCompleted);
} }
void printInfo(boolean full) { void markCompleted() {
if (!full) { status = TaskStatus.COMPLETED;
printInfo();
return;
} }
void markInProgress() {
status = TaskStatus.IN_PROGRESS;
}
void markCanceled() {
status = TaskStatus.CANCELLED;
}
int getId() {
return id;
}
String getTitle() {
return title;
}
TaskStatus getStatus() {
return status;
}
static class TaskPrinter {
static void print(Task task) {
String template = """ String template = """
@ -55,29 +75,8 @@ class Task {
"""; """;
; ;
String stringCompleted = completed ? "выполнено" : "не выполнено"; String stringCompleted = task.status.getColorCode() + task.status.getDescription() + "\u001B[0m";
System.out.printf(template, id, createdAt, stringCompleted, title, description); System.out.printf(template, task.id, task.createdAt, stringCompleted, task.title, task.description);
}
void toggleCompleted() {
completed = !completed;
}
int getId() {
return id;
}
String getTitle() {
return title;
}
boolean getCompleted() {
return completed;
}
static class TaskPrinter {
void print(Task task) {
task.printInfo(true);
} }
} }

View File

@ -1,25 +1,25 @@
package ru.kamask.pet; package ru.kamask.pet;
public enum TaskStatus { public enum TaskStatus {
NEW("Новое") { NEW("новое") {
@Override
String getColorCode() {
return "\u001B[32m";
}
},
IN_PROGRESS("В работе") {
@Override
String getColorCode() {
return "\u001B[35m";
}
},
COMPLETED("Сделано") {
@Override @Override
String getColorCode() { String getColorCode() {
return "\u001B[34m"; return "\u001B[34m";
} }
}, },
CANCELLED("Отменено") { IN_PROGRESS("в работе") {
@Override
String getColorCode() {
return "\u001B[35m";
}
},
COMPLETED("сделано") {
@Override
String getColorCode() {
return "\u001B[32m";
}
},
CANCELLED("отменено") {
@Override @Override
String getColorCode() { String getColorCode() {
return "\u001B[31m"; return "\u001B[31m";

View File

@ -14,11 +14,7 @@ public class TodoApp {
TodoApp app = new TodoApp(); TodoApp app = new TodoApp();
taskManager = app.new TaskManager(); taskManager = app.new TaskManager();
TaskStatus status = TaskStatus.valueOf("NEW"); app.run();
System.out.println(status.getDescription());
// app.run();
} }
@ -73,14 +69,32 @@ public class TodoApp {
} }
private static void displayTask(Task task) { private static void displayTask(Task task) {
task.printInfo(true); Task.TaskPrinter.print(task);
String firstOption = task.getCompleted() ? "[1]Не выполнено" : "[1]Выполнено";
int input = requestIntFromInput(firstOption + " [0]Главное меню\n\nВвод:", String firstOption = switch (task.getStatus()) {
new int[] { 0, 1 }); case NEW, CANCELLED -> "Начать";
if (input == 1) { case IN_PROGRESS -> "Выполнено";
task.toggleCompleted(); case COMPLETED -> "Доделать";
displayTask(task); };
int input = requestIntFromInput("[1]" + firstOption + " [2]Отменить [0]Главное меню\n\nВвод:",
new int[] { 0, 1, 2 });
switch (input) {
case 0:
return;
case 1: {
switch (task.getStatus()) {
case NEW, CANCELLED, COMPLETED -> taskManager.markInProgress(task.getId());
case IN_PROGRESS -> taskManager.markCompleted(task.getId());
} }
break;
}
case 2:
taskManager.markCanceled(task.getId());
}
displayTask(task);
} }
private static void displayTasks() { private static void displayTasks() {
@ -106,7 +120,7 @@ public class TodoApp {
"""); """);
printAll(tasks); taskManager.printTasks();
int[] variantsInput = new int[tasksCounter + 1]; int[] variantsInput = new int[tasksCounter + 1];
for (int i = 0; i < tasksCounter; i++) for (int i = 0; i < tasksCounter; i++)
@ -154,46 +168,83 @@ public class TodoApp {
} while (true); } while (true);
} }
private static void printAll(Task... tasks) {
for (Task t : tasks)
if (t != null)
t.printInfo();
}
private static boolean markTaskCompletedById(Task[] tasks, int id) {
for (Task t : tasks)
if (t != null && t.getId() == id) {
if (!t.getCompleted())
t.toggleCompleted();
return true;
}
return false;
}
private class TaskManager { private class TaskManager {
void addTask(Task task) { void addTask(Task task) {
tasks[tasksCounter++] = task; tasks[tasksCounter++] = task;
} }
void markCompleted(int id) { boolean markCompleted(int id) {
markTaskCompletedById(tasks, id); for (int i = 0; i < tasksCounter; i++)
if (tasks[i].getId() == id) {
TaskAction action = new TaskAction() {
@Override
public void execute(Task task) {
task.markCompleted();
}
};
action.execute(tasks[i]);
return true;
}
return false;
}
boolean markInProgress(int id) {
for (int i = 0; i < tasksCounter; i++)
if (tasks[i].getId() == id) {
TaskAction action = new TaskAction() {
@Override
public void start(Task task) {
task.markInProgress();
}
};
action.start(tasks[i]);
return true;
}
return false;
}
boolean markCanceled(int id) {
for (int i = 0; i < tasksCounter; i++)
if (tasks[i].getId() == id) {
TaskAction action = new TaskAction() {
@Override
public void cancel(Task task) {
task.markCanceled();
}
};
action.cancel(tasks[i]);
return true;
}
return false;
} }
void printTasks() { void printTasks() {
class ShortTaskPrinter { class ShortTaskPrinter {
void print(Task task) { void print(Task task) {
System.out.printf("%-3s | %s\n", task.getId(), task.getTitle()); int id = task.getId();
String title = task.getTitle();
TaskStatus status = task.getStatus();
String stringCompleted = status.getColorCode() + status.getDescription() + "\u001B[0m";
System.out.printf("%-3d | %-20s | %s\n", id, title, stringCompleted);
} }
} }
ShortTaskPrinter p = new ShortTaskPrinter(); ShortTaskPrinter printer = new ShortTaskPrinter();
for (int i = 0; i < Task.taskCount; i++) for (int i = 0; i < Task.taskCount; i++)
p.print(tasks[i]); printer.print(tasks[i]);
} }
} }
interface TaskAction { interface TaskAction {
void execute(Task task); default void execute(Task task) {
};
default void start(Task task) {
};
default void cancel(Task task) {
};
} }
} }