Skip to content

Commit ba7db61

Browse files
authored
Merge pull request #1 from 1EVILGUN1/develop
java sprint 6 v1.0
2 parents 7eaa05a + f7df6a3 commit ba7db61

File tree

5 files changed

+114
-42
lines changed

5 files changed

+114
-42
lines changed

java-kanban.iml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,14 @@
3333
<SOURCES />
3434
</library>
3535
</orderEntry>
36+
<orderEntry type="module-library">
37+
<library>
38+
<CLASSES>
39+
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/24.0.0/annotations-24.0.0.jar!/" />
40+
</CLASSES>
41+
<JAVADOC />
42+
<SOURCES />
43+
</library>
44+
</orderEntry>
3645
</component>
3746
</module>

src/ru/yandex/javacource/golotin/schedule/Main.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ public static void main(String[] args) {
2222

2323
taskManager.updateTask(new Task("Дом", Status.IN_PROGRESS, "Уборка в кухни и ванной"));
2424

25-
// taskManager.updateEpic(new Epic("Прогулка", Status.NEW, "Не пойду гулять"));
26-
// taskManager.updateSubtask(new Subtask("Уборка", Status.IN_PROGRESS, "Убираюсь)"));
27-
// taskManager.updateSubtask(new Subtask("Сделать кофе", Status.DONE, "Кофе приготовлено"));
25+
taskManager.updateEpic(new Epic("Прогулка", Status.NEW, "Не пойду гулять"));
26+
taskManager.updateSubtask(new Subtask("Уборка", Status.IN_PROGRESS, "Убираюсь)", 1));
27+
taskManager.updateSubtask(new Subtask("Сделать кофе", Status.DONE, "Кофе приготовлено", 1));
2828

2929

3030
System.out.println(taskManager.getTasks());

src/ru/yandex/javacource/golotin/schedule/service/HistoryManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
public interface HistoryManager {
88
void add(Task task);
99

10-
List<Task> getHistory();
10+
List<Task> getAll();
11+
12+
void remove(int id);
1113

1214

1315
}
Lines changed: 72 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,91 @@
11
package ru.yandex.javacource.golotin.schedule.service;
22

33
import java.util.ArrayList;
4+
import java.util.HashMap;
45
import java.util.List;
6+
import java.util.Map;
57

68
import ru.yandex.javacource.golotin.schedule.model.Task;
7-
import ru.yandex.javacource.golotin.schedule.service.HistoryManager;
89

910
public class InMemoryHistoryManager implements HistoryManager {
10-
private static final int HISTOY_MAX_SIZE = 10;
11-
private final List<Task> history = new ArrayList<>();
11+
12+
private static class Node {
13+
Task item;
14+
Node next;
15+
Node prev;
16+
17+
Node(Node prev, Task element, Node next) {// присвоение prev, element, next
18+
this.item = element;
19+
this.next = next;
20+
this.prev = prev;
21+
}
22+
}
23+
24+
private static final Map<Integer, Node> history = new HashMap<>();
25+
private Node first;
26+
private Node last;
1227

1328
@Override
14-
public void add(Task task) {
29+
public void add(Task task) {// добавление Task
30+
1531
if (task == null) {
1632
return;
33+
}else {
34+
remove(task.getId());
35+
linkLast(task);
36+
history.put(task.getId(), last);
37+
1738
}
18-
if (history.size() >= HISTOY_MAX_SIZE) {
19-
history.remove(0);
39+
}
40+
41+
@Override
42+
public List<Task> getAll() {// вывод списка истории
43+
List<Task> list = new ArrayList<>();
44+
Node current = first;
45+
while (current != null) {
46+
47+
current = current.next;
2048
}
21-
history.add(task);
49+
return list;
2250
}
2351

52+
2453
@Override
25-
public List<Task> getHistory() {
26-
return history;
54+
public void remove(int id) {// удаление по id
55+
final Node node = history.remove(id);
56+
if (node == null) {
57+
return;
58+
}
59+
removeNode(node);
60+
}
61+
62+
private void removeNode(Node node) {
63+
64+
if (node.prev != null) {
65+
node.prev.next = node.next;
66+
if (node.next == null) {
67+
last = node.prev;
68+
} else {
69+
node.next.prev = node.prev;
70+
}
71+
} else {
72+
first = node.next;
73+
if (first == null) {
74+
last = null;
75+
} else {
76+
first.prev = null;
77+
}
78+
}
79+
}
80+
81+
private void linkLast(Task task) {// двигаем историю
82+
final Node lastLink = last;
83+
final Node newNode = new Node(lastLink, task, null);
84+
last = newNode;
85+
if (lastLink == null) {
86+
first = newNode;
87+
} else {
88+
lastLink.next = newNode;
89+
}
2790
}
2891
}

src/ru/yandex/javacource/golotin/schedule/service/InMemoryTaskManager.java

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,22 @@
1212

1313

1414
public class InMemoryTaskManager implements TaskManager {
15-
private int counterId = 0;
16-
private final Map<Integer, Task> tasks = new HashMap<>();
17-
private final Map<Integer, Epic> epics = new HashMap<>();
18-
private final Map<Integer, Subtask> subtasks = new HashMap<>();
19-
20-
private final HistoryManager historyManager = Manager.getDefaultHistory();
21-
15+
protected int counterId = 0;
16+
final Map<Integer, Task> tasks = new HashMap<>();
17+
final Map<Integer, Epic> epics = new HashMap<>();
18+
final Map<Integer, Subtask> subtasks = new HashMap<>();
19+
final HistoryManager historyManager = Manager.getDefaultHistory();
2220

2321
@Override
24-
public Task createTask(Task task) {
22+
public Task createTask(Task task) {// создание Task
2523
final int id = ++counterId;
2624
task.setId(id);
2725
tasks.put(id, task);
2826
return task;
2927
}
3028

3129
@Override
32-
public Epic createEpic(Epic epic) {
30+
public Epic createEpic(Epic epic) {// создание Epic
3331
final int id = ++counterId;
3432
epic.setId(id);
3533
epics.put(id, epic);
@@ -38,7 +36,7 @@ public Epic createEpic(Epic epic) {
3836

3937

4038
@Override
41-
public Subtask createSubtask(Subtask subtask) {
39+
public Subtask createSubtask(Subtask subtask) {// создание Subtask
4240
final int epicId = subtask.getEpicId();
4341
Epic epic = epics.get(epicId);
4442
if (epic == null) {
@@ -53,7 +51,7 @@ public Subtask createSubtask(Subtask subtask) {
5351
}
5452

5553
@Override
56-
public void updateTask(Task task) {
54+
public void updateTask(Task task) {// обновление Task
5755
final int id = task.getId();
5856
final Task savedTask = tasks.get(id);
5957
if (savedTask == null) {
@@ -63,7 +61,7 @@ public void updateTask(Task task) {
6361
}
6462

6563
@Override
66-
public void updateEpic(Epic epic) {
64+
public void updateEpic(Epic epic) {// обновление Epic
6765
Epic savedEpic = epics.get(epic.getId());
6866
if (savedEpic == null) {
6967
return;
@@ -73,7 +71,7 @@ public void updateEpic(Epic epic) {
7371
}
7472

7573
@Override
76-
public void updateSubtask(Subtask subtask) {
74+
public void updateSubtask(Subtask subtask) {// обновление Subtask
7775
final int id = subtask.getId();
7876
final int epicId = subtask.getEpicId();
7977
final Subtask savedSubtask = subtasks.get(id);
@@ -85,15 +83,15 @@ public void updateSubtask(Subtask subtask) {
8583
return;
8684
}
8785
subtasks.put(id, subtask);
88-
updateEpicStatus(epicId);
86+
updateEpicStatus(epicId);// обновление статуса у Epic
8987
}
9088

9189
@Override
9290
public void cleanTasks() {
9391
tasks.clear();
94-
}
92+
}// очистка списка Tasks
9593

96-
public void cleanSubtasks() {
94+
public void cleanSubtasks() {// очистка списка Subtasks
9795
for (Epic epic : epics.values()) {
9896
epic.cleanSubtask();
9997
updateEpicStatus(epic.getId());
@@ -102,7 +100,7 @@ public void cleanSubtasks() {
102100
}
103101

104102
@Override
105-
public void cleanEpics() {
103+
public void cleanEpics() {// очистка списка Epics и Subtasks
106104
epics.clear();
107105
subtasks.clear();
108106

@@ -111,10 +109,10 @@ public void cleanEpics() {
111109
@Override
112110
public void deleteTask(int id) {
113111
tasks.remove(id);
114-
}
112+
}// удаление по id Task
115113

116114
@Override
117-
public void deleteSubtask(int id) {
115+
public void deleteSubtask(int id) {// удаление по id Subtask
118116
Subtask subtask = subtasks.remove(id);
119117
if (subtask == null) {
120118
return;
@@ -125,7 +123,7 @@ public void deleteSubtask(int id) {
125123
}
126124

127125
@Override
128-
public void deleteEpic(int id) {
126+
public void deleteEpic(int id) {// удаление по id Epic
129127
Epic epic = epics.remove(id);
130128
if (epic == null) {
131129
return;
@@ -138,15 +136,15 @@ public void deleteEpic(int id) {
138136
@Override
139137
public ArrayList<Task> getTasks() {
140138
return new ArrayList<>(tasks.values());
141-
}
139+
}// получаем список Tasks
142140

143141
@Override
144142
public ArrayList<Epic> getEpics() {
145143
return new ArrayList<>(epics.values());
146-
}
144+
}// получаем список Epics
147145

148146
@Override
149-
public ArrayList<Subtask> getEpicSubtasks(int epicId) {
147+
public ArrayList<Subtask> getEpicSubtasks(int epicId) {// получаем список Epic с Subtasks
150148
Epic epic = epics.get(epicId);
151149
ArrayList<Subtask> getSubtasks = null;
152150
for (Integer subtaskId : epic.getSubtaskIds()) {
@@ -158,33 +156,33 @@ public ArrayList<Subtask> getEpicSubtasks(int epicId) {
158156
}
159157

160158
@Override
161-
public Task getTask(int id) {
159+
public Task getTask(int id) {// получаем Task по id
162160
final Task task = tasks.get(id);
163161
historyManager.add(task);
164162
return task;
165163

166164
}
167165

168166
@Override
169-
public Epic getEpic(int id) {
167+
public Epic getEpic(int id) {// получаем Epic по id
170168
final Epic epic = epics.get(id);
171169
historyManager.add(epic);
172170
return epic;
173171
}
174172

175173
@Override
176-
public Subtask getSubtask(int id) {
174+
public Subtask getSubtask(int id) {// получаем Subtask по id
177175
final Subtask subtask = subtasks.get(id);
178176
historyManager.add(subtask);
179177
return subtask;
180178
}
181179

182180
@Override
183-
public List<Task> getHistory() {
184-
return historyManager.getHistory();
181+
public List<Task> getHistory() {// получаем список истории
182+
return historyManager.getAll();
185183
}
186184

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

0 commit comments

Comments
 (0)