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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 22 additions & 24 deletions src/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,16 @@ public static void main(String[] args) {
Task task1 = taskManager.addTask(new Task("Звонок бабушке", "Позвонить, чтобы узнать новости"));
Task task2 = taskManager.addTask(new Task("Стирка", "Постирать белые вещи"));

//Создание эпика b добавление подзадач
Epic epic1 = taskManager.addEpic(new Epic("Сделать домашнее задание","Задание для 4 спринта"));
//Создание эпиков и добавление подзадач
Epic epic1 = taskManager.addEpic(new Epic("Сделать домашнее задание","Задание для 6 спринта"));
Subtask subtask1 = taskManager.addSubtask(new Subtask("Изучить теорию",
"Прочитать теорию на сайте", epic1.getId()));
Subtask subtask2 = taskManager.addSubtask(new Subtask("Освоить тренажёр",
"Выполнить все задания", epic1.getId()));

Subtask subtask3 = taskManager.addSubtask(new Subtask("Прослушать вебинар",
"Подключиться на вебинар в среду", epic1.getId()));

Epic epic2 = taskManager.addEpic(new Epic("Переезд","Подготовиться к переезду"));
Subtask subtask3 = taskManager.addSubtask(new Subtask("Собрать вещи",
"Собрать вещи в коробки", epic2.getId()));

printAllTasks(taskManager);

Expand All @@ -36,32 +35,31 @@ public static void main(String[] args) {
updatedSubtask2.setStatus(TaskStatus.DONE);
taskManager.updateSubtask(updatedSubtask2);

Subtask updatedSubtask3 = new Subtask("Расхламиться", "Выкинуть старые вещи",
epic2.getId());
Subtask updatedSubtask3 = new Subtask("Изучить доп.материалы", "Прочитать книгу по алгоритмам",
epic1.getId());
updatedSubtask3.setId(subtask3.getId());
updatedSubtask3.setStatus(TaskStatus.DONE);
taskManager.updateSubtask(updatedSubtask3);
updatedSubtask3.setName("Поиграть в компьютер"); //нужно, чтобы проверить, что название не изменится

//Подготовка для отображения истории (проверка разных типов задач)
printAllTasks(taskManager);

//Подготовка для отображения истории
taskManager.getTaskById(task2.getId());
taskManager.getEpicById(epic1.getId());
taskManager.getSubtaskById(subtask1.getId());
taskManager.getSubtaskById(subtask2.getId());
taskManager.getEpicById(epic2.getId());
taskManager.getSubtaskById(subtask3.getId());
printAllTasks(taskManager);

taskManager.getTaskById(task2.getId());
taskManager.getSubtaskById(subtask1.getId());
printAllTasks(taskManager);

//Проверка методов удаления
//Проверка удаления задачи из истории
taskManager.deleteTaskById(task2.getId());
taskManager.deleteEpicById(epic1.getId());
taskManager.deleteSubtaskById(subtask3.getId());

//Подготовка для отображения истории (проверка обновления списка)
int count = 0;
while (count < 10) {
taskManager.getTaskById(task1.getId());
count++;
}

printAllTasks(taskManager);
}

Expand All @@ -73,18 +71,18 @@ public static void printAllTasks(TaskManager taskManager) {
}
System.out.println();

System.out.println("Cписок всех подзадач: ");
for (Subtask subtask : taskManager.getAllSubtasks()) {
System.out.println(subtask);
}
System.out.println();

System.out.println("Cписок всех эпиков: ");
for (Epic epic : taskManager.getAllEpics()) {
System.out.println(epic);
}
System.out.println();

System.out.println("Cписок всех подзадач: ");
for (Subtask subtask : taskManager.getAllSubtasks()) {
System.out.println(subtask);
}
System.out.println();

System.out.println("История:");
for (Task task : taskManager.getHistory()) {
System.out.println(task);
Expand Down
1 change: 1 addition & 0 deletions src/ru/yandex/javacourse/model/Epic.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public Epic getCopy() {
Epic epicCopy = new Epic(this.getName(), this.getDescription());
epicCopy.setId(this.getId());
epicCopy.setStatus(this.getStatus());
epicCopy.setSubtasksIdList(new ArrayList<>(this.getSubtasksIdList()));
return epicCopy;
}

Expand Down
2 changes: 2 additions & 0 deletions src/ru/yandex/javacourse/service/HistoryManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ public interface HistoryManager {
List<Task> getHistory();

void add(Task task);

void remove(int id);
}
92 changes: 76 additions & 16 deletions src/ru/yandex/javacourse/service/InMemoryHistoryManager.java
Original file line number Diff line number Diff line change
@@ -1,40 +1,100 @@
package ru.yandex.javacourse.service;

import ru.yandex.javacourse.model.Epic;
import ru.yandex.javacourse.model.Subtask;
import ru.yandex.javacourse.model.Task;
import java.util.LinkedList;

import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import java.util.HashMap;

public class InMemoryHistoryManager implements HistoryManager {
private final List<Task> viewedTasks = new LinkedList<>();
private static final int MAX_HISTORY_SIZE = 10;
private Node<Task> head;
private Node<Task> tail;
private final Map<Integer, Node<Task>> idToNode = new HashMap<>();
private int size = 0;

@Override
public List<Task> getHistory() {
return new LinkedList<>(viewedTasks);
List<Task> historyList = new ArrayList<>(size);
Node<Task> current = head;
while (current != null) {
historyList.add(current.data);
current = current.next;
}
return historyList;
}

@Override
public void add(Task task) {
if (task == null) {
return;
}
int taskId = task.getId();
remove(taskId);
linkLast(task);
}

if (viewedTasks.size() == MAX_HISTORY_SIZE) {
viewedTasks.removeFirst();
@Override
public void remove(int id) {
Node<Task> node = idToNode.get(id);
if (node != null) {
removeNode(node);
}
}

if (task instanceof Epic epic) {
Epic savedEpic = epic.getCopy();
viewedTasks.add(savedEpic);
} else if (task instanceof Subtask subtask) {
Subtask savedSubtask = subtask.getCopy();
viewedTasks.add(savedSubtask);
private void linkLast(Task task) {
if (task == null) {
return;
}

Task taskCopy = task.getCopy();
if (taskCopy == null) {
return;
}

Node<Task> oldTail = tail;
Node<Task> createdNode = new Node<>(oldTail, taskCopy, null);
tail = createdNode;
if (oldTail == null) {
head = createdNode;
} else {
Task savedTask = task.getCopy();
viewedTasks.add(savedTask);
oldTail.next = createdNode;
}
idToNode.put(taskCopy.getId(), createdNode);
size++;
}

public List<Task> getTasks() {
List<Task> allTasks = new ArrayList<>();
for (Node<Task> node : idToNode.values()) {
allTasks.add(node.data);
}
return allTasks;
}

private void removeNode(Node<Task> node) {
if (node == null) {
return;
}

Node<Task> prevNode = node.prev;
Node<Task> nextNode = node.next;

if (prevNode == null) {
head = nextNode;
} else {
prevNode.next = nextNode;
}

if (nextNode == null) {
tail = prevNode;
} else {
nextNode.prev = prevNode;
}

node.prev = null;
node.next = null;
idToNode.remove(node.data.getId());
size--;
}
}
Loading