11package ru .yandex .javacource .golotin .schedule .service ;
22
3+ import ru .yandex .javacource .golotin .schedule .exception .ManagerSaveException ;
34import ru .yandex .javacource .golotin .schedule .exception .NotFoundException ;
45import ru .yandex .javacource .golotin .schedule .model .Epic ;
56import ru .yandex .javacource .golotin .schedule .model .Status ;
67import ru .yandex .javacource .golotin .schedule .model .Subtask ;
78import ru .yandex .javacource .golotin .schedule .model .Task ;
89
9- import java .util .ArrayList ;
10- import java .util .HashMap ;
11- import java .util .List ;
12- import java .util .Map ;
10+ import java .util .*;
11+ import java .util .stream .Collectors ;
1312
1413
1514public class InMemoryTaskManager implements TaskManager {
@@ -18,7 +17,7 @@ public class InMemoryTaskManager implements TaskManager {
1817 protected final Map <Integer , Epic > epics ;
1918 protected final Map <Integer , Subtask > subtasks ;
2019 protected final HistoryManager historyManager ;
21-
20+ protected final Set < Task > prioritizedTasks = new TreeSet <>( Comparator . comparing ( Task :: getStartTime ));
2221
2322 public InMemoryTaskManager (HistoryManager historyManager ) {
2423 this .historyManager = historyManager ; // 3
@@ -31,6 +30,7 @@ public InMemoryTaskManager(HistoryManager historyManager) {
3130 public Task createTask (Task task ) {// создание Task
3231 final int id = ++counterId ;
3332 task .setId (id );
33+ addPriorityTask (task );
3434 tasks .put (id , task );
3535 return task ;
3636 }
@@ -39,6 +39,7 @@ public Task createTask(Task task) {// создание Task
3939 public Epic createEpic (Epic epic ) {// создание Epic
4040 final int id = ++counterId ;
4141 epic .setId (id );
42+ addPriorityTask (epic );
4243 epics .put (id , epic );
4344 return epic ;
4445 }
@@ -51,8 +52,10 @@ public Subtask createSubtask(Subtask subtask) {// создание Subtask
5152 if (epic == null ) {
5253 return null ;
5354 }
55+ epic .setSumDurationSubtasks (subtask .getDuration ());
5456 final int id = ++counterId ;
5557 subtask .setId (id );
58+ addPriorityTask (subtask );
5659 subtasks .put (id , subtask );
5760 epic .addSubtaskId (subtask .getId ());
5861 updateEpicStatus (epicId );
@@ -61,37 +64,39 @@ public Subtask createSubtask(Subtask subtask) {// создание Subtask
6164
6265 @ Override
6366 public void updateTask (Task task ) {// обновление Task
64- final int id = task .getId ();
65- final Task savedTask = tasks .get (id );
67+ final Task savedTask = tasks .get (task .getId ());
6668 if (savedTask == null ) {
6769 return ;
6870 }
69- tasks .put (id , task );
71+ addPriorityTask (task );
72+ tasks .put (task .getId (), task );
7073 }
7174
7275 @ Override
7376 public void updateEpic (Epic epic ) {// обновление Epic
74- Epic savedEpic = epics .get (epic .getId ());
77+ final Epic savedEpic = epics .get (epic .getId ());
7578 if (savedEpic == null ) {
7679 return ;
7780 }
7881 savedEpic .setName (epic .getName ());
7982 savedEpic .setDescription (epic .getDescription ());
83+ addPriorityTask (savedEpic );
84+ epics .put (epic .getId (), epic );
8085 }
8186
8287 @ Override
8388 public void updateSubtask (Subtask subtask ) {// обновление Subtask
84- final int id = subtask .getId ();
8589 final int epicId = subtask .getEpicId ();
86- final Subtask savedSubtask = subtasks .get (id );
90+ final Subtask savedSubtask = subtasks .get (subtask . getId () );
8791 if (savedSubtask == null ) {
8892 return ;
8993 }
9094 final Epic epic = epics .get (epicId );
9195 if (epic == null ) {
9296 return ;
9397 }
94- subtasks .put (id , subtask );
98+ addPriorityTask (savedSubtask );
99+ subtasks .put (subtask .getId (), subtask );
95100 updateEpicStatus (epicId );// обновление статуса у Epic
96101 }
97102
@@ -155,13 +160,13 @@ public List<Epic> getEpics() {
155160 @ Override
156161 public List <Subtask > getEpicSubtasks (int epicId ) {// получаем список Epic с Subtasks
157162 Epic epic = epics .get (epicId );
158- ArrayList <Subtask > getSubtasks = null ;
159- for (Integer subtaskId : epic .getSubtaskIds ()) {
160- if (this .subtasks .containsKey (subtaskId )) {
161- getSubtasks .add (this .subtasks .get (subtaskId ));
162- }
163- }
164- return getSubtasks ;
163+ // ArrayList<Subtask> getSubtasks = null;
164+ // for (Integer subtaskId : epic.getSubtaskIds()) {
165+ // if (this.subtasks.containsKey(subtaskId)) {
166+ // getSubtasks.add(this.subtasks.get(subtaskId));
167+ // }
168+ // }
169+ return epic . getSubtaskIds (). stream (). map ( subtasks :: get ). collect ( Collectors . toList ()) ;
165170 }
166171
167172 @ Override
@@ -202,12 +207,15 @@ public List<Task> getHistory() {// получаем список истории
202207
203208 private void updateEpicStatus (int epicId ) {// обновление статуса Epic
204209 Epic epic = epics .get (epicId );
205- ArrayList <Subtask > subtasks = new ArrayList <>();
206- for (Integer subtaskId : epic .getSubtaskIds ()) {
207- if (this .subtasks .containsKey (subtaskId )) {
208- subtasks .add (this .subtasks .get (subtaskId ));
209- }
210- }
210+ List <Subtask > subtasks = epic .getSubtaskIds ().stream ()
211+ .filter (this .subtasks ::containsKey )
212+ .map (this .subtasks ::get )
213+ .toList ();
214+ // for (Integer subtaskId : epic.getSubtaskIds()) {
215+ // if (this.subtasks.containsKey(subtaskId)) {
216+ // subtasks.add(this.subtasks.get(subtaskId));
217+ // }
218+ // }
211219 for (Subtask statusSubtask : subtasks ) {
212220 short subtaskNew = 0 ;
213221 short subtaskDone = 0 ;
@@ -232,4 +240,15 @@ private void updateEpicStatus(int epicId) {// обновление статус
232240 }
233241 }
234242
243+ private void addPriorityTask (Task task ) {
244+ for (Task t : prioritizedTasks ){
245+ if (t .getStartTime ()==task .getStartTime ()){
246+ throw new ManagerSaveException ("Пересечение с задачей " + task .toString ());
247+ }
248+ }
249+ prioritizedTasks .add (task );
250+ }
251+ public List <Task > getPrioritizedTasks (){
252+ return new ArrayList <>(prioritizedTasks );
253+ }
235254}
0 commit comments