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
9 changes: 9 additions & 0 deletions java-kanban.iml
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,14 @@
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/24.0.0/annotations-24.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>
6 changes: 3 additions & 3 deletions src/ru/yandex/javacource/golotin/schedule/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
public interface HistoryManager {
void add(Task task);

List<Task> getHistory();
List<Task> getAll();

void remove(int id);


}
Original file line number Diff line number Diff line change
@@ -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<Task> 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<Integer, Node> 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<Task> getAll() {// вывод списка истории
List<Task> list = new ArrayList<>();
Node current = first;
while (current != null) {

current = current.next;
}
history.add(task);
return list;
}


@Override
public List<Task> 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;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,24 +12,22 @@


public class InMemoryTaskManager implements TaskManager {
private int counterId = 0;
private final Map<Integer, Task> tasks = new HashMap<>();
private final Map<Integer, Epic> epics = new HashMap<>();
private final Map<Integer, Subtask> subtasks = new HashMap<>();

private final HistoryManager historyManager = Manager.getDefaultHistory();

protected int counterId = 0;
final Map<Integer, Task> tasks = new HashMap<>();
final Map<Integer, Epic> epics = new HashMap<>();
final Map<Integer, Subtask> 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);
return task;
}

@Override
public Epic createEpic(Epic epic) {
public Epic createEpic(Epic epic) {// создание Epic
final int id = ++counterId;
epic.setId(id);
epics.put(id, epic);
Expand All @@ -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) {
Expand All @@ -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) {
Expand All @@ -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;
Expand All @@ -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);
Expand All @@ -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());
Expand All @@ -102,7 +100,7 @@ public void cleanSubtasks() {
}

@Override
public void cleanEpics() {
public void cleanEpics() {// очистка списка Epics и Subtasks
epics.clear();
subtasks.clear();

Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -138,15 +136,15 @@ public void deleteEpic(int id) {
@Override
public ArrayList<Task> getTasks() {
return new ArrayList<>(tasks.values());
}
}// получаем список Tasks

@Override
public ArrayList<Epic> getEpics() {
return new ArrayList<>(epics.values());
}
}// получаем список Epics

@Override
public ArrayList<Subtask> getEpicSubtasks(int epicId) {
public ArrayList<Subtask> getEpicSubtasks(int epicId) {// получаем список Epic с Subtasks
Epic epic = epics.get(epicId);
ArrayList<Subtask> getSubtasks = null;
for (Integer subtaskId : epic.getSubtaskIds()) {
Expand All @@ -158,33 +156,33 @@ public ArrayList<Subtask> 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;

}

@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<Task> getHistory() {
return historyManager.getHistory();
public List<Task> getHistory() {// получаем список истории
return historyManager.getAll();
}

private void updateEpicStatus(int epicId) {
private void updateEpicStatus(int epicId) {// обновление статуса Epic
Epic epic = epics.get(epicId);
ArrayList<Subtask> subtasks = new ArrayList<>();
for (Integer subtaskId : epic.getSubtaskIds()) {
Expand Down