From 93a4e37f436d5908e716e88f0171f38c8101728b Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Mon, 3 Feb 2025 23:39:58 +0500 Subject: [PATCH 01/18] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8F=20duration,=20startTime,=20endTime=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D1=81=20Task?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tasks/Task.java | 49 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/src/tasks/Task.java b/src/tasks/Task.java index 640a8cf..e3e59fd 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -2,6 +2,8 @@ import statuses.StatusTask; +import java.time.Duration; +import java.time.LocalDateTime; import java.util.Objects; public class Task { @@ -10,6 +12,26 @@ public class Task { protected StatusTask status; protected int id; protected TaskType type = TaskType.TASK; + protected Duration duration; + protected LocalDateTime startTime; + protected LocalDateTime endTime; + + public Task(String name, String description, StatusTask status, int id, Duration duration, LocalDateTime startTime) { + this.name = name; + this.description = description; + this.status = status; + this.id = id; + this.duration = duration; + this.startTime = startTime; + } + + public Task(String name, String description, StatusTask status, Duration duration, LocalDateTime startTime) { + this.name = name; + this.description = description; + this.status = status; + this.duration = duration; + this.startTime = startTime; + } public Task(String name, String description, StatusTask status, int id) { this.name = name; @@ -18,6 +40,23 @@ public Task(String name, String description, StatusTask status, int id) { this.id = id; } + public Task(String name, String description, int id, Duration duration, LocalDateTime startTime) { + this.name = name; + this.description = description; + this.id = id; + this.status = StatusTask.NEW; + this.duration = duration; + this.startTime = startTime; + } + + public Task(String name, String description, Duration duration, LocalDateTime startTime) { + this.name = name; + this.description = description; + this.status = StatusTask.NEW; + this.duration = duration; + this.startTime = startTime; + } + public Task(String name, String description, StatusTask status) { this.name = name; this.description = description; @@ -77,7 +116,9 @@ public static Task fromString(String value) { @Override public String toString() { - return String.format("%d,%s,%s,%s,%s,", id, type, name, status, description); + // TODO: Поработать над форматом вывода duration, startTime, endTime + return String.format("%d,%s,%s,%s,%s,%s,%s,%s,", id, type, name, status, description, duration, startTime, + endTime); } @Override @@ -86,11 +127,13 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; Task task = (Task) o; if (id == task.id) return true; - return Objects.equals(name, task.name) && Objects.equals(description, task.description) && status == task.status; + return Objects.equals(name, task.name) && Objects.equals(description, task.description) && status == task.status + && Objects.equals(duration, task.duration) && Objects.equals(startTime, task.startTime) + && Objects.equals(endTime, task.endTime); } @Override public int hashCode() { - return Objects.hash(name, description, status, id); + return Objects.hash(name, description, status, id, duration, startTime, endTime); } } From 8bd6373a42dc352a89d2f12b979874e521152091 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Tue, 4 Feb 2025 17:13:17 +0500 Subject: [PATCH 02/18] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B2=20subtask,=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8,=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tasks/Subtask.java | 38 ++++++++++++++++++++++++++++++++------ src/tasks/Task.java | 14 ++++++++++++-- test/SubtaskTest.java | 16 ++++++++++++---- test/TaskTest.java | 14 +++++++++++--- 4 files changed, 67 insertions(+), 15 deletions(-) diff --git a/src/tasks/Subtask.java b/src/tasks/Subtask.java index 2644e9b..765c267 100644 --- a/src/tasks/Subtask.java +++ b/src/tasks/Subtask.java @@ -2,10 +2,35 @@ import statuses.StatusTask; +import java.time.Duration; +import java.time.LocalDateTime; + public class Subtask extends Task { protected TaskType type = TaskType.SUBTASK; private int epicId; + public Subtask(String name, String description, StatusTask status, int epicId, int id, Duration duration, + LocalDateTime startTime) { + super(name, description, status, id, duration, startTime); + this.epicId = epicId; + } + + public Subtask(String name, String description, StatusTask status, int epicId, Duration duration, + LocalDateTime startTime) { + super(name, description, status, duration, startTime); + this.epicId = epicId; + } + + public Subtask(String name, String description, int epicId, Duration duration, LocalDateTime startTime) { + super(name, description, duration, startTime); + this.epicId = epicId; + } + + public Subtask(String name, String description, int epicId, int id, Duration duration, LocalDateTime startTime) { + super(name, description, id, duration, startTime); + this.epicId = epicId; + } + public Subtask(String name, String description, StatusTask status, int epicId, int id) { super(name, description, status, id); this.epicId = epicId; @@ -16,13 +41,13 @@ public Subtask(String name, String description, StatusTask status, int epicId) { this.epicId = epicId; } - public Subtask(String name, String description, int epicId) { - super(name, description); + public Subtask(String name, String description, int epicId, int id) { + super(name, description, id); this.epicId = epicId; } - public Subtask(String name, String description, int epicId, int id) { - super(name, description, id); + public Subtask(String name, String description, int epicId) { + super(name, description); this.epicId = epicId; } @@ -37,11 +62,12 @@ public void setEpicId(int epicId) { public static Subtask fromString(String value) { String[] taskInfo = value.split(","); return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), - Integer.parseInt(taskInfo[0])); + Integer.parseInt(taskInfo[0]), Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); } @Override public String toString() { - return String.format("%d,%s,%s,%s,%s,%d", id, type, name, status, description, epicId); + return String.format("%d,%s,%s,%s,%s,%d,%s,%s,%s", id, type, name, status, description, epicId, duration, + startTime, endTime); } } diff --git a/src/tasks/Task.java b/src/tasks/Task.java index e3e59fd..644a676 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -3,6 +3,7 @@ import statuses.StatusTask; import java.time.Duration; +import java.time.Instant; import java.time.LocalDateTime; import java.util.Objects; @@ -23,6 +24,7 @@ public Task(String name, String description, StatusTask status, int id, Duration this.id = id; this.duration = duration; this.startTime = startTime; + this.endTime = startTime.plus(duration); } public Task(String name, String description, StatusTask status, Duration duration, LocalDateTime startTime) { @@ -31,6 +33,7 @@ public Task(String name, String description, StatusTask status, Duration duratio this.status = status; this.duration = duration; this.startTime = startTime; + this.endTime = startTime.plus(duration); } public Task(String name, String description, StatusTask status, int id) { @@ -47,6 +50,7 @@ public Task(String name, String description, int id, Duration duration, LocalDat this.status = StatusTask.NEW; this.duration = duration; this.startTime = startTime; + this.endTime = startTime.plus(duration); } public Task(String name, String description, Duration duration, LocalDateTime startTime) { @@ -55,6 +59,7 @@ public Task(String name, String description, Duration duration, LocalDateTime st this.status = StatusTask.NEW; this.duration = duration; this.startTime = startTime; + this.endTime = startTime.plus(duration); } public Task(String name, String description, StatusTask status) { @@ -92,6 +97,10 @@ public int getId() { return id; } + public LocalDateTime getEndTime() { + return endTime; + } + public void setName(String name) { this.name = name; } @@ -111,13 +120,14 @@ public void setStatus(StatusTask status) { public static Task fromString(String value) { String[] taskInfo = value.split(","); - return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0])); + return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); } @Override public String toString() { // TODO: Поработать над форматом вывода duration, startTime, endTime - return String.format("%d,%s,%s,%s,%s,%s,%s,%s,", id, type, name, status, description, duration, startTime, + return String.format("%d,%s,%s,%s,%s,,%s,%s,%s", id, type, name, status, description, duration, startTime, endTime); } diff --git a/test/SubtaskTest.java b/test/SubtaskTest.java index 910c591..26aba28 100644 --- a/test/SubtaskTest.java +++ b/test/SubtaskTest.java @@ -5,25 +5,33 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + public class SubtaskTest { Subtask subtask; Epic epic; + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), + LocalTime.of(10,0)); @BeforeEach void setUp() { epic = new Epic("TestEpic", "TestDescription", 1); - subtask = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 1, 2); + subtask = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 1, 2, duration1, startTime1); } @Test void subtaskToString() { - Assertions.assertEquals("2,SUBTASK,TestSubtask1,NEW,TestDescription1,1", subtask.toString()); + Assertions.assertEquals("2,SUBTASK,TestSubtask1,NEW,TestDescription1,1,PT1H40M,2025-02-04T10:00,2025-02-04T11:40", subtask.toString()); } @Test void subtaskFromString() { - Subtask subtask1 = Subtask.fromString("2,SUBTASK,TestSubtask1,NEW,TestDescription1,1"); - Subtask subtask2 = Subtask.fromString("5,SUBTASK,TestSubtask5,NEW,TestDescription,1"); + Subtask subtask1 = Subtask.fromString("2,SUBTASK,TestSubtask1,NEW,TestDescription1,1,PT1H40M,2025-02-04T10:00"); + Subtask subtask2 = Subtask.fromString("5,SUBTASK,TestSubtask5,NEW,TestDescription,1,PT1H40M,2025-02-04T10:00"); Assertions.assertEquals(subtask, subtask1); Assertions.assertNotEquals(subtask, subtask2); } diff --git a/test/TaskTest.java b/test/TaskTest.java index 23402bc..8d09f21 100644 --- a/test/TaskTest.java +++ b/test/TaskTest.java @@ -4,6 +4,11 @@ import statuses.StatusTask; import tasks.*; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + public class TaskTest { Task task1; Task task2; @@ -14,11 +19,14 @@ public class TaskTest { Epic epic1; Epic epic2; Epic epic3; + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), + LocalTime.of(10,0)); @BeforeEach void setUp() { - task1 = new Task("TestName1", "TestDescription1", StatusTask.NEW, 1); + task1 = new Task("TestName1", "TestDescription1", StatusTask.NEW, 1, duration1, startTime1); task2 = new Task("TestName2", "TestDescription2", StatusTask.NEW, 2); task3 = new Task("TestName3", "TestDescription3", StatusTask.NEW, 1); subtask1 = new Subtask("TestName1", "TestDescription1", StatusTask.NEW, 0, 3); @@ -45,12 +53,12 @@ void shouldNotEqualsIsDifferentIds() { @Test void taskToString() { - Assertions.assertEquals("1,TASK,TestName1,NEW,TestDescription1,", task1.toString()); + Assertions.assertEquals("1,TASK,TestName1,NEW,TestDescription1,,PT1H40M,2025-02-04T10:00,2025-02-04T11:40", task1.toString()); } @Test void taskFromString() { - Task task = Task.fromString("1,TASK,TestName1,NEW,TestDescription1,"); + Task task = Task.fromString("1,TASK,TestName1,NEW,TestDescription1,,PT1H40M,2025-02-04T10:00"); Assertions.assertEquals(task1, task); Assertions.assertNotEquals(task2, task); } From 35a6e17660ddf41270ebe5c9be446b56c4264307 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Tue, 4 Feb 2025 23:38:40 +0500 Subject: [PATCH 03/18] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=D1=81=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82?= =?UTF-8?q?=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=D1=8B=20=D0=B2=20=D1=82?= =?UTF-8?q?=D0=B0=D1=81=D0=BA=D0=B0=D1=85,=20=D1=82=D0=B0=D0=BA=20=D0=B6?= =?UTF-8?q?=D0=B5=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20=D1=85?= =?UTF-8?q?=D1=8D=D0=B4=D0=B5=D1=80=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=B0=20=D0=B2=20=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=B4=D0=B6=D0=B5=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.java | 399 ++++++++++++------------ src/managers/FileBackedTaskManager.java | 4 +- src/tasks/Epic.java | 22 +- src/tasks/Subtask.java | 20 -- src/tasks/Task.java | 26 -- 5 files changed, 216 insertions(+), 255 deletions(-) diff --git a/src/Main.java b/src/Main.java index 381251a..c35995b 100644 --- a/src/Main.java +++ b/src/Main.java @@ -5,6 +5,8 @@ import util.Managers; import java.io.File; +import java.time.Duration; +import java.time.LocalDateTime; public class Main { @@ -17,182 +19,182 @@ public static void main(String[] args) { // printWorkingExampleFromFile(file); } - private static void printWorkingExample(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); - manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); - manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); - manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); - manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); - manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); - manager.addEpic(new Epic("Покрасить волосы", "На праздник")); - manager.addSubtask(new Subtask("Купить краску", "Для выступления", 7)); - System.out.println("Задачи: "); - for (Task task : manager.getTasks()) { - System.out.println(task); - } - System.out.println("Эпики:"); - for (Epic epic : manager.getEpics()) { - System.out.println(epic); - } - System.out.println("Подазадачи эпика - Написать курсовую работу"); - for (Subtask subtask : manager.getEpicSubtasks(2)) { - System.out.println(subtask); - } - System.out.println("Подзадачи эпика - Покрасить волосы"); - for (Subtask subtask : manager.getEpicSubtasks(7)) { - System.out.println(subtask); - } - - manager.updateSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", StatusTask.DONE, 2, 3)); - manager.updateSubtask(new Subtask("Купить краску", "Для выступления", StatusTask.IN_PROGRESS, 7, 8)); - manager.deleteSubtask(4); - System.out.println(); - System.out.println("После выполнения работ!"); - System.out.println("Эпики:"); - for (Epic epic : manager.getEpics()) { - System.out.println(epic); - } - System.out.println("Подазадачи эпика - Написать курсовую работу"); - for (Subtask subtask : manager.getEpicSubtasks(2)) { - System.out.println(subtask); - } - System.out.println("Подзадачи эпика - Покрасить волосы"); - for (Subtask subtask : manager.getEpicSubtasks(7)) { - System.out.println(subtask); - } - - System.out.println("Обновляем эпик"); - manager.updateEpic(new Epic("Покрасить волосы", "На праздник (обновлен)", 7)); - for (Epic epic : manager.getEpics()) { - System.out.println(epic); - } - System.out.println("Подзадачи эпика - Покрасить волосы"); - for (Subtask subtask : manager.getEpicSubtasks(7)) { - System.out.println(subtask); - } - } - - private static void printAllTasks(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); - manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); - manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); - manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); - manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); - manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); - manager.addEpic(new Epic("Покрасить волосы", "На праздник")); - manager.addSubtask(new Subtask("Купить краску", "Для выступления", 7)); - System.out.println("Задачи:"); - for (Task task : manager.getTasks()) { - System.out.println(task); - } - System.out.println("Эпики:"); - for (Task epic : manager.getEpics()) { - System.out.println(epic); - - for (Task task : manager.getEpicSubtasks(epic.getId())) { - System.out.println("--> " + task); - } - } - System.out.println("Подзадачи:"); - for (Task subtask : manager.getSubtasks()) { - System.out.println(subtask); - } - - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - } - - private static void printHistoryWorkExample(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); - manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); - manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); - manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); - manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); - manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); - manager.getTask(1); - manager.getTask(1); - manager.getTask(1); - manager.getEpic(2); - manager.getSubtask(3); - manager.getEpic(2); - manager.getSubtask(3); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - } - - private static void printHistoryDeleteTaskWorkExample(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); - - manager.addTask(new Task("Сделать ДЗ", "Сделать ДЗ за 1 час")); - manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); - manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 3)); - manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 3)); - manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 3)); - manager.addEpic(new Epic("Сделать проект по 6 спринту яндекс", "Выполнить все подзадачи")); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getTask(2); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getEpic(3); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getEpic(7); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getTask(1); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getSubtask(4); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getSubtask(6); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getEpic(2); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - - manager.deleteTask(1); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.deleteEpic(3); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - } +// private static void printWorkingExample(TaskManager manager) { +// manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); +// manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); +// manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); +// manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); +// manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); +// manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); +// manager.addEpic(new Epic("Покрасить волосы", "На праздник")); +// manager.addSubtask(new Subtask("Купить краску", "Для выступления", 7)); +// System.out.println("Задачи: "); +// for (Task task : manager.getTasks()) { +// System.out.println(task); +// } +// System.out.println("Эпики:"); +// for (Epic epic : manager.getEpics()) { +// System.out.println(epic); +// } +// System.out.println("Подазадачи эпика - Написать курсовую работу"); +// for (Subtask subtask : manager.getEpicSubtasks(2)) { +// System.out.println(subtask); +// } +// System.out.println("Подзадачи эпика - Покрасить волосы"); +// for (Subtask subtask : manager.getEpicSubtasks(7)) { +// System.out.println(subtask); +// } +// +// manager.updateSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", StatusTask.DONE, 2, 3)); +// manager.updateSubtask(new Subtask("Купить краску", "Для выступления", StatusTask.IN_PROGRESS, 7, 8)); +// manager.deleteSubtask(4); +// System.out.println(); +// System.out.println("После выполнения работ!"); +// System.out.println("Эпики:"); +// for (Epic epic : manager.getEpics()) { +// System.out.println(epic); +// } +// System.out.println("Подазадачи эпика - Написать курсовую работу"); +// for (Subtask subtask : manager.getEpicSubtasks(2)) { +// System.out.println(subtask); +// } +// System.out.println("Подзадачи эпика - Покрасить волосы"); +// for (Subtask subtask : manager.getEpicSubtasks(7)) { +// System.out.println(subtask); +// } +// +// System.out.println("Обновляем эпик"); +// manager.updateEpic(new Epic("Покрасить волосы", "На праздник (обновлен)", 7)); +// for (Epic epic : manager.getEpics()) { +// System.out.println(epic); +// } +// System.out.println("Подзадачи эпика - Покрасить волосы"); +// for (Subtask subtask : manager.getEpicSubtasks(7)) { +// System.out.println(subtask); +// } +// } +// +// private static void printAllTasks(TaskManager manager) { +// manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); +// manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); +// manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); +// manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); +// manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); +// manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); +// manager.addEpic(new Epic("Покрасить волосы", "На праздник")); +// manager.addSubtask(new Subtask("Купить краску", "Для выступления", 7)); +// System.out.println("Задачи:"); +// for (Task task : manager.getTasks()) { +// System.out.println(task); +// } +// System.out.println("Эпики:"); +// for (Task epic : manager.getEpics()) { +// System.out.println(epic); +// +// for (Task task : manager.getEpicSubtasks(epic.getId())) { +// System.out.println("--> " + task); +// } +// } +// System.out.println("Подзадачи:"); +// for (Task subtask : manager.getSubtasks()) { +// System.out.println(subtask); +// } +// +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// } +// +// private static void printHistoryWorkExample(TaskManager manager) { +// manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); +// manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); +// manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); +// manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); +// manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); +// manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); +// manager.getTask(1); +// manager.getTask(1); +// manager.getTask(1); +// manager.getEpic(2); +// manager.getSubtask(3); +// manager.getEpic(2); +// manager.getSubtask(3); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// } +// +// private static void printHistoryDeleteTaskWorkExample(TaskManager manager) { +// manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); +// +// manager.addTask(new Task("Сделать ДЗ", "Сделать ДЗ за 1 час")); +// manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); +// manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 3)); +// manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 3)); +// manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 3)); +// manager.addEpic(new Epic("Сделать проект по 6 спринту яндекс", "Выполнить все подзадачи")); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getTask(2); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getEpic(3); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getEpic(7); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getTask(1); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getSubtask(4); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getSubtask(6); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getEpic(2); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// +// manager.deleteTask(1); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.deleteEpic(3); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// } private static void printWorkingExampleWithFile(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); - manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); - manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); - manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); - manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); - manager.addEpic(new Epic("Покрасить волосы", "На праздник")); - manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 6)); + manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут", Duration.ofMinutes(100), LocalDateTime.now())); + manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг", Duration.ofMinutes(100), LocalDateTime.now())); + manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2, Duration.ofMinutes(150), LocalDateTime.now())); + manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2, Duration.ofMinutes(180), LocalDateTime.now())); + manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2, Duration.ofMinutes(120), LocalDateTime.now())); + manager.addEpic(new Epic("Покрасить волосы", "На праздник", Duration.ofMinutes(100), LocalDateTime.now())); + manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 6, Duration.ofMinutes(60), LocalDateTime.now())); System.out.println("Задачи:"); for (Task task : manager.getTasks()) { System.out.println(task); @@ -205,8 +207,7 @@ private static void printWorkingExampleWithFile(TaskManager manager) { for (Subtask subtask : manager.getSubtasks()) { System.out.println(subtask); } - manager.updateTask(new Task("Выгулять псину", "Погулять с Джеком 40 минут", 1)); - manager.updateSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", StatusTask.DONE, 2, 3)); + manager.updateSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", StatusTask.DONE, 2, 3, Duration.ofMinutes(150), LocalDateTime.now())); System.out.println("После выполнения работ:"); System.out.println("Задачи:"); for (Task task : manager.getTasks()) { @@ -222,7 +223,7 @@ private static void printWorkingExampleWithFile(TaskManager manager) { } manager.deleteSubtask(3); manager.deleteEpic(2); - manager.updateSubtask(new Subtask("Оформить реферат", "Для выступления", StatusTask.DONE, 6, 7)); + manager.updateSubtask(new Subtask("Оформить реферат", "Для выступления", StatusTask.DONE, 6, 7, Duration.ofMinutes(60), LocalDateTime.now())); System.out.println("После выполнения работ:"); System.out.println("Задачи:"); for (Task task : manager.getTasks()) { @@ -238,26 +239,26 @@ private static void printWorkingExampleWithFile(TaskManager manager) { } } - private static void printWorkingExampleFromFile(File file) { - FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(file); - System.out.println("Задачи:"); - for (Task task : manager.getTasks()) { - System.out.println(task); - } - System.out.println("Эпики:"); - for (Epic epic : manager.getEpics()) { - System.out.println(epic); - } - System.out.println("Подзадачи:"); - for (Subtask subtask : manager.getSubtasks()) { - System.out.println(subtask); - } - manager.addTask(new Task("Тест1", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест2", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест3", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест4", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест5", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест6", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест7", "Погулять с Джеком 20 минут")); - } +// private static void printWorkingExampleFromFile(File file) { +// FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(file); +// System.out.println("Задачи:"); +// for (Task task : manager.getTasks()) { +// System.out.println(task); +// } +// System.out.println("Эпики:"); +// for (Epic epic : manager.getEpics()) { +// System.out.println(epic); +// } +// System.out.println("Подзадачи:"); +// for (Subtask subtask : manager.getSubtasks()) { +// System.out.println(subtask); +// } +// manager.addTask(new Task("Тест1", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест2", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест3", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест4", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест5", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест6", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест7", "Погулять с Джеком 20 минут")); +// } } diff --git a/src/managers/FileBackedTaskManager.java b/src/managers/FileBackedTaskManager.java index 1ff4866..db61ce2 100644 --- a/src/managers/FileBackedTaskManager.java +++ b/src/managers/FileBackedTaskManager.java @@ -105,7 +105,7 @@ public static FileBackedTaskManager loadFromFile(File file) throws ManagerLoadFr try (BufferedReader buffer = new BufferedReader(new FileReader(file))) { FileBackedTaskManager manager = new FileBackedTaskManager(); ArrayList tasks = new ArrayList<>(buffer.lines().toList()); - String header = "id,type,name,status,description,epic"; + String header = "id,type,name,status,description,epic,duration,start_time,end_time"; tasks.remove(header); for (String task : tasks) { String[] taskInfo = task.split(","); @@ -132,7 +132,7 @@ public static FileBackedTaskManager loadFromFile(File file) throws ManagerLoadFr private void save() throws ManagerSaveException { try (FileWriter writer = new FileWriter(managerFile)) { - String header = "id,type,name,status,description,epic\n"; + String header = "id,type,name,status,description,epic,duration,start_time,end_time\n"; writer.write(header); for (Task task : getTasks()) { writer.write(String.format("%s\n", task.toString())); diff --git a/src/tasks/Epic.java b/src/tasks/Epic.java index 4a2a247..8a92f8b 100644 --- a/src/tasks/Epic.java +++ b/src/tasks/Epic.java @@ -2,24 +2,28 @@ import statuses.StatusTask; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.ArrayList; public class Epic extends Task { protected TaskType type = TaskType.EPIC; private ArrayList subtasks; - public Epic(String name, String description, StatusTask status, int id) { - super(name, description, status, id); + public Epic(String name, String description, StatusTask status, int id, Duration duration, + LocalDateTime startTime) { + super(name, description, status, id, duration, startTime); this.subtasks = new ArrayList<>(); } - public Epic(String name, String description, int id) { - super(name, description, id); + public Epic(String name, String description, int id, Duration duration, LocalDateTime startTime) { + super(name, description, id, duration, startTime); this.subtasks = new ArrayList<>(); } - public Epic(String name, String description) { - super(name, description); + public Epic(String name, String description, Duration duration, LocalDateTime startTime) { + super(name, description, duration, startTime); this.subtasks = new ArrayList<>(); } @@ -50,12 +54,14 @@ public void setSubtasks(ArrayList subtasks) { public static Epic fromString(String value) { String[] taskInfo = value.split(","); - return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0])); + return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); } @Override public String toString() { - return String.format("%d,%s,%s,%s,%s,", id, type, name, status, description); + return String.format("%d,%s,%s,%s,%s,,%s,%s,%s", id, type, name, status, description, duration, startTime, + endTime); } private boolean checkNotContainsSubtask(Subtask subtask) { diff --git a/src/tasks/Subtask.java b/src/tasks/Subtask.java index 765c267..44e1acb 100644 --- a/src/tasks/Subtask.java +++ b/src/tasks/Subtask.java @@ -31,26 +31,6 @@ public Subtask(String name, String description, int epicId, int id, Duration dur this.epicId = epicId; } - public Subtask(String name, String description, StatusTask status, int epicId, int id) { - super(name, description, status, id); - this.epicId = epicId; - } - - public Subtask(String name, String description, StatusTask status, int epicId) { - super(name, description, status); - this.epicId = epicId; - } - - public Subtask(String name, String description, int epicId, int id) { - super(name, description, id); - this.epicId = epicId; - } - - public Subtask(String name, String description, int epicId) { - super(name, description); - this.epicId = epicId; - } - public int getEpicId() { return epicId; } diff --git a/src/tasks/Task.java b/src/tasks/Task.java index 644a676..4b940ea 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -36,13 +36,6 @@ public Task(String name, String description, StatusTask status, Duration duratio this.endTime = startTime.plus(duration); } - public Task(String name, String description, StatusTask status, int id) { - this.name = name; - this.description = description; - this.status = status; - this.id = id; - } - public Task(String name, String description, int id, Duration duration, LocalDateTime startTime) { this.name = name; this.description = description; @@ -62,25 +55,6 @@ public Task(String name, String description, Duration duration, LocalDateTime st this.endTime = startTime.plus(duration); } - public Task(String name, String description, StatusTask status) { - this.name = name; - this.description = description; - this.status = status; - } - - public Task(String name, String description, int id) { - this.name = name; - this.description = description; - this.id = id; - this.status = StatusTask.NEW; - } - - public Task(String name, String description) { - this.name = name; - this.description = description; - this.status = StatusTask.NEW; - } - public String getName() { return name; } From c74fb198b719c56db406dcbb3253111e008fe90b Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Wed, 5 Feb 2025 09:59:41 +0500 Subject: [PATCH 04/18] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B2=20=D1=81?= =?UTF-8?q?=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=81=D1=82=D0=B2=D0=B8=D0=B8=20?= =?UTF-8?q?=D1=81=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/EpicTest.java | 16 +++- test/FileBackendTaskManagerTest.java | 49 +++++++----- test/InMemoryHistoryManagerTest.java | 32 +++++--- test/InMemoryTaskManagerTest.java | 111 ++++++++++++++------------- test/ManagersTest.java | 16 +++- test/SubtaskTest.java | 2 +- test/TaskTest.java | 16 ++-- 7 files changed, 140 insertions(+), 102 deletions(-) diff --git a/test/EpicTest.java b/test/EpicTest.java index 965f382..0b0ee1d 100644 --- a/test/EpicTest.java +++ b/test/EpicTest.java @@ -5,19 +5,27 @@ import tasks.Epic; import tasks.Subtask; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + public class EpicTest { Epic epic; Subtask subtask1; Subtask subtask2; Subtask subtask3; + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), + LocalTime.of(10,0)); @BeforeEach void setUp() { - epic = new Epic("TestEpic", "TestDescription", 1); - subtask1 = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 0, 2); - subtask2 = new Subtask("TestSubtask2", "TestDescription2", StatusTask.DONE, 0, 3); - subtask3 = new Subtask("TestSubtask3", "TestDescription3", StatusTask.IN_PROGRESS, 0, 4); + epic = new Epic("TestEpic", "TestDescription", 1, duration1, startTime1); + subtask1 = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 0, 2, duration1, startTime1); + subtask2 = new Subtask("TestSubtask2", "TestDescription2", StatusTask.DONE, 0, 3, duration1, startTime1); + subtask3 = new Subtask("TestSubtask3", "TestDescription3", StatusTask.IN_PROGRESS, 0, 4, duration1, startTime1); } @Test diff --git a/test/FileBackendTaskManagerTest.java b/test/FileBackendTaskManagerTest.java index 150f56d..59f7536 100644 --- a/test/FileBackendTaskManagerTest.java +++ b/test/FileBackendTaskManagerTest.java @@ -8,10 +8,14 @@ import tasks.Task; import java.io.*; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.ArrayList; public class FileBackendTaskManagerTest { - String header = "id,type,name,status,description,epic"; + String header = "id,type,name,status,description,epic,duration,start_time,end_time"; FileBackedTaskManager manager; File testTmpFile; Task task1; @@ -22,19 +26,22 @@ public class FileBackendTaskManagerTest { Subtask subtask1; Subtask subtask2; Subtask subtask3; + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), + LocalTime.of(10,0)); @BeforeEach public void setUp() throws IOException { testTmpFile = File.createTempFile("manager", ".csv"); manager = new FileBackedTaskManager(testTmpFile); - task1 = new Task("TestName1", "TestDescription1"); - task2 = new Task("TestName4", "TestDescription4"); - epic1 = new Epic("TestName2", "TestDescription2"); - epic2 = new Epic("TestName5", "TestDescription5"); - epic3 = new Epic("TestName6", "TestDescription6"); - subtask2 = new Subtask("TestName8", "TestDescription8", 4); - subtask3 = new Subtask("TestName9", "TestDescription9", 5); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", duration1, startTime1); + epic1 = new Epic("TestName2", "TestDescription2", duration1, startTime1); + epic2 = new Epic("TestName5", "TestDescription5", duration1, startTime1); + epic3 = new Epic("TestName6", "TestDescription6", duration1, startTime1); + subtask2 = new Subtask("TestName8", "TestDescription8", 4, duration1, startTime1); + subtask3 = new Subtask("TestName9", "TestDescription9", 5, duration1, startTime1); } @AfterEach @@ -61,7 +68,7 @@ public void loadManagerFromEmptyFile() { public void saveTasksFileFromManager() { manager.addTask(task1); manager.addEpic(epic1); - manager.addSubtask(new Subtask("TestName7", "TestDescription7", 2)); + manager.addSubtask(new Subtask("TestName7", "TestDescription7", 2, duration1, startTime1)); try (BufferedReader buffer = new BufferedReader(new FileReader(testTmpFile))) { ArrayList tasks = new ArrayList<>(buffer.lines().toList()); tasks.remove(header); @@ -79,10 +86,10 @@ public void saveTasksFileFromManager() { @Test public void loadTasksFromFileToManager() { - task1 = new Task("TestName1", "TestDescription1", 1); - task2 = new Task("TestName4", "TestDescription4", 2); - epic1 = new Epic("TestName2", "TestDescription2", 3); - subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4); + task1 = new Task("TestName1", "TestDescription1", 1, duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime1); + epic1 = new Epic("TestName2", "TestDescription2", 3, duration1, startTime1); + subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime1); try (FileWriter writer = new FileWriter(testTmpFile)) { writer.write(String.format("%s\n", header)); writer.write(String.format("%s\n", task1.toString())); @@ -102,10 +109,10 @@ public void loadTasksFromFileToManager() { @Test public void loadTasksFromFileToManagerAddOtherTasks() { - task1 = new Task("TestName1", "TestDescription1", 1); - task2 = new Task("TestName4", "TestDescription4", 2); - epic1 = new Epic("TestName2", "TestDescription2", 3); - subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4); + task1 = new Task("TestName1", "TestDescription1", 1, duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime1); + epic1 = new Epic("TestName2", "TestDescription2", 3, duration1, startTime1); + subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime1); try (FileWriter writer = new FileWriter(testTmpFile)) { writer.write(String.format("%s\n", header)); writer.write(String.format("%s\n", task1.toString())); @@ -117,10 +124,10 @@ public void loadTasksFromFileToManagerAddOtherTasks() { } FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(testTmpFile); - Task task3 = new Task("TestName1", "TestDescription1"); - Task task4 = new Task("TestName4", "TestDescription4"); - Epic epic4 = new Epic("TestName4", "TestDescription4"); - Subtask subtask4 = new Subtask("TestName8", "TestDescription8", 7); + Task task3 = new Task("TestName1", "TestDescription1", duration1, startTime1); + Task task4 = new Task("TestName4", "TestDescription4", duration1, startTime1); + Epic epic4 = new Epic("TestName4", "TestDescription4", duration1, startTime1); + Subtask subtask4 = new Subtask("TestName8", "TestDescription8", 7, duration1, startTime1); manager.addTask(task3); manager.addTask(task4); manager.addEpic(epic4); diff --git a/test/InMemoryHistoryManagerTest.java b/test/InMemoryHistoryManagerTest.java index 373780b..ce4d509 100644 --- a/test/InMemoryHistoryManagerTest.java +++ b/test/InMemoryHistoryManagerTest.java @@ -5,6 +5,11 @@ import org.junit.jupiter.api.Test; import tasks.*; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + public class InMemoryHistoryManagerTest { InMemoryHistoryManager manager; @@ -20,21 +25,24 @@ public class InMemoryHistoryManagerTest { static Subtask subtask10; static Subtask subtask11; static Subtask subtask12; + static Duration duration1 = Duration.ofMinutes(100); + static LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), + LocalTime.of(10,0)); @BeforeAll public static void setup() { - task1 = new Task("Task1", "Description1", 1); - task2 = new Task("Task2", "Description2", 2); - task3 = new Task("Task3", "Description3", 3); - epic4 = new Epic("Epic4", "Description4", 4); - epic5 = new Epic("Epic5", "Description5", 5); - epic6 = new Epic("Epic6", "Description6", 6); - subtask7 = new Subtask("Subtask7", "Description7", 4, 7); - subtask8 = new Subtask("Subtask8", "Description8", 5, 8); - subtask9 = new Subtask("Subtask9", "Description9", 6, 9); - subtask10 = new Subtask("Subtask10", "Description10", 4, 10); - subtask11 = new Subtask("Subtask11", "Description11", 5, 11); - subtask12 = new Subtask("Subtask12", "Description12", 6, 12); + task1 = new Task("Task1", "Description1", 1, duration1, startTime1); + task2 = new Task("Task2", "Description2", 2, duration1, startTime1); + task3 = new Task("Task3", "Description3", 3, duration1, startTime1); + epic4 = new Epic("Epic4", "Description4", 4, duration1, startTime1); + epic5 = new Epic("Epic5", "Description5", 5, duration1, startTime1); + epic6 = new Epic("Epic6", "Description6", 6, duration1, startTime1); + subtask7 = new Subtask("Subtask7", "Description7", 4, 7, duration1, startTime1); + subtask8 = new Subtask("Subtask8", "Description8", 5, 8, duration1, startTime1); + subtask9 = new Subtask("Subtask9", "Description9", 6, 9, duration1, startTime1); + subtask10 = new Subtask("Subtask10", "Description10", 4, 10, duration1, startTime1); + subtask11 = new Subtask("Subtask11", "Description11", 5, 11, duration1, startTime1); + subtask12 = new Subtask("Subtask12", "Description12", 6, 12, duration1, startTime1); } @BeforeEach diff --git a/test/InMemoryTaskManagerTest.java b/test/InMemoryTaskManagerTest.java index cccd063..0e41b39 100644 --- a/test/InMemoryTaskManagerTest.java +++ b/test/InMemoryTaskManagerTest.java @@ -5,6 +5,10 @@ import statuses.StatusTask; import tasks.*; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.ArrayList; import java.util.List; @@ -23,22 +27,25 @@ public class InMemoryTaskManagerTest { Subtask subtask4; Subtask subtask5; Subtask subtask6; + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), + LocalTime.of(10,0)); @BeforeEach public void setUp() { manager = new InMemoryTaskManager(); - task1 = new Task("TestName1", "TestDescription1"); - task2 = new Task("TestName4", "TestDescription4"); - epic1 = new Epic("TestName2", "TestDescription2"); - epic2 = new Epic("TestName5", "TestDescription5"); - epic3 = new Epic("TestName6", "TestDescription6"); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", duration1, startTime1); + epic1 = new Epic("TestName2", "TestDescription2", duration1, startTime1); + epic2 = new Epic("TestName5", "TestDescription5", duration1, startTime1); + epic3 = new Epic("TestName6", "TestDescription6", duration1, startTime1); } @Test public void createIdForTask() { manager.addTask(task1); manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask1); Assertions.assertEquals(1, task1.getId()); Assertions.assertEquals(2, epic1.getId()); @@ -51,7 +58,7 @@ public void addTasks() { manager.addTask(task2); manager.addEpic(epic1); manager.addEpic(epic2); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask1); Assertions.assertEquals(2, manager.getTasks().size()); Assertions.assertEquals(2, manager.getEpics().size()); @@ -62,8 +69,8 @@ public void addTasks() { @Test public void addSubtaskInEpic() { manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); Assertions.assertEquals(1, subtask1.getEpicId()); @@ -77,7 +84,7 @@ public void addSubtaskInEpic() { public void getTasksById() { manager.addTask(task1); manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask1); Assertions.assertEquals(task1, manager.getTask(1)); Assertions.assertEquals(epic1, manager.getEpic(2)); @@ -99,8 +106,8 @@ public void deleteTaskById() { @Test public void deleteSubtaskById() { manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.deleteSubtask(2); @@ -117,8 +124,8 @@ public void deleteSubtaskById() { @Test public void deleteEpicByIdAndDeleteEpicSubtasks() { manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.deleteEpic(1); @@ -132,8 +139,8 @@ public void clearTasks() { manager.addTask(task2); manager.addEpic(epic1); manager.addEpic(epic2); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic2.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic2.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.clearTasks(); @@ -152,9 +159,9 @@ public void clearEpicsWithSubtasks() { manager.addTask(task2); manager.addEpic(epic1); manager.addEpic(epic2); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic2.getId()); - subtask3 = new Subtask("TestName8", "TestDescription8", epic2.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic2.getId(), duration1, startTime1); + subtask3 = new Subtask("TestName8", "TestDescription8", epic2.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.addSubtask(subtask3); @@ -167,9 +174,9 @@ public void clearEpicsWithSubtasks() { public void clearSubtasksWithEpicUpdate() { manager.addEpic(epic1); manager.addEpic(epic2); - subtask1 = new Subtask("TestName3", "TestDescription3", StatusTask.NEW, epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", StatusTask.IN_PROGRESS, epic1.getId()); - subtask3 = new Subtask("TestName8", "TestDescription8", StatusTask.DONE, epic2.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", StatusTask.NEW, epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", StatusTask.IN_PROGRESS, epic1.getId(), duration1, startTime1); + subtask3 = new Subtask("TestName8", "TestDescription8", StatusTask.DONE, epic2.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.addSubtask(subtask3); @@ -186,20 +193,20 @@ public void clearSubtasksWithEpicUpdate() { public void updateTasks() { manager.addTask(task1); manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask1); - manager.updateTask(new Task("TestName1Updated", "TestDescription1Updated", StatusTask.IN_PROGRESS, 1)); + manager.updateTask(new Task("TestName1Updated", "TestDescription1Updated", StatusTask.IN_PROGRESS, 1, duration1, startTime1)); Assertions.assertEquals("TestName1Updated", manager.getTask(1).getName()); Assertions.assertEquals("TestDescription1Updated", manager.getTask(1).getDescription()); Assertions.assertEquals(StatusTask.IN_PROGRESS, manager.getTask(1).getStatus()); - manager.updateEpic(new Epic("TestName2Updated", "TestDescription2Updated", 2)); + manager.updateEpic(new Epic("TestName2Updated", "TestDescription2Updated", 2, duration1, startTime1)); Assertions.assertEquals("TestName2Updated", manager.getEpic(2).getName()); Assertions.assertEquals("TestDescription2Updated", manager.getEpic(2).getDescription()); Assertions.assertEquals(StatusTask.NEW, manager.getEpic(2).getStatus()); - manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3", epic1.getId(), 3)); + manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3", epic1.getId(), 3, duration1, startTime1)); Assertions.assertEquals("TestName3Updated", manager.getSubtask(3).getName()); Assertions.assertEquals("TestDescription3", manager.getSubtask(3).getDescription()); Assertions.assertEquals(StatusTask.NEW, manager.getSubtask(3).getStatus()); @@ -208,33 +215,33 @@ public void updateTasks() { @Test public void updateSubtaskAndEpicStatus() { manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId()); - subtask3 = new Subtask("TestName8", "TestDescription8", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime1); + subtask3 = new Subtask("TestName8", "TestDescription8", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.addSubtask(subtask3); - manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.IN_PROGRESS, epic1.getId(), 2)); + manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.IN_PROGRESS, epic1.getId(), 2, duration1, startTime1)); Assertions.assertEquals(StatusTask.IN_PROGRESS, epic1.getStatus()); - manager.updateSubtask(new Subtask("TestName7", "TestDescription7", StatusTask.DONE, epic1.getId(), 3)); - manager.updateSubtask(new Subtask("TestName8", "TestDescription8", StatusTask.DONE, epic1.getId(), 4)); + manager.updateSubtask(new Subtask("TestName7", "TestDescription7", StatusTask.DONE, epic1.getId(), 3, duration1, startTime1)); + manager.updateSubtask(new Subtask("TestName8", "TestDescription8", StatusTask.DONE, epic1.getId(), 4, duration1, startTime1)); Assertions.assertEquals(StatusTask.IN_PROGRESS, epic1.getStatus()); - manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.DONE, epic1.getId(), 2)); + manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.DONE, epic1.getId(), 2, duration1, startTime1)); Assertions.assertEquals(StatusTask.DONE, epic1.getStatus()); - manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.NEW, epic1.getId(), 2)); - manager.updateSubtask(new Subtask("TestName7", "TestDescription7", StatusTask.NEW, epic1.getId(), 3)); - manager.updateSubtask(new Subtask("TestName8", "TestDescription8", StatusTask.NEW, epic1.getId(), 4)); + manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.NEW, epic1.getId(), 2, duration1, startTime1)); + manager.updateSubtask(new Subtask("TestName7", "TestDescription7", StatusTask.NEW, epic1.getId(), 3, duration1, startTime1)); + manager.updateSubtask(new Subtask("TestName8", "TestDescription8", StatusTask.NEW, epic1.getId(), 4, duration1, startTime1)); Assertions.assertEquals(StatusTask.NEW, epic1.getStatus()); } @Test public void getHistoryTasks() { - task3 = new Task("TestName9", "TestDescription9"); - task4 = new Task("TestName10", "TestDescription10"); - epic3 = new Epic("TestName3", "TestDescription3"); + task3 = new Task("TestName9", "TestDescription9", duration1, startTime1); + task4 = new Task("TestName10", "TestDescription10", duration1, startTime1); + epic3 = new Epic("TestName3", "TestDescription3", duration1, startTime1); manager.addTask(task1); manager.addTask(task2); manager.addTask(task3); @@ -243,11 +250,11 @@ public void getHistoryTasks() { manager.addEpic(epic2); manager.addEpic(epic3); - subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId()); - subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId()); - subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId()); - subtask6 = new Subtask("TestName6", "TestDescription6", epic3.getId()); + subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime1); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime1); + subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime1); + subtask6 = new Subtask("TestName6", "TestDescription6", epic3.getId(), duration1, startTime1); manager.addSubtask(subtask2); manager.addSubtask(subtask3); @@ -286,10 +293,10 @@ public void deleteTaskdeleteTaskInHistory() { manager.addTask(task2); manager.addEpic(epic1); manager.addEpic(epic2); - subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId()); - subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId()); - subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId()); + subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime1); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime1); + subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime1); manager.addSubtask(subtask2); manager.addSubtask(subtask3); manager.addSubtask(subtask4); @@ -320,8 +327,8 @@ public void clearTasksAndHistory() { manager.addTask(task1); manager.addTask(task2); manager.addEpic(epic1); - subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId()); - subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId()); + subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime1); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask2); manager.addSubtask(subtask3); manager.getTask(1); @@ -343,8 +350,8 @@ public void clearTasksAndHistory() { Assertions.assertTrue(manager.getHistory().isEmpty()); Assertions.assertEquals(expectedHistory, manager.getHistory()); manager.addEpic(epic3); - subtask3 = new Subtask("TestName4", "TestDescription4", epic3.getId()); - subtask4 = new Subtask("TestName5", "TestDescription5", epic3.getId()); + subtask3 = new Subtask("TestName4", "TestDescription4", epic3.getId(), duration1, startTime1); + subtask4 = new Subtask("TestName5", "TestDescription5", epic3.getId(), duration1, startTime1); manager.addSubtask(subtask3); manager.addSubtask(subtask4); manager.getEpic(6); diff --git a/test/ManagersTest.java b/test/ManagersTest.java index 9753402..f5248d7 100644 --- a/test/ManagersTest.java +++ b/test/ManagersTest.java @@ -5,16 +5,24 @@ import tasks.Task; import util.Managers; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + public class ManagersTest { @Test public void getDefault() { + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), + LocalTime.of(10,0)); TaskManager manager = Managers.getDefault(); Assertions.assertNotNull(manager); - manager.addTask(new Task("Task1", "Descr1")); - manager.addTask(new Task("Task2", "Descr2")); - manager.addEpic(new Epic("Epic1", "Descr1")); - manager.addEpic(new Epic("Epic2", "Descr2")); + manager.addTask(new Task("Task1", "Descr1", duration1, startTime1)); + manager.addTask(new Task("Task2", "Descr2", duration1, startTime1)); + manager.addEpic(new Epic("Epic1", "Descr1", duration1, startTime1)); + manager.addEpic(new Epic("Epic2", "Descr2", duration1, startTime1)); Assertions.assertEquals("Task1", manager.getTasks().getFirst().getName()); Assertions.assertEquals(2, manager.getTasks().size()); manager.deleteTask(1); diff --git a/test/SubtaskTest.java b/test/SubtaskTest.java index 26aba28..0756929 100644 --- a/test/SubtaskTest.java +++ b/test/SubtaskTest.java @@ -19,7 +19,7 @@ public class SubtaskTest { @BeforeEach void setUp() { - epic = new Epic("TestEpic", "TestDescription", 1); + epic = new Epic("TestEpic", "TestDescription", 1, duration1, startTime1); subtask = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 1, 2, duration1, startTime1); } diff --git a/test/TaskTest.java b/test/TaskTest.java index 8d09f21..174a40d 100644 --- a/test/TaskTest.java +++ b/test/TaskTest.java @@ -27,14 +27,14 @@ public class TaskTest { @BeforeEach void setUp() { task1 = new Task("TestName1", "TestDescription1", StatusTask.NEW, 1, duration1, startTime1); - task2 = new Task("TestName2", "TestDescription2", StatusTask.NEW, 2); - task3 = new Task("TestName3", "TestDescription3", StatusTask.NEW, 1); - subtask1 = new Subtask("TestName1", "TestDescription1", StatusTask.NEW, 0, 3); - subtask2 = new Subtask("TestName2", "TestDescription2", StatusTask.NEW, 0, 4); - subtask3 = new Subtask("TestName3", "TestDescription3", StatusTask.NEW, 0, 3); - epic1 = new Epic("TestName1", "TestDescription1", 5); - epic2 = new Epic("TestName2", "TestDescription2", 6); - epic3 = new Epic("TestName3", "TestDescription3", 5); + task2 = new Task("TestName2", "TestDescription2", StatusTask.NEW, 2, duration1, startTime1); + task3 = new Task("TestName3", "TestDescription3", StatusTask.NEW, 1, duration1, startTime1); + subtask1 = new Subtask("TestName1", "TestDescription1", StatusTask.NEW, 0, 3, duration1, startTime1); + subtask2 = new Subtask("TestName2", "TestDescription2", StatusTask.NEW, 0, 4, duration1, startTime1); + subtask3 = new Subtask("TestName3", "TestDescription3", StatusTask.NEW, 0, 3, duration1, startTime1); + epic1 = new Epic("TestName1", "TestDescription1", 5, duration1, startTime1); + epic2 = new Epic("TestName2", "TestDescription2", 6, duration1, startTime1); + epic3 = new Epic("TestName3", "TestDescription3", 5, duration1, startTime1); } @Test From 8d8bda07aacb91693ffb00f6df61b43b5e33035c Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Wed, 5 Feb 2025 10:19:37 +0500 Subject: [PATCH 05/18] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=B2=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=D1=85=20(=D0=BD=D0=B5=20=D0=BD=D0=B0=D0=B4=D0=BE?= =?UTF-8?q?=20=D0=B1=D1=8B=D0=BB=D0=BE=20=D1=83=D0=B4=D0=B0=D0=BB=D1=8F?= =?UTF-8?q?=D1=82=D1=8C=20=D1=81=D1=82=D0=B0=D1=80=D1=8B=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tasks/Epic.java | 16 +++++++++++++++- src/tasks/Subtask.java | 20 ++++++++++++++++++++ src/tasks/Task.java | 27 ++++++++++++++++++++++++++- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/tasks/Epic.java b/src/tasks/Epic.java index 8a92f8b..346e3e7 100644 --- a/src/tasks/Epic.java +++ b/src/tasks/Epic.java @@ -4,7 +4,6 @@ import java.time.Duration; import java.time.LocalDateTime; -import java.time.LocalTime; import java.util.ArrayList; public class Epic extends Task { @@ -27,6 +26,21 @@ public Epic(String name, String description, Duration duration, LocalDateTime st this.subtasks = new ArrayList<>(); } + public Epic(String name, String description, StatusTask status, int id) { + super(name, description, status, id); + this.subtasks = new ArrayList<>(); + } + + public Epic(String name, String description, int id) { + super(name, description, id); + this.subtasks = new ArrayList<>(); + } + + public Epic(String name, String description) { + super(name, description); + this.subtasks = new ArrayList<>(); + } + public void addSubtask(Subtask subtask) { if (checkNotContainsSubtask(subtask)) { subtasks.add(subtask.getId()); diff --git a/src/tasks/Subtask.java b/src/tasks/Subtask.java index 44e1acb..765c267 100644 --- a/src/tasks/Subtask.java +++ b/src/tasks/Subtask.java @@ -31,6 +31,26 @@ public Subtask(String name, String description, int epicId, int id, Duration dur this.epicId = epicId; } + public Subtask(String name, String description, StatusTask status, int epicId, int id) { + super(name, description, status, id); + this.epicId = epicId; + } + + public Subtask(String name, String description, StatusTask status, int epicId) { + super(name, description, status); + this.epicId = epicId; + } + + public Subtask(String name, String description, int epicId, int id) { + super(name, description, id); + this.epicId = epicId; + } + + public Subtask(String name, String description, int epicId) { + super(name, description); + this.epicId = epicId; + } + public int getEpicId() { return epicId; } diff --git a/src/tasks/Task.java b/src/tasks/Task.java index 4b940ea..346267b 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -3,7 +3,6 @@ import statuses.StatusTask; import java.time.Duration; -import java.time.Instant; import java.time.LocalDateTime; import java.util.Objects; @@ -55,6 +54,32 @@ public Task(String name, String description, Duration duration, LocalDateTime st this.endTime = startTime.plus(duration); } + public Task(String name, String description, StatusTask status, int id) { + this.name = name; + this.description = description; + this.status = status; + this.id = id; + } + + public Task(String name, String description, StatusTask status) { + this.name = name; + this.description = description; + this.status = status; + } + + public Task(String name, String description, int id) { + this.name = name; + this.description = description; + this.id = id; + this.status = StatusTask.NEW; + } + + public Task(String name, String description) { + this.name = name; + this.description = description; + this.status = StatusTask.NEW; + } + public String getName() { return name; } From a1e19924423db297ce06d7d67c14a84cd357dd0f Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Thu, 6 Feb 2025 11:20:08 +0500 Subject: [PATCH 06/18] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20+=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D1=8B,=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=B4=D0=B5=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.java | 4 +-- src/tasks/Epic.java | 31 +++++++++++++++-------- src/tasks/Subtask.java | 25 ++++++++++++++++-- src/tasks/Task.java | 38 +++++++++++++++++++++++----- test/EpicTest.java | 2 +- test/FileBackendTaskManagerTest.java | 12 ++++----- test/InMemoryHistoryManagerTest.java | 6 ++--- test/InMemoryTaskManagerTest.java | 10 ++++---- test/ManagersTest.java | 4 +-- test/SubtaskTest.java | 2 +- test/TaskTest.java | 6 ++--- 11 files changed, 98 insertions(+), 42 deletions(-) diff --git a/src/Main.java b/src/Main.java index c35995b..814a755 100644 --- a/src/Main.java +++ b/src/Main.java @@ -189,11 +189,11 @@ public static void main(String[] args) { private static void printWorkingExampleWithFile(TaskManager manager) { manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут", Duration.ofMinutes(100), LocalDateTime.now())); - manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг", Duration.ofMinutes(100), LocalDateTime.now())); + manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2, Duration.ofMinutes(150), LocalDateTime.now())); manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2, Duration.ofMinutes(180), LocalDateTime.now())); manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2, Duration.ofMinutes(120), LocalDateTime.now())); - manager.addEpic(new Epic("Покрасить волосы", "На праздник", Duration.ofMinutes(100), LocalDateTime.now())); + manager.addEpic(new Epic("Покрасить волосы", "На праздник")); manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 6, Duration.ofMinutes(60), LocalDateTime.now())); System.out.println("Задачи:"); for (Task task : manager.getTasks()) { diff --git a/src/tasks/Epic.java b/src/tasks/Epic.java index 346e3e7..e7edde3 100644 --- a/src/tasks/Epic.java +++ b/src/tasks/Epic.java @@ -10,24 +10,23 @@ public class Epic extends Task { protected TaskType type = TaskType.EPIC; private ArrayList subtasks; - public Epic(String name, String description, StatusTask status, int id, Duration duration, - LocalDateTime startTime) { - super(name, description, status, id, duration, startTime); + public Epic(String name, String description, StatusTask status, int id) { + super(name, description, status, id); this.subtasks = new ArrayList<>(); } - public Epic(String name, String description, int id, Duration duration, LocalDateTime startTime) { - super(name, description, id, duration, startTime); + public Epic(String name, String description, StatusTask status, int id, Duration duration, LocalDateTime startTime) { + super(name, description, status, id, duration, startTime); this.subtasks = new ArrayList<>(); } - public Epic(String name, String description, Duration duration, LocalDateTime startTime) { - super(name, description, duration, startTime); + public Epic(String name, String description, StatusTask status, int id, Duration duration) { + super(name, description, status, id, duration); this.subtasks = new ArrayList<>(); } - public Epic(String name, String description, StatusTask status, int id) { - super(name, description, status, id); + public Epic(String name, String description, StatusTask status, int id, LocalDateTime startTime) { + super(name, description, status, id, startTime); this.subtasks = new ArrayList<>(); } @@ -68,8 +67,18 @@ public void setSubtasks(ArrayList subtasks) { public static Epic fromString(String value) { String[] taskInfo = value.split(","); - return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), - Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); + if (taskInfo[6].equals("null") && taskInfo[7].equals("null")) { + return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0])); + } else if (taskInfo[6].equals("null")) { + return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + LocalDateTime.parse(taskInfo[7])); + } else if (taskInfo[7].equals("null")) { + return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + Duration.parse(taskInfo[6])); + } else { + return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); + } } @Override diff --git a/src/tasks/Subtask.java b/src/tasks/Subtask.java index 765c267..e37379e 100644 --- a/src/tasks/Subtask.java +++ b/src/tasks/Subtask.java @@ -15,6 +15,16 @@ public Subtask(String name, String description, StatusTask status, int epicId, i this.epicId = epicId; } + public Subtask(String name, String description, StatusTask status, int epicId, int id, Duration duration) { + super(name, description, status, id, duration); + this.epicId = epicId; + } + + public Subtask(String name, String description, StatusTask status, int epicId, int id, LocalDateTime startTime) { + super(name, description, status, id, startTime); + this.epicId = epicId; + } + public Subtask(String name, String description, StatusTask status, int epicId, Duration duration, LocalDateTime startTime) { super(name, description, status, duration, startTime); @@ -61,8 +71,19 @@ public void setEpicId(int epicId) { public static Subtask fromString(String value) { String[] taskInfo = value.split(","); - return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), - Integer.parseInt(taskInfo[0]), Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); + if (taskInfo[6].equals("null") && taskInfo[7].equals("null")) { + return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), + Integer.parseInt(taskInfo[0])); + } else if (taskInfo[6].equals("null")) { + return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), + Integer.parseInt(taskInfo[0]), LocalDateTime.parse(taskInfo[7])); + } else if (taskInfo[7].equals("null")) { + return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), + Integer.parseInt(taskInfo[0]), Duration.parse(taskInfo[6])); + } else { + return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), + Integer.parseInt(taskInfo[0]), Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); + } } @Override diff --git a/src/tasks/Task.java b/src/tasks/Task.java index 346267b..60adbbb 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -21,16 +21,32 @@ public Task(String name, String description, StatusTask status, int id, Duration this.description = description; this.status = status; this.id = id; - this.duration = duration; + this.duration = Duration.ofMinutes(duration.toMinutes()); this.startTime = startTime; this.endTime = startTime.plus(duration); } + public Task(String name, String description, StatusTask status, int id, Duration duration) { + this.name = name; + this.description = description; + this.status = status; + this.id = id; + this.duration = Duration.ofMinutes(duration.toMinutes()); + } + + public Task(String name, String description, StatusTask status, int id, LocalDateTime startTime) { + this.name = name; + this.description = description; + this.status = status; + this.id = id; + this.startTime = startTime; + } + public Task(String name, String description, StatusTask status, Duration duration, LocalDateTime startTime) { this.name = name; this.description = description; this.status = status; - this.duration = duration; + this.duration = Duration.ofMinutes(duration.toMinutes()); this.startTime = startTime; this.endTime = startTime.plus(duration); } @@ -40,7 +56,7 @@ public Task(String name, String description, int id, Duration duration, LocalDat this.description = description; this.id = id; this.status = StatusTask.NEW; - this.duration = duration; + this.duration = Duration.ofMinutes(duration.toMinutes()); this.startTime = startTime; this.endTime = startTime.plus(duration); } @@ -49,7 +65,7 @@ public Task(String name, String description, Duration duration, LocalDateTime st this.name = name; this.description = description; this.status = StatusTask.NEW; - this.duration = duration; + this.duration = Duration.ofMinutes(duration.toMinutes()); this.startTime = startTime; this.endTime = startTime.plus(duration); } @@ -119,8 +135,18 @@ public void setStatus(StatusTask status) { public static Task fromString(String value) { String[] taskInfo = value.split(","); - return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), - Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); + if (taskInfo[6].equals("null") && taskInfo[7].equals("null")) { + return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0])); + } else if (taskInfo[6].equals("null")) { + return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + LocalDateTime.parse(taskInfo[7])); + } else if (taskInfo[7].equals("null")) { + return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + Duration.parse(taskInfo[6])); + } else { + return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); + } } @Override diff --git a/test/EpicTest.java b/test/EpicTest.java index 0b0ee1d..e905a52 100644 --- a/test/EpicTest.java +++ b/test/EpicTest.java @@ -22,7 +22,7 @@ public class EpicTest { @BeforeEach void setUp() { - epic = new Epic("TestEpic", "TestDescription", 1, duration1, startTime1); + epic = new Epic("TestEpic", "TestDescription", 1); subtask1 = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 0, 2, duration1, startTime1); subtask2 = new Subtask("TestSubtask2", "TestDescription2", StatusTask.DONE, 0, 3, duration1, startTime1); subtask3 = new Subtask("TestSubtask3", "TestDescription3", StatusTask.IN_PROGRESS, 0, 4, duration1, startTime1); diff --git a/test/FileBackendTaskManagerTest.java b/test/FileBackendTaskManagerTest.java index 59f7536..dd4f67d 100644 --- a/test/FileBackendTaskManagerTest.java +++ b/test/FileBackendTaskManagerTest.java @@ -37,9 +37,9 @@ public void setUp() throws IOException { manager = new FileBackedTaskManager(testTmpFile); task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); task2 = new Task("TestName4", "TestDescription4", duration1, startTime1); - epic1 = new Epic("TestName2", "TestDescription2", duration1, startTime1); - epic2 = new Epic("TestName5", "TestDescription5", duration1, startTime1); - epic3 = new Epic("TestName6", "TestDescription6", duration1, startTime1); + epic1 = new Epic("TestName2", "TestDescription2"); + epic2 = new Epic("TestName5", "TestDescription5"); + epic3 = new Epic("TestName6", "TestDescription6"); subtask2 = new Subtask("TestName8", "TestDescription8", 4, duration1, startTime1); subtask3 = new Subtask("TestName9", "TestDescription9", 5, duration1, startTime1); } @@ -88,7 +88,7 @@ public void saveTasksFileFromManager() { public void loadTasksFromFileToManager() { task1 = new Task("TestName1", "TestDescription1", 1, duration1, startTime1); task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime1); - epic1 = new Epic("TestName2", "TestDescription2", 3, duration1, startTime1); + epic1 = new Epic("TestName2", "TestDescription2", 3); subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime1); try (FileWriter writer = new FileWriter(testTmpFile)) { writer.write(String.format("%s\n", header)); @@ -111,7 +111,7 @@ public void loadTasksFromFileToManager() { public void loadTasksFromFileToManagerAddOtherTasks() { task1 = new Task("TestName1", "TestDescription1", 1, duration1, startTime1); task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime1); - epic1 = new Epic("TestName2", "TestDescription2", 3, duration1, startTime1); + epic1 = new Epic("TestName2", "TestDescription2", 3); subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime1); try (FileWriter writer = new FileWriter(testTmpFile)) { writer.write(String.format("%s\n", header)); @@ -126,7 +126,7 @@ public void loadTasksFromFileToManagerAddOtherTasks() { FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(testTmpFile); Task task3 = new Task("TestName1", "TestDescription1", duration1, startTime1); Task task4 = new Task("TestName4", "TestDescription4", duration1, startTime1); - Epic epic4 = new Epic("TestName4", "TestDescription4", duration1, startTime1); + Epic epic4 = new Epic("TestName4", "TestDescription4"); Subtask subtask4 = new Subtask("TestName8", "TestDescription8", 7, duration1, startTime1); manager.addTask(task3); manager.addTask(task4); diff --git a/test/InMemoryHistoryManagerTest.java b/test/InMemoryHistoryManagerTest.java index ce4d509..b045016 100644 --- a/test/InMemoryHistoryManagerTest.java +++ b/test/InMemoryHistoryManagerTest.java @@ -34,9 +34,9 @@ public static void setup() { task1 = new Task("Task1", "Description1", 1, duration1, startTime1); task2 = new Task("Task2", "Description2", 2, duration1, startTime1); task3 = new Task("Task3", "Description3", 3, duration1, startTime1); - epic4 = new Epic("Epic4", "Description4", 4, duration1, startTime1); - epic5 = new Epic("Epic5", "Description5", 5, duration1, startTime1); - epic6 = new Epic("Epic6", "Description6", 6, duration1, startTime1); + epic4 = new Epic("Epic4", "Description4", 4); + epic5 = new Epic("Epic5", "Description5", 5); + epic6 = new Epic("Epic6", "Description6", 6); subtask7 = new Subtask("Subtask7", "Description7", 4, 7, duration1, startTime1); subtask8 = new Subtask("Subtask8", "Description8", 5, 8, duration1, startTime1); subtask9 = new Subtask("Subtask9", "Description9", 6, 9, duration1, startTime1); diff --git a/test/InMemoryTaskManagerTest.java b/test/InMemoryTaskManagerTest.java index 0e41b39..ee9b292 100644 --- a/test/InMemoryTaskManagerTest.java +++ b/test/InMemoryTaskManagerTest.java @@ -36,9 +36,9 @@ public void setUp() { manager = new InMemoryTaskManager(); task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); task2 = new Task("TestName4", "TestDescription4", duration1, startTime1); - epic1 = new Epic("TestName2", "TestDescription2", duration1, startTime1); - epic2 = new Epic("TestName5", "TestDescription5", duration1, startTime1); - epic3 = new Epic("TestName6", "TestDescription6", duration1, startTime1); + epic1 = new Epic("TestName2", "TestDescription2"); + epic2 = new Epic("TestName5", "TestDescription5"); + epic3 = new Epic("TestName6", "TestDescription6"); } @Test @@ -201,7 +201,7 @@ public void updateTasks() { Assertions.assertEquals("TestDescription1Updated", manager.getTask(1).getDescription()); Assertions.assertEquals(StatusTask.IN_PROGRESS, manager.getTask(1).getStatus()); - manager.updateEpic(new Epic("TestName2Updated", "TestDescription2Updated", 2, duration1, startTime1)); + manager.updateEpic(new Epic("TestName2Updated", "TestDescription2Updated", 2)); Assertions.assertEquals("TestName2Updated", manager.getEpic(2).getName()); Assertions.assertEquals("TestDescription2Updated", manager.getEpic(2).getDescription()); Assertions.assertEquals(StatusTask.NEW, manager.getEpic(2).getStatus()); @@ -241,7 +241,7 @@ public void updateSubtaskAndEpicStatus() { public void getHistoryTasks() { task3 = new Task("TestName9", "TestDescription9", duration1, startTime1); task4 = new Task("TestName10", "TestDescription10", duration1, startTime1); - epic3 = new Epic("TestName3", "TestDescription3", duration1, startTime1); + epic3 = new Epic("TestName3", "TestDescription3"); manager.addTask(task1); manager.addTask(task2); manager.addTask(task3); diff --git a/test/ManagersTest.java b/test/ManagersTest.java index f5248d7..73567ed 100644 --- a/test/ManagersTest.java +++ b/test/ManagersTest.java @@ -21,8 +21,8 @@ public void getDefault() { Assertions.assertNotNull(manager); manager.addTask(new Task("Task1", "Descr1", duration1, startTime1)); manager.addTask(new Task("Task2", "Descr2", duration1, startTime1)); - manager.addEpic(new Epic("Epic1", "Descr1", duration1, startTime1)); - manager.addEpic(new Epic("Epic2", "Descr2", duration1, startTime1)); + manager.addEpic(new Epic("Epic1", "Descr1")); + manager.addEpic(new Epic("Epic2", "Descr2")); Assertions.assertEquals("Task1", manager.getTasks().getFirst().getName()); Assertions.assertEquals(2, manager.getTasks().size()); manager.deleteTask(1); diff --git a/test/SubtaskTest.java b/test/SubtaskTest.java index 0756929..26aba28 100644 --- a/test/SubtaskTest.java +++ b/test/SubtaskTest.java @@ -19,7 +19,7 @@ public class SubtaskTest { @BeforeEach void setUp() { - epic = new Epic("TestEpic", "TestDescription", 1, duration1, startTime1); + epic = new Epic("TestEpic", "TestDescription", 1); subtask = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 1, 2, duration1, startTime1); } diff --git a/test/TaskTest.java b/test/TaskTest.java index 174a40d..9b2dc75 100644 --- a/test/TaskTest.java +++ b/test/TaskTest.java @@ -32,9 +32,9 @@ void setUp() { subtask1 = new Subtask("TestName1", "TestDescription1", StatusTask.NEW, 0, 3, duration1, startTime1); subtask2 = new Subtask("TestName2", "TestDescription2", StatusTask.NEW, 0, 4, duration1, startTime1); subtask3 = new Subtask("TestName3", "TestDescription3", StatusTask.NEW, 0, 3, duration1, startTime1); - epic1 = new Epic("TestName1", "TestDescription1", 5, duration1, startTime1); - epic2 = new Epic("TestName2", "TestDescription2", 6, duration1, startTime1); - epic3 = new Epic("TestName3", "TestDescription3", 5, duration1, startTime1); + epic1 = new Epic("TestName1", "TestDescription1", 5); + epic2 = new Epic("TestName2", "TestDescription2", 6); + epic3 = new Epic("TestName3", "TestDescription3", 5); } @Test From c424d641ed323254cc6932cb659cf55dc2096927 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Thu, 6 Feb 2025 19:00:57 +0500 Subject: [PATCH 07/18] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9=20duration=20startTime?= =?UTF-8?q?=20endTime=20=D0=B2=20Epic,=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/managers/InMemoryTaskManager.java | 23 ++++++++++++++++++++--- src/tasks/Task.java | 19 +++++++++++++++++++ test/EpicTest.java | 6 +++--- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 1af140a..0c9a006 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -4,9 +4,9 @@ import tasks.*; import util.Managers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.*; public class InMemoryTaskManager implements TaskManager { private final HashMap tasks = new HashMap<>(); @@ -99,10 +99,12 @@ public void addSubtask(Subtask subtask) { subtasks.put(taskId, subtask); epic.addSubtask(subtask); updateEpicStatus(subtask.getEpicId()); + updateEpicTimeInfo(subtask.getEpicId()); } else if (!checkContainsAllTasks(subtask)) { subtasks.put(subtask.getId(), subtask); epic.addSubtask(subtask); updateEpicStatus(subtask.getEpicId()); + updateEpicTimeInfo(subtask.getEpicId()); } else { System.out.println("Данные с таким id существуют в списке"); } @@ -140,6 +142,7 @@ public void deleteSubtask(int id) { Epic epic = epics.get(subtask.getEpicId()); epic.removeSubtask(id); updateEpicStatus(subtask.getEpicId()); + updateEpicTimeInfo(subtask.getEpicId()); } subtasks.remove(id); historyManager.remove(id); @@ -212,6 +215,7 @@ public void updateSubtask(Subtask subtask) { subtasks.put(id, subtask); updateEpicStatus(subtask.getEpicId()); + updateEpicTimeInfo(subtask.getEpicId()); } @@ -256,4 +260,17 @@ private void updateEpicStatus(int epicId) { } + private void updateEpicTimeInfo(int epicId) { + Epic epic = epics.get(epicId); + LocalDateTime epicStartTime = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId). + getStartTime()).filter(Objects::nonNull).min(Comparator.naturalOrder()).orElse(null); + LocalDateTime epicEndTime = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId). + getEndTime()).filter(Objects::nonNull).max(Comparator.naturalOrder()).orElse(null); + Duration epicDuration = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId).getDuration()). + filter(Objects::nonNull).reduce(Duration.ZERO, Duration::plus); + epic.setStartTime(epicStartTime); + epic.setEndTime(epicEndTime); + epic.setDuration(epicDuration); + } + } diff --git a/src/tasks/Task.java b/src/tasks/Task.java index 60adbbb..4cb2a03 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -112,6 +112,14 @@ public int getId() { return id; } + public Duration getDuration() { + return duration; + } + + public LocalDateTime getStartTime() { + return startTime; + } + public LocalDateTime getEndTime() { return endTime; } @@ -132,6 +140,17 @@ public void setStatus(StatusTask status) { this.status = status; } + public void setDuration(Duration duration) { + this.duration = duration; + } + + public void setStartTime(LocalDateTime startTime) { + this.startTime = startTime; + } + + public void setEndTime(LocalDateTime endTime) { + this.endTime = endTime; + } public static Task fromString(String value) { String[] taskInfo = value.split(","); diff --git a/test/EpicTest.java b/test/EpicTest.java index e905a52..bdcbf4c 100644 --- a/test/EpicTest.java +++ b/test/EpicTest.java @@ -70,13 +70,13 @@ void clearSubtaskList() { @Test void epicToString() { - Assertions.assertEquals("1,EPIC,TestEpic,NEW,TestDescription,", epic.toString()); + Assertions.assertEquals("1,EPIC,TestEpic,NEW,TestDescription,,null,null,null", epic.toString()); } @Test void epicFromString() { - Epic epic1 = Epic.fromString("1,EPIC,TestEpic,NEW,TestDescription,"); - Epic epic2 = Epic.fromString("5,EPIC,TestEpic2,NEW,TestDescription,"); + Epic epic1 = Epic.fromString("1,EPIC,TestEpic,NEW,TestDescription,,null,null,null"); + Epic epic2 = Epic.fromString("5,EPIC,TestEpic2,NEW,TestDescription,,null,null,null"); Assertions.assertEquals(epic, epic1); Assertions.assertNotEquals(epic, epic2); } From 8cd6f43a1e6c032535f13b6b375f24959d09f425 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Fri, 7 Feb 2025 00:14:08 +0500 Subject: [PATCH 08/18] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BE=D1=80=D0=B8=D1=82=D0=B5=D0=B7=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D1=81=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=BE=D0=B2=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.java | 16 ++++++- src/managers/InMemoryTaskManager.java | 64 +++++++++++++++++++++++++++ src/managers/TaskManager.java | 7 +++ 3 files changed, 86 insertions(+), 1 deletion(-) diff --git a/src/Main.java b/src/Main.java index 814a755..1df53aa 100644 --- a/src/Main.java +++ b/src/Main.java @@ -15,8 +15,9 @@ public static void main(String[] args) { TaskManager inMemoryTaskManager = Managers.getDefault(); TaskManager fileBackedTaskManager = Managers.getDefaultFileBackend(); // printHistoryDeleteTaskWorkExample(inMemoryTaskManager); - printWorkingExampleWithFile(fileBackedTaskManager); +// printWorkingExampleWithFile(fileBackedTaskManager); // printWorkingExampleFromFile(file); + printWorkinExamplePrioritizedTasks(inMemoryTaskManager); } // private static void printWorkingExample(TaskManager manager) { @@ -239,6 +240,19 @@ private static void printWorkingExampleWithFile(TaskManager manager) { } } + private static void printWorkinExamplePrioritizedTasks(TaskManager manager) { + manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут", Duration.ofMinutes(100), LocalDateTime.of(2025, 6,2,10,0))); + manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут3.4")); + manager.addTask(new Task("Выгулять собаку2", "Погулять с Джеком 20 минут2", Duration.ofMinutes(100), LocalDateTime.of(2025, 6,2,10,10))); + manager.addTask(new Task("Выгулять собаку3", "Погулять с Джеком 20 минут3", Duration.ofMinutes(100), LocalDateTime.of(2025, 7,2,9,0))); + manager.addTask(new Task("Выгулять собаку4", "Погулять с Джеком 20 минут4", Duration.ofMinutes(100), LocalDateTime.of(2025, 6,2,10,0))); + manager.addEpic(new Epic("Выгулять собаку5", "Погулять с Джеком 20 минут5")); + manager.addSubtask(new Subtask("Выгулять собаку6", "Погулять с Джеком 20 минут6", 6, Duration.ofMinutes(100), LocalDateTime.of(2025, 6,2,10,0))); + manager.getPrioritizedTasks().forEach(System.out::println); + manager.getPrioritizedSubtasks().forEach(System.out::println); + manager.getPrioritizedEpics().forEach(System.out::println); + } + // private static void printWorkingExampleFromFile(File file) { // FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(file); // System.out.println("Задачи:"); diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 0c9a006..a553369 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -7,6 +7,7 @@ import java.time.Duration; import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; public class InMemoryTaskManager implements TaskManager { private final HashMap tasks = new HashMap<>(); @@ -232,6 +233,69 @@ public void updateEpic(Epic epic) { epics.put(id, epic); } + @Override + public TreeSet getPrioritizedTasks() { + ArrayList tasksWithoutTimeNulls = tasks.values().stream(). + filter(task -> Objects.nonNull(task.getStartTime())). + collect(Collectors.toCollection(ArrayList::new)); + + Comparator comparator = new Comparator() { + + @Override + public int compare(Task o1, Task o2) { + return o1.getStartTime().compareTo(o2.getStartTime()); + } + }; + + TreeSet prioritizedTasks = new TreeSet<>(comparator); + + prioritizedTasks.addAll(tasksWithoutTimeNulls); + + return prioritizedTasks; + } + + @Override + public TreeSet getPrioritizedSubtasks() { + ArrayList subtasksWithoutTimeNulls = subtasks.values().stream(). + filter(task -> Objects.nonNull(task.getStartTime())). + collect(Collectors.toCollection(ArrayList::new)); + + Comparator comparator = new Comparator() { + + @Override + public int compare(Task o1, Task o2) { + return o1.getStartTime().compareTo(o2.getStartTime()); + } + }; + + TreeSet prioritizedSubtasks = new TreeSet<>(comparator); + + prioritizedSubtasks.addAll(subtasksWithoutTimeNulls); + + return prioritizedSubtasks; + } + + @Override + public TreeSet getPrioritizedEpics() { + ArrayList epicsWithoutTimeNulls = epics.values().stream(). + filter(task -> Objects.nonNull(task.getStartTime())). + collect(Collectors.toCollection(ArrayList::new)); + + Comparator comparator = new Comparator() { + + @Override + public int compare(Task o1, Task o2) { + return o1.getStartTime().compareTo(o2.getStartTime()); + } + }; + + TreeSet prioritizedEpics = new TreeSet<>(comparator); + + prioritizedEpics.addAll(epicsWithoutTimeNulls); + + return prioritizedEpics; + } + private boolean checkContainsAllTasks(T task) { if (task == null) { return false; diff --git a/src/managers/TaskManager.java b/src/managers/TaskManager.java index e3389cb..5db3f19 100644 --- a/src/managers/TaskManager.java +++ b/src/managers/TaskManager.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.TreeSet; public interface TaskManager { ArrayList getTasks(); @@ -22,6 +23,12 @@ public interface TaskManager { List getHistory(); + TreeSet getPrioritizedTasks(); + + TreeSet getPrioritizedSubtasks(); + + TreeSet getPrioritizedEpics(); + void addTask(Task task); void addSubtask(Subtask subtask); From a080a085589c11b5fd24d12ed4c41efb9ebbaec0 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Mon, 10 Feb 2025 22:16:36 +0500 Subject: [PATCH 09/18] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D0=B5=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20+=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/FileBackendTaskManagerTest.java | 26 +++++++++++++++++--------- test/InMemoryTaskManagerTest.java | 24 ++++++++++++++++-------- test/ManagersTest.java | 4 +++- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/test/FileBackendTaskManagerTest.java b/test/FileBackendTaskManagerTest.java index dd4f67d..42fd3a9 100644 --- a/test/FileBackendTaskManagerTest.java +++ b/test/FileBackendTaskManagerTest.java @@ -29,6 +29,14 @@ public class FileBackendTaskManagerTest { Duration duration1 = Duration.ofMinutes(100); LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), LocalTime.of(10,0)); + LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025,2,5), + LocalTime.of(10,0)); + LocalDateTime startTime3 = LocalDateTime.of(LocalDate.of(2025,2,6), + LocalTime.of(10,0)); + LocalDateTime startTime4 = LocalDateTime.of(LocalDate.of(2025,2,7), + LocalTime.of(10,0)); + LocalDateTime startTime5 = LocalDateTime.of(LocalDate.of(2025,2,8), + LocalTime.of(10,0)); @BeforeEach public void setUp() throws IOException { @@ -36,12 +44,12 @@ public void setUp() throws IOException { testTmpFile = File.createTempFile("manager", ".csv"); manager = new FileBackedTaskManager(testTmpFile); task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); - task2 = new Task("TestName4", "TestDescription4", duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", duration1, startTime2); epic1 = new Epic("TestName2", "TestDescription2"); epic2 = new Epic("TestName5", "TestDescription5"); epic3 = new Epic("TestName6", "TestDescription6"); subtask2 = new Subtask("TestName8", "TestDescription8", 4, duration1, startTime1); - subtask3 = new Subtask("TestName9", "TestDescription9", 5, duration1, startTime1); + subtask3 = new Subtask("TestName9", "TestDescription9", 5, duration1, startTime2); } @AfterEach @@ -68,7 +76,7 @@ public void loadManagerFromEmptyFile() { public void saveTasksFileFromManager() { manager.addTask(task1); manager.addEpic(epic1); - manager.addSubtask(new Subtask("TestName7", "TestDescription7", 2, duration1, startTime1)); + manager.addSubtask(new Subtask("TestName7", "TestDescription7", 2, duration1, startTime3)); try (BufferedReader buffer = new BufferedReader(new FileReader(testTmpFile))) { ArrayList tasks = new ArrayList<>(buffer.lines().toList()); tasks.remove(header); @@ -87,7 +95,7 @@ public void saveTasksFileFromManager() { @Test public void loadTasksFromFileToManager() { task1 = new Task("TestName1", "TestDescription1", 1, duration1, startTime1); - task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime2); epic1 = new Epic("TestName2", "TestDescription2", 3); subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime1); try (FileWriter writer = new FileWriter(testTmpFile)) { @@ -110,9 +118,9 @@ public void loadTasksFromFileToManager() { @Test public void loadTasksFromFileToManagerAddOtherTasks() { task1 = new Task("TestName1", "TestDescription1", 1, duration1, startTime1); - task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime2); epic1 = new Epic("TestName2", "TestDescription2", 3); - subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime1); + subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime3); try (FileWriter writer = new FileWriter(testTmpFile)) { writer.write(String.format("%s\n", header)); writer.write(String.format("%s\n", task1.toString())); @@ -124,10 +132,10 @@ public void loadTasksFromFileToManagerAddOtherTasks() { } FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(testTmpFile); - Task task3 = new Task("TestName1", "TestDescription1", duration1, startTime1); - Task task4 = new Task("TestName4", "TestDescription4", duration1, startTime1); + Task task3 = new Task("TestName1", "TestDescription1", duration1, startTime4); + Task task4 = new Task("TestName4", "TestDescription4", duration1, startTime5); Epic epic4 = new Epic("TestName4", "TestDescription4"); - Subtask subtask4 = new Subtask("TestName8", "TestDescription8", 7, duration1, startTime1); + Subtask subtask4 = new Subtask("TestName8", "TestDescription8", 7, duration1, startTime4); manager.addTask(task3); manager.addTask(task4); manager.addEpic(epic4); diff --git a/test/InMemoryTaskManagerTest.java b/test/InMemoryTaskManagerTest.java index ee9b292..c3e4605 100644 --- a/test/InMemoryTaskManagerTest.java +++ b/test/InMemoryTaskManagerTest.java @@ -30,12 +30,20 @@ public class InMemoryTaskManagerTest { Duration duration1 = Duration.ofMinutes(100); LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), LocalTime.of(10,0)); + LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025,2,5), + LocalTime.of(10,0)); + LocalDateTime startTime3 = LocalDateTime.of(LocalDate.of(2025,2,6), + LocalTime.of(10,0)); + LocalDateTime startTime4 = LocalDateTime.of(LocalDate.of(2025,2,7), + LocalTime.of(10,0)); + LocalDateTime startTime5 = LocalDateTime.of(LocalDate.of(2025,2,8), + LocalTime.of(10,0)); @BeforeEach public void setUp() { manager = new InMemoryTaskManager(); task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); - task2 = new Task("TestName4", "TestDescription4", duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", duration1, startTime2); epic1 = new Epic("TestName2", "TestDescription2"); epic2 = new Epic("TestName5", "TestDescription5"); epic3 = new Epic("TestName6", "TestDescription6"); @@ -45,7 +53,7 @@ public void setUp() { public void createIdForTask() { manager.addTask(task1); manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime3); manager.addSubtask(subtask1); Assertions.assertEquals(1, task1.getId()); Assertions.assertEquals(2, epic1.getId()); @@ -239,8 +247,8 @@ public void updateSubtaskAndEpicStatus() { @Test public void getHistoryTasks() { - task3 = new Task("TestName9", "TestDescription9", duration1, startTime1); - task4 = new Task("TestName10", "TestDescription10", duration1, startTime1); + task3 = new Task("TestName9", "TestDescription9", duration1, startTime3); + task4 = new Task("TestName10", "TestDescription10", duration1, startTime4); epic3 = new Epic("TestName3", "TestDescription3"); manager.addTask(task1); manager.addTask(task2); @@ -251,10 +259,10 @@ public void getHistoryTasks() { manager.addEpic(epic3); subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime1); - subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); - subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime1); - subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime1); - subtask6 = new Subtask("TestName6", "TestDescription6", epic3.getId(), duration1, startTime1); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime2); + subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime3); + subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime4); + subtask6 = new Subtask("TestName6", "TestDescription6", epic3.getId(), duration1, startTime5); manager.addSubtask(subtask2); manager.addSubtask(subtask3); diff --git a/test/ManagersTest.java b/test/ManagersTest.java index 73567ed..d275d60 100644 --- a/test/ManagersTest.java +++ b/test/ManagersTest.java @@ -17,10 +17,12 @@ public void getDefault() { Duration duration1 = Duration.ofMinutes(100); LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), LocalTime.of(10,0)); + LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025,2,5), + LocalTime.of(10,0)); TaskManager manager = Managers.getDefault(); Assertions.assertNotNull(manager); manager.addTask(new Task("Task1", "Descr1", duration1, startTime1)); - manager.addTask(new Task("Task2", "Descr2", duration1, startTime1)); + manager.addTask(new Task("Task2", "Descr2", duration1, startTime2)); manager.addEpic(new Epic("Epic1", "Descr1")); manager.addEpic(new Epic("Epic2", "Descr2")); Assertions.assertEquals("Task1", manager.getTasks().getFirst().getName()); From f43dcb14dfed432070868e9e7fe0e4fffe2d3574 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Mon, 10 Feb 2025 22:16:49 +0500 Subject: [PATCH 10/18] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D0=B5=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20+=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/managers/InMemoryTaskManager.java | 48 +++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index a553369..1050bf8 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -75,7 +75,9 @@ public List getHistory() { @Override public void addTask(Task task) { - if (task.getId() == 0) { + if (isIntersectionTaskTime(task)) { + System.out.println("Задача пересекается по времени с другими"); + } else if (task.getId() == 0) { do { taskId++; task.setId(taskId); @@ -91,7 +93,9 @@ public void addTask(Task task) { @Override public void addSubtask(Subtask subtask) { Epic epic = epics.get(subtask.getEpicId()); - if (epic != null) { + if (isIntersectionSubtaskTime(subtask)) { + System.out.println("Подзадача пересекается по времени с другими"); + } else if (epic != null) { if (subtask.getId() == 0) { do { taskId++; @@ -116,7 +120,9 @@ public void addSubtask(Subtask subtask) { @Override public void addEpic(Epic epic) { - if (epic.getId() == 0) { + if (isIntersectionEpicTime(epic)) { + System.out.println("Эпик пересекается по времени с другими"); + } else if (epic.getId() == 0) { do { taskId++; epic.setId(taskId); @@ -337,4 +343,40 @@ private void updateEpicTimeInfo(int epicId) { epic.setDuration(epicDuration); } + private boolean isIntersectionTaskTime(Task task) { + if (!Objects.nonNull(task.getStartTime()) && !Objects.nonNull(task.getEndTime())) { + return false; + } else { + List intersectionsTasks = getPrioritizedTasks().stream().filter(prioritezedTask -> + Objects.nonNull(prioritezedTask.getEndTime())). + filter(prioritizedTask -> (prioritizedTask.getStartTime().isBefore(task.getStartTime()) + && prioritizedTask.getEndTime().isAfter(task.getStartTime())) || + (prioritizedTask.getStartTime().equals(task.getStartTime()) && prioritizedTask.getEndTime().equals(task.getEndTime()))).toList(); + return !intersectionsTasks.isEmpty(); + } + } + + private boolean isIntersectionEpicTime(Epic epic) { + if (!Objects.nonNull(epic.getStartTime()) && !Objects.nonNull(epic.getEndTime())) { + return false; + } else { + List intersectionsEpics = getPrioritizedEpics().stream().filter(prioritezedEpic -> + Objects.nonNull(prioritezedEpic.getEndTime())). + filter(prioritizedEpic -> (prioritizedEpic.getStartTime().isBefore(epic.getStartTime()) + && prioritizedEpic.getEndTime().isAfter(epic.getStartTime()))).toList(); + return !intersectionsEpics.isEmpty(); + } + } + + private boolean isIntersectionSubtaskTime(Subtask subtask) { + if (!Objects.nonNull(subtask.getStartTime()) && !Objects.nonNull(subtask.getEndTime())) { + return false; + } else { + List intersectionsSubtasks = getPrioritizedSubtasks().stream().filter(prioritezedSubtask -> Objects.nonNull(prioritezedSubtask.getEndTime())). + filter(prioritezedSubtask -> (prioritezedSubtask.getStartTime().isBefore(subtask.getStartTime()) + && prioritezedSubtask.getEndTime().isAfter(subtask.getStartTime()))).toList(); + return !intersectionsSubtasks.isEmpty(); + } + } + } From 8d817685ff588ea4ceedb4dab5c2eb120d04e1d5 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Tue, 11 Feb 2025 01:12:36 +0500 Subject: [PATCH 11/18] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=BD=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.java | 12 +-- src/managers/InMemoryTaskManager.java | 4 +- test/EpicTest.java | 4 +- test/FileBackendTaskManagerTest.java | 20 ++--- test/InMemoryHistoryManagerTest.java | 4 +- test/InMemoryTaskManagerTest.java | 104 +++++++++++++++++++++++--- test/ManagersTest.java | 8 +- test/SubtaskTest.java | 4 +- test/TaskTest.java | 4 +- 9 files changed, 125 insertions(+), 39 deletions(-) diff --git a/src/Main.java b/src/Main.java index 1df53aa..c66fdbd 100644 --- a/src/Main.java +++ b/src/Main.java @@ -17,7 +17,7 @@ public static void main(String[] args) { // printHistoryDeleteTaskWorkExample(inMemoryTaskManager); // printWorkingExampleWithFile(fileBackedTaskManager); // printWorkingExampleFromFile(file); - printWorkinExamplePrioritizedTasks(inMemoryTaskManager); + printWorkinExamplePrioritizedTasks(inMemoryTaskManager); } // private static void printWorkingExample(TaskManager manager) { @@ -241,13 +241,13 @@ private static void printWorkingExampleWithFile(TaskManager manager) { } private static void printWorkinExamplePrioritizedTasks(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут", Duration.ofMinutes(100), LocalDateTime.of(2025, 6,2,10,0))); + manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут", Duration.ofMinutes(100), LocalDateTime.of(2025, 6, 2, 10, 0))); manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут3.4")); - manager.addTask(new Task("Выгулять собаку2", "Погулять с Джеком 20 минут2", Duration.ofMinutes(100), LocalDateTime.of(2025, 6,2,10,10))); - manager.addTask(new Task("Выгулять собаку3", "Погулять с Джеком 20 минут3", Duration.ofMinutes(100), LocalDateTime.of(2025, 7,2,9,0))); - manager.addTask(new Task("Выгулять собаку4", "Погулять с Джеком 20 минут4", Duration.ofMinutes(100), LocalDateTime.of(2025, 6,2,10,0))); + manager.addTask(new Task("Выгулять собаку2", "Погулять с Джеком 20 минут2", Duration.ofMinutes(100), LocalDateTime.of(2025, 6, 2, 10, 10))); + manager.addTask(new Task("Выгулять собаку3", "Погулять с Джеком 20 минут3", Duration.ofMinutes(100), LocalDateTime.of(2025, 7, 2, 9, 0))); + manager.addTask(new Task("Выгулять собаку4", "Погулять с Джеком 20 минут4", Duration.ofMinutes(100), LocalDateTime.of(2025, 6, 2, 10, 0))); manager.addEpic(new Epic("Выгулять собаку5", "Погулять с Джеком 20 минут5")); - manager.addSubtask(new Subtask("Выгулять собаку6", "Погулять с Джеком 20 минут6", 6, Duration.ofMinutes(100), LocalDateTime.of(2025, 6,2,10,0))); + manager.addSubtask(new Subtask("Выгулять собаку6", "Погулять с Джеком 20 минут6", 6, Duration.ofMinutes(100), LocalDateTime.of(2025, 6, 2, 10, 0))); manager.getPrioritizedTasks().forEach(System.out::println); manager.getPrioritizedSubtasks().forEach(System.out::println); manager.getPrioritizedEpics().forEach(System.out::println); diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 1050bf8..c634917 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -372,7 +372,9 @@ private boolean isIntersectionSubtaskTime(Subtask subtask) { if (!Objects.nonNull(subtask.getStartTime()) && !Objects.nonNull(subtask.getEndTime())) { return false; } else { - List intersectionsSubtasks = getPrioritizedSubtasks().stream().filter(prioritezedSubtask -> Objects.nonNull(prioritezedSubtask.getEndTime())). + List intersectionsSubtasks = getPrioritizedSubtasks().stream(). + filter(prioritezedSubtask -> prioritezedSubtask.getEpicId() == subtask.getEpicId()). + filter(prioritezedSubtask -> Objects.nonNull(prioritezedSubtask.getEndTime())). filter(prioritezedSubtask -> (prioritezedSubtask.getStartTime().isBefore(subtask.getStartTime()) && prioritezedSubtask.getEndTime().isAfter(subtask.getStartTime()))).toList(); return !intersectionsSubtasks.isEmpty(); diff --git a/test/EpicTest.java b/test/EpicTest.java index bdcbf4c..ec4ec26 100644 --- a/test/EpicTest.java +++ b/test/EpicTest.java @@ -17,8 +17,8 @@ public class EpicTest { Subtask subtask2; Subtask subtask3; Duration duration1 = Duration.ofMinutes(100); - LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), - LocalTime.of(10,0)); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); @BeforeEach void setUp() { diff --git a/test/FileBackendTaskManagerTest.java b/test/FileBackendTaskManagerTest.java index 42fd3a9..f16b491 100644 --- a/test/FileBackendTaskManagerTest.java +++ b/test/FileBackendTaskManagerTest.java @@ -27,16 +27,16 @@ public class FileBackendTaskManagerTest { Subtask subtask2; Subtask subtask3; Duration duration1 = Duration.ofMinutes(100); - LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), - LocalTime.of(10,0)); - LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025,2,5), - LocalTime.of(10,0)); - LocalDateTime startTime3 = LocalDateTime.of(LocalDate.of(2025,2,6), - LocalTime.of(10,0)); - LocalDateTime startTime4 = LocalDateTime.of(LocalDate.of(2025,2,7), - LocalTime.of(10,0)); - LocalDateTime startTime5 = LocalDateTime.of(LocalDate.of(2025,2,8), - LocalTime.of(10,0)); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); + LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025, 2, 5), + LocalTime.of(10, 0)); + LocalDateTime startTime3 = LocalDateTime.of(LocalDate.of(2025, 2, 6), + LocalTime.of(10, 0)); + LocalDateTime startTime4 = LocalDateTime.of(LocalDate.of(2025, 2, 7), + LocalTime.of(10, 0)); + LocalDateTime startTime5 = LocalDateTime.of(LocalDate.of(2025, 2, 8), + LocalTime.of(10, 0)); @BeforeEach public void setUp() throws IOException { diff --git a/test/InMemoryHistoryManagerTest.java b/test/InMemoryHistoryManagerTest.java index b045016..c2dd8e7 100644 --- a/test/InMemoryHistoryManagerTest.java +++ b/test/InMemoryHistoryManagerTest.java @@ -26,8 +26,8 @@ public class InMemoryHistoryManagerTest { static Subtask subtask11; static Subtask subtask12; static Duration duration1 = Duration.ofMinutes(100); - static LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), - LocalTime.of(10,0)); + static LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); @BeforeAll public static void setup() { diff --git a/test/InMemoryTaskManagerTest.java b/test/InMemoryTaskManagerTest.java index c3e4605..9be8fcf 100644 --- a/test/InMemoryTaskManagerTest.java +++ b/test/InMemoryTaskManagerTest.java @@ -28,16 +28,16 @@ public class InMemoryTaskManagerTest { Subtask subtask5; Subtask subtask6; Duration duration1 = Duration.ofMinutes(100); - LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), - LocalTime.of(10,0)); - LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025,2,5), - LocalTime.of(10,0)); - LocalDateTime startTime3 = LocalDateTime.of(LocalDate.of(2025,2,6), - LocalTime.of(10,0)); - LocalDateTime startTime4 = LocalDateTime.of(LocalDate.of(2025,2,7), - LocalTime.of(10,0)); - LocalDateTime startTime5 = LocalDateTime.of(LocalDate.of(2025,2,8), - LocalTime.of(10,0)); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); + LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025, 2, 5), + LocalTime.of(10, 0)); + LocalDateTime startTime3 = LocalDateTime.of(LocalDate.of(2025, 2, 6), + LocalTime.of(10, 0)); + LocalDateTime startTime4 = LocalDateTime.of(LocalDate.of(2025, 2, 7), + LocalTime.of(10, 0)); + LocalDateTime startTime5 = LocalDateTime.of(LocalDate.of(2025, 2, 8), + LocalTime.of(10, 0)); @BeforeEach public void setUp() { @@ -74,6 +74,36 @@ public void addTasks() { Assertions.assertEquals(1, manager.getEpic(3).getSubtasks().size()); } + @Test + public void addTaskWithTimeIntersection() { + manager.addTask(task1); + task2 = new Task("TestName2", "TestDescription2", duration1, LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 5))); + manager.addTask(task2); + Assertions.assertEquals(1, manager.getTasks().size()); + task3 = new Task("TestName3", "TestDescription3", duration1, startTime1); + Assertions.assertEquals(1, manager.getTasks().size()); + task4 = new Task("TestName4", "TestDescription4", duration1, startTime2); + manager.addTask(task4); + Assertions.assertEquals(2, manager.getTasks().size()); + } + + @Test + public void addSubtaskWithTimeIntersection() { + manager.addEpic(epic1); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + manager.addSubtask(subtask1); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 5))); + manager.addSubtask(subtask2); + Assertions.assertEquals(1, manager.getSubtasks().size()); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + Assertions.assertEquals(1, manager.getSubtasks().size()); + subtask4 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime2); + manager.addSubtask(subtask4); + Assertions.assertEquals(2, manager.getSubtasks().size()); + } + @Test public void addSubtaskInEpic() { manager.addEpic(epic1); @@ -99,6 +129,60 @@ public void getTasksById() { Assertions.assertEquals(subtask1, manager.getSubtask(3)); } + @Test + public void getPrioritizedTasks() { + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName2", "TestDescription2", duration1, startTime2); + task3 = new Task("TestName3", "TestDescription3", duration1, startTime3); + manager.addTask(task2); + manager.addTask(task1); + manager.addTask(task3); + ArrayList prioritizedTasks = new ArrayList<>(manager.getPrioritizedTasks()); + ArrayList expectedPrioritizedTasks = new ArrayList<>(); + expectedPrioritizedTasks.add(task1); + expectedPrioritizedTasks.add(task2); + expectedPrioritizedTasks.add(task3); + Assertions.assertEquals(expectedPrioritizedTasks, prioritizedTasks); + } + + @Test + public void getPrioritizedSubtasks() { + manager.addEpic(epic1); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime2); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime3); + manager.addSubtask(subtask3); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); + ArrayList prioritizedSubtasks = new ArrayList<>(manager.getPrioritizedSubtasks()); + ArrayList expectedPrioritizedSubtasks = new ArrayList<>(); + expectedPrioritizedSubtasks.add(subtask1); + expectedPrioritizedSubtasks.add(subtask2); + expectedPrioritizedSubtasks.add(subtask3); + Assertions.assertEquals(expectedPrioritizedSubtasks, prioritizedSubtasks); + } + + @Test + public void getPrioritizedEpics() { + manager.addEpic(epic1); + epic2 = new Epic("TestName2", "TestDescription2"); + manager.addEpic(epic2); + epic3 = new Epic("TestName3", "TestDescription3"); + manager.addEpic(epic3); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName3", "TestDescription3", epic2.getId(), duration1, startTime2); + subtask3 = new Subtask("TestName3", "TestDescription3", epic3.getId(), duration1, startTime3); + manager.addSubtask(subtask1); + manager.addSubtask(subtask3); + manager.addSubtask(subtask2); + ArrayList prioritizedEpics = new ArrayList<>(manager.getPrioritizedEpics()); + ArrayList expectedPrioritizedEpics = new ArrayList<>(); + expectedPrioritizedEpics.add(epic1); + expectedPrioritizedEpics.add(epic2); + expectedPrioritizedEpics.add(epic3); + Assertions.assertEquals(expectedPrioritizedEpics, prioritizedEpics); + } + @Test public void deleteTaskById() { manager.addTask(task1); diff --git a/test/ManagersTest.java b/test/ManagersTest.java index d275d60..5177f65 100644 --- a/test/ManagersTest.java +++ b/test/ManagersTest.java @@ -15,10 +15,10 @@ public class ManagersTest { @Test public void getDefault() { Duration duration1 = Duration.ofMinutes(100); - LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), - LocalTime.of(10,0)); - LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025,2,5), - LocalTime.of(10,0)); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); + LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025, 2, 5), + LocalTime.of(10, 0)); TaskManager manager = Managers.getDefault(); Assertions.assertNotNull(manager); manager.addTask(new Task("Task1", "Descr1", duration1, startTime1)); diff --git a/test/SubtaskTest.java b/test/SubtaskTest.java index 26aba28..547e993 100644 --- a/test/SubtaskTest.java +++ b/test/SubtaskTest.java @@ -14,8 +14,8 @@ public class SubtaskTest { Subtask subtask; Epic epic; Duration duration1 = Duration.ofMinutes(100); - LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), - LocalTime.of(10,0)); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); @BeforeEach void setUp() { diff --git a/test/TaskTest.java b/test/TaskTest.java index 9b2dc75..6c81f60 100644 --- a/test/TaskTest.java +++ b/test/TaskTest.java @@ -20,8 +20,8 @@ public class TaskTest { Epic epic2; Epic epic3; Duration duration1 = Duration.ofMinutes(100); - LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025,2,4), - LocalTime.of(10,0)); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); @BeforeEach From 00b186624149295d32a0a5ce406f790bd3c94c61 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Tue, 11 Feb 2025 20:25:24 +0500 Subject: [PATCH 12/18] =?UTF-8?q?=D0=9F=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=BB=20=D1=86=D0=B8=D0=BA=D0=BB=D1=8B=20=D0=BD=D0=B0=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D0=BC=D1=8B=20/=20=D0=BB=D1=8F=D0=BC=D0=B1?= =?UTF-8?q?=D0=B4=D1=8B=20=D0=B3=D0=B4=D0=B5=20=D1=81=D0=BB=D0=B5=D0=B4?= =?UTF-8?q?=D1=83=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/managers/FileBackedTaskManager.java | 4 ++-- src/managers/InMemoryTaskManager.java | 32 ++++++++----------------- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/managers/FileBackedTaskManager.java b/src/managers/FileBackedTaskManager.java index db61ce2..0bbf33b 100644 --- a/src/managers/FileBackedTaskManager.java +++ b/src/managers/FileBackedTaskManager.java @@ -107,7 +107,7 @@ public static FileBackedTaskManager loadFromFile(File file) throws ManagerLoadFr ArrayList tasks = new ArrayList<>(buffer.lines().toList()); String header = "id,type,name,status,description,epic,duration,start_time,end_time"; tasks.remove(header); - for (String task : tasks) { + tasks.forEach(task -> { String[] taskInfo = task.split(","); switch (TaskType.valueOf(taskInfo[1])) { case TaskType.TASK: @@ -122,7 +122,7 @@ public static FileBackedTaskManager loadFromFile(File file) throws ManagerLoadFr default: System.out.println("Не определена задача в файле"); } - } + }); return manager; } catch (IOException e) { throw new ManagerLoadFromFileException("Возникла ошибка при загрузке данных из файла", file); diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index c634917..70c21d0 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -55,12 +55,8 @@ public Epic getEpic(int id) { @Override public ArrayList getEpicSubtasks(int epicId) { Epic epic = epics.get(epicId); - ArrayList epicSubtasks = new ArrayList<>(); if (epic != null) { - for (Integer subtaskId : epic.getSubtasks()) { - epicSubtasks.add(subtasks.get(subtaskId)); - } - return epicSubtasks; + return epic.getSubtasks().stream().map(subtasks::get).collect(Collectors.toCollection(ArrayList::new)); } else { System.out.println("Эпик не найден!"); return null; @@ -160,43 +156,35 @@ public void deleteEpic(int id) { Epic epic = epics.remove(id); historyManager.remove(id); if (epic != null) { - for (Integer subtaskId : epic.getSubtasks()) { + epic.getSubtasks().forEach(subtaskId-> { subtasks.remove(subtaskId); historyManager.remove(subtaskId); - } + }); } - - } @Override public void clearTasks() { - for (Integer taskId : tasks.keySet()) { - historyManager.remove(taskId); - } + tasks.keySet().forEach(historyManager::remove); tasks.clear(); } @Override public void clearSubtasks() { - for (Epic epic : epics.values()) { + epics.values().forEach(epic -> { epic.clearSubtaskList(); epic.setStatus(StatusTask.NEW); - } - for (Integer subtaskId : subtasks.keySet()) { - historyManager.remove(subtaskId); - } + }); + subtasks.keySet().forEach(historyManager::remove); subtasks.clear(); } @Override public void clearEpics() { - for (Epic epic : epics.values()) { + epics.values().forEach(epic -> { historyManager.remove(epic.getId()); - for (Integer subtaskId : epic.getSubtasks()) { - historyManager.remove(subtaskId); - } - } + epic.getSubtasks().forEach(historyManager::remove); + }); epics.clear(); subtasks.clear(); } From add6b5b7dda010c61ad411e7aa2b0b79517c85e7 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Tue, 11 Feb 2025 20:28:02 +0500 Subject: [PATCH 13/18] fix codeStyle --- src/Main.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Main.java b/src/Main.java index c66fdbd..92508b9 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,10 +1,8 @@ -import managers.FileBackedTaskManager; import statuses.*; import managers.TaskManager; import tasks.*; import util.Managers; -import java.io.File; import java.time.Duration; import java.time.LocalDateTime; From 723de89e60cfe6a658d804150c52bfc7f10d3268 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Tue, 11 Feb 2025 20:30:29 +0500 Subject: [PATCH 14/18] fix codeStyle --- src/managers/InMemoryTaskManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 70c21d0..4f1af62 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -156,7 +156,7 @@ public void deleteEpic(int id) { Epic epic = epics.remove(id); historyManager.remove(id); if (epic != null) { - epic.getSubtasks().forEach(subtaskId-> { + epic.getSubtasks().forEach(subtaskId -> { subtasks.remove(subtaskId); historyManager.remove(subtaskId); }); @@ -229,9 +229,9 @@ public void updateEpic(Epic epic) { @Override public TreeSet getPrioritizedTasks() { - ArrayList tasksWithoutTimeNulls = tasks.values().stream(). - filter(task -> Objects.nonNull(task.getStartTime())). - collect(Collectors.toCollection(ArrayList::new)); + ArrayList tasksWithoutTimeNulls = tasks.values().stream() + .filter(task -> Objects.nonNull(task.getStartTime())) + .collect(Collectors.toCollection(ArrayList::new)); Comparator comparator = new Comparator() { From 4a423fd21b35fb742e86e6bb83cc5b37dcc96e46 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Tue, 11 Feb 2025 20:35:56 +0500 Subject: [PATCH 15/18] fix codeStyle --- src/managers/InMemoryTaskManager.java | 40 +++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 4f1af62..f918dfa 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -250,9 +250,9 @@ public int compare(Task o1, Task o2) { @Override public TreeSet getPrioritizedSubtasks() { - ArrayList subtasksWithoutTimeNulls = subtasks.values().stream(). - filter(task -> Objects.nonNull(task.getStartTime())). - collect(Collectors.toCollection(ArrayList::new)); + ArrayList subtasksWithoutTimeNulls = subtasks.values().stream() + .filter(task -> Objects.nonNull(task.getStartTime())) + .collect(Collectors.toCollection(ArrayList::new)); Comparator comparator = new Comparator() { @@ -271,9 +271,9 @@ public int compare(Task o1, Task o2) { @Override public TreeSet getPrioritizedEpics() { - ArrayList epicsWithoutTimeNulls = epics.values().stream(). - filter(task -> Objects.nonNull(task.getStartTime())). - collect(Collectors.toCollection(ArrayList::new)); + ArrayList epicsWithoutTimeNulls = epics.values().stream() + .filter(task -> Objects.nonNull(task.getStartTime())) + .collect(Collectors.toCollection(ArrayList::new)); Comparator comparator = new Comparator() { @@ -320,12 +320,12 @@ private void updateEpicStatus(int epicId) { private void updateEpicTimeInfo(int epicId) { Epic epic = epics.get(epicId); - LocalDateTime epicStartTime = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId). - getStartTime()).filter(Objects::nonNull).min(Comparator.naturalOrder()).orElse(null); - LocalDateTime epicEndTime = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId). - getEndTime()).filter(Objects::nonNull).max(Comparator.naturalOrder()).orElse(null); - Duration epicDuration = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId).getDuration()). - filter(Objects::nonNull).reduce(Duration.ZERO, Duration::plus); + LocalDateTime epicStartTime = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId) + .getStartTime()).filter(Objects::nonNull).min(Comparator.naturalOrder()).orElse(null); + LocalDateTime epicEndTime = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId) + .getEndTime()).filter(Objects::nonNull).max(Comparator.naturalOrder()).orElse(null); + Duration epicDuration = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId).getDuration()) + .filter(Objects::nonNull).reduce(Duration.ZERO, Duration::plus); epic.setStartTime(epicStartTime); epic.setEndTime(epicEndTime); epic.setDuration(epicDuration); @@ -336,8 +336,8 @@ private boolean isIntersectionTaskTime(Task task) { return false; } else { List intersectionsTasks = getPrioritizedTasks().stream().filter(prioritezedTask -> - Objects.nonNull(prioritezedTask.getEndTime())). - filter(prioritizedTask -> (prioritizedTask.getStartTime().isBefore(task.getStartTime()) + Objects.nonNull(prioritezedTask.getEndTime())) + .filter(prioritizedTask -> (prioritizedTask.getStartTime().isBefore(task.getStartTime()) && prioritizedTask.getEndTime().isAfter(task.getStartTime())) || (prioritizedTask.getStartTime().equals(task.getStartTime()) && prioritizedTask.getEndTime().equals(task.getEndTime()))).toList(); return !intersectionsTasks.isEmpty(); @@ -349,8 +349,8 @@ private boolean isIntersectionEpicTime(Epic epic) { return false; } else { List intersectionsEpics = getPrioritizedEpics().stream().filter(prioritezedEpic -> - Objects.nonNull(prioritezedEpic.getEndTime())). - filter(prioritizedEpic -> (prioritizedEpic.getStartTime().isBefore(epic.getStartTime()) + Objects.nonNull(prioritezedEpic.getEndTime())) + .filter(prioritizedEpic -> (prioritizedEpic.getStartTime().isBefore(epic.getStartTime()) && prioritizedEpic.getEndTime().isAfter(epic.getStartTime()))).toList(); return !intersectionsEpics.isEmpty(); } @@ -360,10 +360,10 @@ private boolean isIntersectionSubtaskTime(Subtask subtask) { if (!Objects.nonNull(subtask.getStartTime()) && !Objects.nonNull(subtask.getEndTime())) { return false; } else { - List intersectionsSubtasks = getPrioritizedSubtasks().stream(). - filter(prioritezedSubtask -> prioritezedSubtask.getEpicId() == subtask.getEpicId()). - filter(prioritezedSubtask -> Objects.nonNull(prioritezedSubtask.getEndTime())). - filter(prioritezedSubtask -> (prioritezedSubtask.getStartTime().isBefore(subtask.getStartTime()) + List intersectionsSubtasks = getPrioritizedSubtasks().stream() + .filter(prioritezedSubtask -> prioritezedSubtask.getEpicId() == subtask.getEpicId()) + .filter(prioritezedSubtask -> Objects.nonNull(prioritezedSubtask.getEndTime())) + .filter(prioritezedSubtask -> (prioritezedSubtask.getStartTime().isBefore(subtask.getStartTime()) && prioritezedSubtask.getEndTime().isAfter(subtask.getStartTime()))).toList(); return !intersectionsSubtasks.isEmpty(); } From 0d942cedcd03776a5db76cf7f88548ee3e26cc2a Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Thu, 13 Feb 2025 18:05:01 +0500 Subject: [PATCH 16/18] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D0=BB=D0=B5=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E=20+?= =?UTF-8?q?=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D1=8B=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.java | 2 - src/managers/InMemoryTaskManager.java | 97 ++++--------------- src/managers/TaskManager.java | 4 - test/FileBackendTaskManagerTest.java | 6 +- test/InMemoryTaskManagerTest.java | 129 ++++++++++++++------------ 5 files changed, 91 insertions(+), 147 deletions(-) diff --git a/src/Main.java b/src/Main.java index 92508b9..8534615 100644 --- a/src/Main.java +++ b/src/Main.java @@ -247,8 +247,6 @@ private static void printWorkinExamplePrioritizedTasks(TaskManager manager) { manager.addEpic(new Epic("Выгулять собаку5", "Погулять с Джеком 20 минут5")); manager.addSubtask(new Subtask("Выгулять собаку6", "Погулять с Джеком 20 минут6", 6, Duration.ofMinutes(100), LocalDateTime.of(2025, 6, 2, 10, 0))); manager.getPrioritizedTasks().forEach(System.out::println); - manager.getPrioritizedSubtasks().forEach(System.out::println); - manager.getPrioritizedEpics().forEach(System.out::println); } // private static void printWorkingExampleFromFile(File file) { diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index f918dfa..f9f7c9e 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -15,6 +15,14 @@ public class InMemoryTaskManager implements TaskManager { private final HashMap epics = new HashMap<>(); private final HistoryManager historyManager = Managers.getDefaultHistory(); private int taskId = 0; + private final Comparator comparator = new Comparator<>() { + + @Override + public int compare(Task o1, Task o2) { + return o1.getStartTime().compareTo(o2.getStartTime()); + } + }; + private final TreeSet prioritizedTasks = new TreeSet<>(comparator); @Override public ArrayList getTasks() { @@ -89,7 +97,7 @@ public void addTask(Task task) { @Override public void addSubtask(Subtask subtask) { Epic epic = epics.get(subtask.getEpicId()); - if (isIntersectionSubtaskTime(subtask)) { + if (isIntersectionTaskTime(subtask)) { System.out.println("Подзадача пересекается по времени с другими"); } else if (epic != null) { if (subtask.getId() == 0) { @@ -116,7 +124,7 @@ public void addSubtask(Subtask subtask) { @Override public void addEpic(Epic epic) { - if (isIntersectionEpicTime(epic)) { + if (isIntersectionTaskTime(epic)) { System.out.println("Эпик пересекается по времени с другими"); } else if (epic.getId() == 0) { do { @@ -196,7 +204,8 @@ public void updateTask(Task task) { System.out.println("Не существует такой задачи"); return; } - + prioritizedTasks.remove(tasks.get(id)); + prioritizedTasks.add(task); tasks.put(id, task); } @@ -207,7 +216,8 @@ public void updateSubtask(Subtask subtask) { System.out.println("Не существует такой подзадачи!"); return; } - + prioritizedTasks.remove(subtasks.get(id)); + prioritizedTasks.add(subtask); subtasks.put(id, subtask); updateEpicStatus(subtask.getEpicId()); updateEpicTimeInfo(subtask.getEpicId()); @@ -232,62 +242,14 @@ public TreeSet getPrioritizedTasks() { ArrayList tasksWithoutTimeNulls = tasks.values().stream() .filter(task -> Objects.nonNull(task.getStartTime())) .collect(Collectors.toCollection(ArrayList::new)); - - Comparator comparator = new Comparator() { - - @Override - public int compare(Task o1, Task o2) { - return o1.getStartTime().compareTo(o2.getStartTime()); - } - }; - - TreeSet prioritizedTasks = new TreeSet<>(comparator); - - prioritizedTasks.addAll(tasksWithoutTimeNulls); - - return prioritizedTasks; - } - - @Override - public TreeSet getPrioritizedSubtasks() { ArrayList subtasksWithoutTimeNulls = subtasks.values().stream() .filter(task -> Objects.nonNull(task.getStartTime())) .collect(Collectors.toCollection(ArrayList::new)); - Comparator comparator = new Comparator() { - - @Override - public int compare(Task o1, Task o2) { - return o1.getStartTime().compareTo(o2.getStartTime()); - } - }; - - TreeSet prioritizedSubtasks = new TreeSet<>(comparator); - - prioritizedSubtasks.addAll(subtasksWithoutTimeNulls); - - return prioritizedSubtasks; - } - - @Override - public TreeSet getPrioritizedEpics() { - ArrayList epicsWithoutTimeNulls = epics.values().stream() - .filter(task -> Objects.nonNull(task.getStartTime())) - .collect(Collectors.toCollection(ArrayList::new)); - - Comparator comparator = new Comparator() { - - @Override - public int compare(Task o1, Task o2) { - return o1.getStartTime().compareTo(o2.getStartTime()); - } - }; - - TreeSet prioritizedEpics = new TreeSet<>(comparator); - - prioritizedEpics.addAll(epicsWithoutTimeNulls); + prioritizedTasks.addAll(tasksWithoutTimeNulls); + prioritizedTasks.addAll(subtasksWithoutTimeNulls); - return prioritizedEpics; + return prioritizedTasks; } private boolean checkContainsAllTasks(T task) { @@ -344,29 +306,4 @@ private boolean isIntersectionTaskTime(Task task) { } } - private boolean isIntersectionEpicTime(Epic epic) { - if (!Objects.nonNull(epic.getStartTime()) && !Objects.nonNull(epic.getEndTime())) { - return false; - } else { - List intersectionsEpics = getPrioritizedEpics().stream().filter(prioritezedEpic -> - Objects.nonNull(prioritezedEpic.getEndTime())) - .filter(prioritizedEpic -> (prioritizedEpic.getStartTime().isBefore(epic.getStartTime()) - && prioritizedEpic.getEndTime().isAfter(epic.getStartTime()))).toList(); - return !intersectionsEpics.isEmpty(); - } - } - - private boolean isIntersectionSubtaskTime(Subtask subtask) { - if (!Objects.nonNull(subtask.getStartTime()) && !Objects.nonNull(subtask.getEndTime())) { - return false; - } else { - List intersectionsSubtasks = getPrioritizedSubtasks().stream() - .filter(prioritezedSubtask -> prioritezedSubtask.getEpicId() == subtask.getEpicId()) - .filter(prioritezedSubtask -> Objects.nonNull(prioritezedSubtask.getEndTime())) - .filter(prioritezedSubtask -> (prioritezedSubtask.getStartTime().isBefore(subtask.getStartTime()) - && prioritezedSubtask.getEndTime().isAfter(subtask.getStartTime()))).toList(); - return !intersectionsSubtasks.isEmpty(); - } - } - } diff --git a/src/managers/TaskManager.java b/src/managers/TaskManager.java index 5db3f19..b3144cb 100644 --- a/src/managers/TaskManager.java +++ b/src/managers/TaskManager.java @@ -25,10 +25,6 @@ public interface TaskManager { TreeSet getPrioritizedTasks(); - TreeSet getPrioritizedSubtasks(); - - TreeSet getPrioritizedEpics(); - void addTask(Task task); void addSubtask(Subtask subtask); diff --git a/test/FileBackendTaskManagerTest.java b/test/FileBackendTaskManagerTest.java index f16b491..be801a1 100644 --- a/test/FileBackendTaskManagerTest.java +++ b/test/FileBackendTaskManagerTest.java @@ -37,6 +37,8 @@ public class FileBackendTaskManagerTest { LocalTime.of(10, 0)); LocalDateTime startTime5 = LocalDateTime.of(LocalDate.of(2025, 2, 8), LocalTime.of(10, 0)); + LocalDateTime startTime6 = LocalDateTime.of(LocalDate.of(2025, 2, 9), + LocalTime.of(10, 0)); @BeforeEach public void setUp() throws IOException { @@ -97,7 +99,7 @@ public void loadTasksFromFileToManager() { task1 = new Task("TestName1", "TestDescription1", 1, duration1, startTime1); task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime2); epic1 = new Epic("TestName2", "TestDescription2", 3); - subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime1); + subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime3); try (FileWriter writer = new FileWriter(testTmpFile)) { writer.write(String.format("%s\n", header)); writer.write(String.format("%s\n", task1.toString())); @@ -135,7 +137,7 @@ public void loadTasksFromFileToManagerAddOtherTasks() { Task task3 = new Task("TestName1", "TestDescription1", duration1, startTime4); Task task4 = new Task("TestName4", "TestDescription4", duration1, startTime5); Epic epic4 = new Epic("TestName4", "TestDescription4"); - Subtask subtask4 = new Subtask("TestName8", "TestDescription8", 7, duration1, startTime4); + Subtask subtask4 = new Subtask("TestName8", "TestDescription8", 7, duration1, startTime6); manager.addTask(task3); manager.addTask(task4); manager.addEpic(epic4); diff --git a/test/InMemoryTaskManagerTest.java b/test/InMemoryTaskManagerTest.java index 9be8fcf..cc8375e 100644 --- a/test/InMemoryTaskManagerTest.java +++ b/test/InMemoryTaskManagerTest.java @@ -38,6 +38,17 @@ public class InMemoryTaskManagerTest { LocalTime.of(10, 0)); LocalDateTime startTime5 = LocalDateTime.of(LocalDate.of(2025, 2, 8), LocalTime.of(10, 0)); + LocalDateTime startTime6 = LocalDateTime.of(LocalDate.of(2025, 2, 9), + LocalTime.of(10, 0)); + LocalDateTime startTime7 = LocalDateTime.of(LocalDate.of(2025, 2, 10), + LocalTime.of(10, 0)); + LocalDateTime startTime8 = LocalDateTime.of(LocalDate.of(2025, 2, 11), + LocalTime.of(10, 0)); + LocalDateTime startTime9 = LocalDateTime.of(LocalDate.of(2025, 2, 12), + LocalTime.of(10, 0)); + LocalDateTime startTime10 = LocalDateTime.of(LocalDate.of(2025, 2, 13), + LocalTime.of(10, 0)); + @BeforeEach public void setUp() { @@ -66,7 +77,7 @@ public void addTasks() { manager.addTask(task2); manager.addEpic(epic1); manager.addEpic(epic2); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime3); manager.addSubtask(subtask1); Assertions.assertEquals(2, manager.getTasks().size()); Assertions.assertEquals(2, manager.getEpics().size()); @@ -108,7 +119,7 @@ public void addSubtaskWithTimeIntersection() { public void addSubtaskInEpic() { manager.addEpic(epic1); subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); - subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime2); manager.addSubtask(subtask1); manager.addSubtask(subtask2); Assertions.assertEquals(1, subtask1.getEpicId()); @@ -122,7 +133,7 @@ public void addSubtaskInEpic() { public void getTasksById() { manager.addTask(task1); manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime2); manager.addSubtask(subtask1); Assertions.assertEquals(task1, manager.getTask(1)); Assertions.assertEquals(epic1, manager.getEpic(2)); @@ -130,59 +141,31 @@ public void getTasksById() { } @Test - public void getPrioritizedTasks() { + public void getPrioritizedTasksAndSubtasks() { + manager.addEpic(epic1); task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); task2 = new Task("TestName2", "TestDescription2", duration1, startTime2); task3 = new Task("TestName3", "TestDescription3", duration1, startTime3); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); manager.addTask(task2); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); manager.addTask(task1); manager.addTask(task3); + manager.addSubtask(subtask3); ArrayList prioritizedTasks = new ArrayList<>(manager.getPrioritizedTasks()); ArrayList expectedPrioritizedTasks = new ArrayList<>(); expectedPrioritizedTasks.add(task1); expectedPrioritizedTasks.add(task2); expectedPrioritizedTasks.add(task3); + expectedPrioritizedTasks.add(subtask1); + expectedPrioritizedTasks.add(subtask2); + expectedPrioritizedTasks.add(subtask3); Assertions.assertEquals(expectedPrioritizedTasks, prioritizedTasks); } - @Test - public void getPrioritizedSubtasks() { - manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); - subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime2); - subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime3); - manager.addSubtask(subtask3); - manager.addSubtask(subtask2); - manager.addSubtask(subtask1); - ArrayList prioritizedSubtasks = new ArrayList<>(manager.getPrioritizedSubtasks()); - ArrayList expectedPrioritizedSubtasks = new ArrayList<>(); - expectedPrioritizedSubtasks.add(subtask1); - expectedPrioritizedSubtasks.add(subtask2); - expectedPrioritizedSubtasks.add(subtask3); - Assertions.assertEquals(expectedPrioritizedSubtasks, prioritizedSubtasks); - } - - @Test - public void getPrioritizedEpics() { - manager.addEpic(epic1); - epic2 = new Epic("TestName2", "TestDescription2"); - manager.addEpic(epic2); - epic3 = new Epic("TestName3", "TestDescription3"); - manager.addEpic(epic3); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); - subtask2 = new Subtask("TestName3", "TestDescription3", epic2.getId(), duration1, startTime2); - subtask3 = new Subtask("TestName3", "TestDescription3", epic3.getId(), duration1, startTime3); - manager.addSubtask(subtask1); - manager.addSubtask(subtask3); - manager.addSubtask(subtask2); - ArrayList prioritizedEpics = new ArrayList<>(manager.getPrioritizedEpics()); - ArrayList expectedPrioritizedEpics = new ArrayList<>(); - expectedPrioritizedEpics.add(epic1); - expectedPrioritizedEpics.add(epic2); - expectedPrioritizedEpics.add(epic3); - Assertions.assertEquals(expectedPrioritizedEpics, prioritizedEpics); - } - @Test public void deleteTaskById() { manager.addTask(task1); @@ -199,7 +182,7 @@ public void deleteTaskById() { public void deleteSubtaskById() { manager.addEpic(epic1); subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); - subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime2); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.deleteSubtask(2); @@ -267,8 +250,8 @@ public void clearSubtasksWithEpicUpdate() { manager.addEpic(epic1); manager.addEpic(epic2); subtask1 = new Subtask("TestName3", "TestDescription3", StatusTask.NEW, epic1.getId(), duration1, startTime1); - subtask2 = new Subtask("TestName7", "TestDescription7", StatusTask.IN_PROGRESS, epic1.getId(), duration1, startTime1); - subtask3 = new Subtask("TestName8", "TestDescription8", StatusTask.DONE, epic2.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", StatusTask.IN_PROGRESS, epic1.getId(), duration1, startTime2); + subtask3 = new Subtask("TestName8", "TestDescription8", StatusTask.DONE, epic2.getId(), duration1, startTime3); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.addSubtask(subtask3); @@ -285,7 +268,7 @@ public void clearSubtasksWithEpicUpdate() { public void updateTasks() { manager.addTask(task1); manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime2); manager.addSubtask(subtask1); manager.updateTask(new Task("TestName1Updated", "TestDescription1Updated", StatusTask.IN_PROGRESS, 1, duration1, startTime1)); @@ -329,6 +312,34 @@ public void updateSubtaskAndEpicStatus() { Assertions.assertEquals(StatusTask.NEW, epic1.getStatus()); } + @Test + public void updateTaskAndSubtaskInPrioritizedList() { + manager.addEpic(epic1); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName2", "TestDescription2", duration1, startTime2); + task3 = new Task("TestName3", "TestDescription3", duration1, startTime3); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addTask(task2); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); + manager.addTask(task1); + manager.addTask(task3); + manager.addSubtask(subtask3); + manager.updateTask(new Task("TestName1", "TestDescription1", 5, duration1, startTime7)); + manager.updateSubtask(new Subtask("TestName4", "TestDescription4", epic1.getId(), 3, duration1, startTime8)); + ArrayList prioritizedTasks = new ArrayList<>(manager.getPrioritizedTasks()); + ArrayList expectedPrioritizedTasks = new ArrayList<>(); + expectedPrioritizedTasks.add(task2); + expectedPrioritizedTasks.add(task3); + expectedPrioritizedTasks.add(subtask1); + expectedPrioritizedTasks.add(subtask3); + expectedPrioritizedTasks.add(task1); + expectedPrioritizedTasks.add(subtask2); + Assertions.assertEquals(expectedPrioritizedTasks, prioritizedTasks); + } + @Test public void getHistoryTasks() { task3 = new Task("TestName9", "TestDescription9", duration1, startTime3); @@ -342,11 +353,11 @@ public void getHistoryTasks() { manager.addEpic(epic2); manager.addEpic(epic3); - subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime1); - subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime2); - subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime3); - subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime4); - subtask6 = new Subtask("TestName6", "TestDescription6", epic3.getId(), duration1, startTime5); + subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime6); + subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime7); + subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime8); + subtask6 = new Subtask("TestName6", "TestDescription6", epic3.getId(), duration1, startTime9); manager.addSubtask(subtask2); manager.addSubtask(subtask3); @@ -385,10 +396,10 @@ public void deleteTaskdeleteTaskInHistory() { manager.addTask(task2); manager.addEpic(epic1); manager.addEpic(epic2); - subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime1); - subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); - subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime1); - subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime3); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime5); + subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime6); manager.addSubtask(subtask2); manager.addSubtask(subtask3); manager.addSubtask(subtask4); @@ -419,8 +430,8 @@ public void clearTasksAndHistory() { manager.addTask(task1); manager.addTask(task2); manager.addEpic(epic1); - subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime1); - subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime3); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); manager.addSubtask(subtask2); manager.addSubtask(subtask3); manager.getTask(1); @@ -442,8 +453,8 @@ public void clearTasksAndHistory() { Assertions.assertTrue(manager.getHistory().isEmpty()); Assertions.assertEquals(expectedHistory, manager.getHistory()); manager.addEpic(epic3); - subtask3 = new Subtask("TestName4", "TestDescription4", epic3.getId(), duration1, startTime1); - subtask4 = new Subtask("TestName5", "TestDescription5", epic3.getId(), duration1, startTime1); + subtask3 = new Subtask("TestName4", "TestDescription4", epic3.getId(), duration1, startTime3); + subtask4 = new Subtask("TestName5", "TestDescription5", epic3.getId(), duration1, startTime4); manager.addSubtask(subtask3); manager.addSubtask(subtask4); manager.getEpic(6); From 574239ce547e07221d1cb8933070a55507b2d660 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Fri, 14 Feb 2025 15:40:39 +0500 Subject: [PATCH 17/18] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B2=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/managers/InMemoryTaskManager.java | 32 ++++++++++++--------------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index f9f7c9e..0a00b1c 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -15,13 +15,8 @@ public class InMemoryTaskManager implements TaskManager { private final HashMap epics = new HashMap<>(); private final HistoryManager historyManager = Managers.getDefaultHistory(); private int taskId = 0; - private final Comparator comparator = new Comparator<>() { - - @Override - public int compare(Task o1, Task o2) { - return o1.getStartTime().compareTo(o2.getStartTime()); - } - }; + private final Comparator comparator = Comparator.comparing(Task::getStartTime, + Comparator.nullsLast(Comparator.naturalOrder())); private final TreeSet prioritizedTasks = new TreeSet<>(comparator); @Override @@ -87,8 +82,10 @@ public void addTask(Task task) { task.setId(taskId); } while (checkContainsAllTasks(task)); tasks.put(taskId, task); + prioritizedTasks.add(task); } else if (!checkContainsAllTasks(task)) { tasks.put(task.getId(), task); + prioritizedTasks.add(task); } else { System.out.println("Данные с таким id существуют в списке"); } @@ -106,11 +103,13 @@ public void addSubtask(Subtask subtask) { subtask.setId(taskId); } while (checkContainsAllTasks(subtask)); subtasks.put(taskId, subtask); + prioritizedTasks.add(subtask); epic.addSubtask(subtask); updateEpicStatus(subtask.getEpicId()); updateEpicTimeInfo(subtask.getEpicId()); } else if (!checkContainsAllTasks(subtask)) { subtasks.put(subtask.getId(), subtask); + prioritizedTasks.add(subtask); epic.addSubtask(subtask); updateEpicStatus(subtask.getEpicId()); updateEpicTimeInfo(subtask.getEpicId()); @@ -142,6 +141,7 @@ public void addEpic(Epic epic) { @Override public void deleteTask(int id) { + prioritizedTasks.remove(tasks.get(id)); tasks.remove(id); historyManager.remove(id); } @@ -155,6 +155,7 @@ public void deleteSubtask(int id) { updateEpicStatus(subtask.getEpicId()); updateEpicTimeInfo(subtask.getEpicId()); } + prioritizedTasks.remove(subtask); subtasks.remove(id); historyManager.remove(id); } @@ -165,6 +166,7 @@ public void deleteEpic(int id) { historyManager.remove(id); if (epic != null) { epic.getSubtasks().forEach(subtaskId -> { + prioritizedTasks.remove(subtasks.get(subtaskId)); subtasks.remove(subtaskId); historyManager.remove(subtaskId); }); @@ -173,6 +175,7 @@ public void deleteEpic(int id) { @Override public void clearTasks() { + tasks.values().forEach(prioritizedTasks::remove); tasks.keySet().forEach(historyManager::remove); tasks.clear(); } @@ -183,6 +186,7 @@ public void clearSubtasks() { epic.clearSubtaskList(); epic.setStatus(StatusTask.NEW); }); + subtasks.values().forEach(prioritizedTasks::remove); subtasks.keySet().forEach(historyManager::remove); subtasks.clear(); } @@ -194,6 +198,7 @@ public void clearEpics() { epic.getSubtasks().forEach(historyManager::remove); }); epics.clear(); + subtasks.values().forEach(prioritizedTasks::remove); subtasks.clear(); } @@ -239,17 +244,8 @@ public void updateEpic(Epic epic) { @Override public TreeSet getPrioritizedTasks() { - ArrayList tasksWithoutTimeNulls = tasks.values().stream() - .filter(task -> Objects.nonNull(task.getStartTime())) - .collect(Collectors.toCollection(ArrayList::new)); - ArrayList subtasksWithoutTimeNulls = subtasks.values().stream() - .filter(task -> Objects.nonNull(task.getStartTime())) - .collect(Collectors.toCollection(ArrayList::new)); - - prioritizedTasks.addAll(tasksWithoutTimeNulls); - prioritizedTasks.addAll(subtasksWithoutTimeNulls); - - return prioritizedTasks; + return prioritizedTasks.stream().filter(task -> Objects.nonNull(task.getStartTime())) + .collect(Collectors.toCollection(() -> new TreeSet<>(comparator))); } private boolean checkContainsAllTasks(T task) { From e4b581c0690b9162184112229f75d4e8a48f06b1 Mon Sep 17 00:00:00 2001 From: "kirill.fedorov" Date: Fri, 14 Feb 2025 15:52:59 +0500 Subject: [PATCH 18/18] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BE=D0=BA=20=D0=BF=D0=BE=20=D1=80=D0=B5=D0=B2?= =?UTF-8?q?=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/InMemoryTaskManagerTest.java | 82 ++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/test/InMemoryTaskManagerTest.java b/test/InMemoryTaskManagerTest.java index cc8375e..5202974 100644 --- a/test/InMemoryTaskManagerTest.java +++ b/test/InMemoryTaskManagerTest.java @@ -46,8 +46,6 @@ public class InMemoryTaskManagerTest { LocalTime.of(10, 0)); LocalDateTime startTime9 = LocalDateTime.of(LocalDate.of(2025, 2, 12), LocalTime.of(10, 0)); - LocalDateTime startTime10 = LocalDateTime.of(LocalDate.of(2025, 2, 13), - LocalTime.of(10, 0)); @BeforeEach @@ -208,6 +206,46 @@ public void deleteEpicByIdAndDeleteEpicSubtasks() { Assertions.assertEquals(0, manager.getSubtasks().size()); } + @Test + public void deleteTasksAndSubtasksInPrioritized() { + manager.addEpic(epic1); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName2", "TestDescription2", duration1, startTime2); + task3 = new Task("TestName3", "TestDescription3", duration1, startTime3); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addTask(task2); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); + manager.addTask(task1); + manager.addTask(task3); + manager.addSubtask(subtask3); + manager.deleteTask(5); + manager.deleteSubtask(4); + ArrayList expectedPrioritizedTasks = new ArrayList<>(); + expectedPrioritizedTasks.add(task2); + expectedPrioritizedTasks.add(task3); + expectedPrioritizedTasks.add(subtask2); + expectedPrioritizedTasks.add(subtask3); + ArrayList prioritizedTasks = new ArrayList<>(manager.getPrioritizedTasks()); + Assertions.assertEquals(expectedPrioritizedTasks, prioritizedTasks); + + } + + @Test + public void deleteSubtasksInPrioritizedWhenEpicDelete() { + manager.addEpic(epic1); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); + manager.addSubtask(subtask3); + manager.deleteEpic(1); + Assertions.assertTrue(manager.getPrioritizedTasks().isEmpty()); + } + @Test public void clearTasks() { manager.addTask(task1); @@ -264,6 +302,46 @@ public void clearSubtasksWithEpicUpdate() { Assertions.assertEquals(StatusTask.NEW, epic2.getStatus()); } + @Test + public void clearTasksAndSubtasksInPrioritized() { + manager.addEpic(epic1); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName2", "TestDescription2", duration1, startTime2); + task3 = new Task("TestName3", "TestDescription3", duration1, startTime3); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addTask(task2); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); + manager.addTask(task1); + manager.addTask(task3); + manager.addSubtask(subtask3); + manager.clearTasks(); + manager.clearSubtasks(); + Assertions.assertTrue(manager.getPrioritizedTasks().isEmpty()); + } + + @Test + public void clearSubtasksInPrioritizedWhenClearEpics() { + manager.addEpic(epic1); + manager.addEpic(epic2); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime2); + subtask3 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime3); + subtask4 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask5 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime5); + subtask6 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addSubtask(subtask5); + manager.addSubtask(subtask4); + manager.addSubtask(subtask1); + manager.addSubtask(subtask3); + manager.addSubtask(subtask2); + manager.addSubtask(subtask6); + manager.clearEpics(); + Assertions.assertTrue(manager.getPrioritizedTasks().isEmpty()); + } + @Test public void updateTasks() { manager.addTask(task1);