diff --git a/java-kanban.iml b/java-kanban.iml
index d8a1435..e866a4a 100644
--- a/java-kanban.iml
+++ b/java-kanban.iml
@@ -33,5 +33,14 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/ru/yandex/javacource/golotin/schedule/Main.java b/src/ru/yandex/javacource/golotin/schedule/Main.java
index 121c6e4..bf9e5d0 100644
--- a/src/ru/yandex/javacource/golotin/schedule/Main.java
+++ b/src/ru/yandex/javacource/golotin/schedule/Main.java
@@ -22,9 +22,9 @@ public static void main(String[] args) {
taskManager.updateTask(new Task("Дом", Status.IN_PROGRESS, "Уборка в кухни и ванной"));
- // taskManager.updateEpic(new Epic("Прогулка", Status.NEW, "Не пойду гулять"));
- // taskManager.updateSubtask(new Subtask("Уборка", Status.IN_PROGRESS, "Убираюсь)"));
- // taskManager.updateSubtask(new Subtask("Сделать кофе", Status.DONE, "Кофе приготовлено"));
+ taskManager.updateEpic(new Epic("Прогулка", Status.NEW, "Не пойду гулять"));
+ taskManager.updateSubtask(new Subtask("Уборка", Status.IN_PROGRESS, "Убираюсь)", 1));
+ taskManager.updateSubtask(new Subtask("Сделать кофе", Status.DONE, "Кофе приготовлено", 1));
System.out.println(taskManager.getTasks());
diff --git a/src/ru/yandex/javacource/golotin/schedule/service/HistoryManager.java b/src/ru/yandex/javacource/golotin/schedule/service/HistoryManager.java
index a87f042..3c98d5b 100644
--- a/src/ru/yandex/javacource/golotin/schedule/service/HistoryManager.java
+++ b/src/ru/yandex/javacource/golotin/schedule/service/HistoryManager.java
@@ -7,7 +7,9 @@
public interface HistoryManager {
void add(Task task);
- List getHistory();
+ List getAll();
+
+ void remove(int id);
}
\ No newline at end of file
diff --git a/src/ru/yandex/javacource/golotin/schedule/service/InMemoryHistoryManager.java b/src/ru/yandex/javacource/golotin/schedule/service/InMemoryHistoryManager.java
index a572828..701c08e 100644
--- a/src/ru/yandex/javacource/golotin/schedule/service/InMemoryHistoryManager.java
+++ b/src/ru/yandex/javacource/golotin/schedule/service/InMemoryHistoryManager.java
@@ -1,28 +1,91 @@
package ru.yandex.javacource.golotin.schedule.service;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import ru.yandex.javacource.golotin.schedule.model.Task;
-import ru.yandex.javacource.golotin.schedule.service.HistoryManager;
public class InMemoryHistoryManager implements HistoryManager {
- private static final int HISTOY_MAX_SIZE = 10;
- private final List history = new ArrayList<>();
+
+ private static class Node {
+ Task item;
+ Node next;
+ Node prev;
+
+ Node(Node prev, Task element, Node next) {// присвоение prev, element, next
+ this.item = element;
+ this.next = next;
+ this.prev = prev;
+ }
+ }
+
+ private static final Map history = new HashMap<>();
+ private Node first;
+ private Node last;
@Override
- public void add(Task task) {
+ public void add(Task task) {// добавление Task
+
if (task == null) {
return;
+ }else {
+ remove(task.getId());
+ linkLast(task);
+ history.put(task.getId(), last);
+
}
- if (history.size() >= HISTOY_MAX_SIZE) {
- history.remove(0);
+ }
+
+ @Override
+ public List getAll() {// вывод списка истории
+ List list = new ArrayList<>();
+ Node current = first;
+ while (current != null) {
+
+ current = current.next;
}
- history.add(task);
+ return list;
}
+
@Override
- public List getHistory() {
- return history;
+ public void remove(int id) {// удаление по id
+ final Node node = history.remove(id);
+ if (node == null) {
+ return;
+ }
+ removeNode(node);
+ }
+
+ private void removeNode(Node node) {
+
+ if (node.prev != null) {
+ node.prev.next = node.next;
+ if (node.next == null) {
+ last = node.prev;
+ } else {
+ node.next.prev = node.prev;
+ }
+ } else {
+ first = node.next;
+ if (first == null) {
+ last = null;
+ } else {
+ first.prev = null;
+ }
+ }
+ }
+
+ private void linkLast(Task task) {// двигаем историю
+ final Node lastLink = last;
+ final Node newNode = new Node(lastLink, task, null);
+ last = newNode;
+ if (lastLink == null) {
+ first = newNode;
+ } else {
+ lastLink.next = newNode;
+ }
}
}
\ No newline at end of file
diff --git a/src/ru/yandex/javacource/golotin/schedule/service/InMemoryTaskManager.java b/src/ru/yandex/javacource/golotin/schedule/service/InMemoryTaskManager.java
index ca6141c..4d81f5f 100644
--- a/src/ru/yandex/javacource/golotin/schedule/service/InMemoryTaskManager.java
+++ b/src/ru/yandex/javacource/golotin/schedule/service/InMemoryTaskManager.java
@@ -12,16 +12,14 @@
public class InMemoryTaskManager implements TaskManager {
- private int counterId = 0;
- private final Map tasks = new HashMap<>();
- private final Map epics = new HashMap<>();
- private final Map subtasks = new HashMap<>();
-
- private final HistoryManager historyManager = Manager.getDefaultHistory();
-
+ protected int counterId = 0;
+ final Map tasks = new HashMap<>();
+ final Map epics = new HashMap<>();
+ final Map subtasks = new HashMap<>();
+ final HistoryManager historyManager = Manager.getDefaultHistory();
@Override
- public Task createTask(Task task) {
+ public Task createTask(Task task) {// создание Task
final int id = ++counterId;
task.setId(id);
tasks.put(id, task);
@@ -29,7 +27,7 @@ public Task createTask(Task task) {
}
@Override
- public Epic createEpic(Epic epic) {
+ public Epic createEpic(Epic epic) {// создание Epic
final int id = ++counterId;
epic.setId(id);
epics.put(id, epic);
@@ -38,7 +36,7 @@ public Epic createEpic(Epic epic) {
@Override
- public Subtask createSubtask(Subtask subtask) {
+ public Subtask createSubtask(Subtask subtask) {// создание Subtask
final int epicId = subtask.getEpicId();
Epic epic = epics.get(epicId);
if (epic == null) {
@@ -53,7 +51,7 @@ public Subtask createSubtask(Subtask subtask) {
}
@Override
- public void updateTask(Task task) {
+ public void updateTask(Task task) {// обновление Task
final int id = task.getId();
final Task savedTask = tasks.get(id);
if (savedTask == null) {
@@ -63,7 +61,7 @@ public void updateTask(Task task) {
}
@Override
- public void updateEpic(Epic epic) {
+ public void updateEpic(Epic epic) {// обновление Epic
Epic savedEpic = epics.get(epic.getId());
if (savedEpic == null) {
return;
@@ -73,7 +71,7 @@ public void updateEpic(Epic epic) {
}
@Override
- public void updateSubtask(Subtask subtask) {
+ public void updateSubtask(Subtask subtask) {// обновление Subtask
final int id = subtask.getId();
final int epicId = subtask.getEpicId();
final Subtask savedSubtask = subtasks.get(id);
@@ -85,15 +83,15 @@ public void updateSubtask(Subtask subtask) {
return;
}
subtasks.put(id, subtask);
- updateEpicStatus(epicId);
+ updateEpicStatus(epicId);// обновление статуса у Epic
}
@Override
public void cleanTasks() {
tasks.clear();
- }
+ }// очистка списка Tasks
- public void cleanSubtasks() {
+ public void cleanSubtasks() {// очистка списка Subtasks
for (Epic epic : epics.values()) {
epic.cleanSubtask();
updateEpicStatus(epic.getId());
@@ -102,7 +100,7 @@ public void cleanSubtasks() {
}
@Override
- public void cleanEpics() {
+ public void cleanEpics() {// очистка списка Epics и Subtasks
epics.clear();
subtasks.clear();
@@ -111,10 +109,10 @@ public void cleanEpics() {
@Override
public void deleteTask(int id) {
tasks.remove(id);
- }
+ }// удаление по id Task
@Override
- public void deleteSubtask(int id) {
+ public void deleteSubtask(int id) {// удаление по id Subtask
Subtask subtask = subtasks.remove(id);
if (subtask == null) {
return;
@@ -125,7 +123,7 @@ public void deleteSubtask(int id) {
}
@Override
- public void deleteEpic(int id) {
+ public void deleteEpic(int id) {// удаление по id Epic
Epic epic = epics.remove(id);
if (epic == null) {
return;
@@ -138,15 +136,15 @@ public void deleteEpic(int id) {
@Override
public ArrayList getTasks() {
return new ArrayList<>(tasks.values());
- }
+ }// получаем список Tasks
@Override
public ArrayList getEpics() {
return new ArrayList<>(epics.values());
- }
+ }// получаем список Epics
@Override
- public ArrayList getEpicSubtasks(int epicId) {
+ public ArrayList getEpicSubtasks(int epicId) {// получаем список Epic с Subtasks
Epic epic = epics.get(epicId);
ArrayList getSubtasks = null;
for (Integer subtaskId : epic.getSubtaskIds()) {
@@ -158,7 +156,7 @@ public ArrayList getEpicSubtasks(int epicId) {
}
@Override
- public Task getTask(int id) {
+ public Task getTask(int id) {// получаем Task по id
final Task task = tasks.get(id);
historyManager.add(task);
return task;
@@ -166,25 +164,25 @@ public Task getTask(int id) {
}
@Override
- public Epic getEpic(int id) {
+ public Epic getEpic(int id) {// получаем Epic по id
final Epic epic = epics.get(id);
historyManager.add(epic);
return epic;
}
@Override
- public Subtask getSubtask(int id) {
+ public Subtask getSubtask(int id) {// получаем Subtask по id
final Subtask subtask = subtasks.get(id);
historyManager.add(subtask);
return subtask;
}
@Override
- public List getHistory() {
- return historyManager.getHistory();
+ public List getHistory() {// получаем список истории
+ return historyManager.getAll();
}
- private void updateEpicStatus(int epicId) {
+ private void updateEpicStatus(int epicId) {// обновление статуса Epic
Epic epic = epics.get(epicId);
ArrayList subtasks = new ArrayList<>();
for (Integer subtaskId : epic.getSubtaskIds()) {