Skip to content

Commit 052b08d

Browse files
committed
Java sprint 7 v1.0
Созданы классы : FileBackedTaskManager, TaskConverter, TaskData. Класс enum : TaskType. Классы исключения: ManagerSaveException, NotFoundException. Переделаны некоторые классы: InMemoryTaskManager,Manager, Task, Subtask, Epic
1 parent f7df6a3 commit 052b08d

File tree

12 files changed

+270
-24
lines changed

12 files changed

+270
-24
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
import ru.yandex.javacource.golotin.schedule.model.Status;
55
import ru.yandex.javacource.golotin.schedule.model.Subtask;
66
import ru.yandex.javacource.golotin.schedule.model.Task;
7-
import ru.yandex.javacource.golotin.schedule.service.InMemoryTaskManager;
7+
8+
import ru.yandex.javacource.golotin.schedule.service.Manager;
89
import ru.yandex.javacource.golotin.schedule.service.TaskManager;
910

1011
public class Main {
1112
public static void main(String[] args) {
12-
TaskManager taskManager = new InMemoryTaskManager();
13+
TaskManager taskManager = Manager.getDefaults();
1314
taskManager.createTask(new Task("Дом", Status.NEW, "Убраться в кухни и ванной"));
1415
taskManager.createTask(new Task("Работа", Status.IN_PROGRESS, "Сделать куча рутины и пойти домой:)"));
1516

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package ru.yandex.javacource.golotin.schedule.converter;
2+
3+
import ru.yandex.javacource.golotin.schedule.model.Task;
4+
import ru.yandex.javacource.golotin.schedule.model.TaskType;
5+
6+
public class TaskConverter {
7+
public TaskType getType() {
8+
return TaskType.TASK;
9+
}
10+
11+
public String toString(Task task) {
12+
return task.getId() + "," + task.getName() + "," + task.getDescription();
13+
}
14+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package ru.yandex.javacource.golotin.schedule.exception;
2+
3+
public class ManagerSaveException extends RuntimeException {
4+
public ManagerSaveException(String message, Throwable cause) {
5+
super(message, cause);
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package ru.yandex.javacource.golotin.schedule.exception;
2+
3+
public class NotFoundException extends RuntimeException {
4+
public NotFoundException(String message) {
5+
super(message);
6+
}
7+
}

src/ru/yandex/javacource/golotin/schedule/model/Epic.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package ru.yandex.javacource.golotin.schedule.model;
22

33
import java.util.ArrayList;
4+
import java.util.List;
45

56
public class Epic extends Task {
67

7-
private final ArrayList<Integer> subtaskIds = new ArrayList<>();
8+
private final List<Integer> subtaskIds = new ArrayList<>();
89

910
public Epic(String name, Status status, String description) {
1011
super(name, status, description);
@@ -23,15 +24,15 @@ public void removeSubtask(int id) {
2324
subtaskIds.remove(id);
2425
}
2526

26-
public ArrayList<Integer> getSubtaskIds() {
27+
public List<Integer> getSubtaskIds() {
2728
return subtaskIds;
2829
}
2930

31+
public TaskType getType() {return TaskType.EPIC;}
32+
3033
@Override
3134
public String toString() {
32-
return "Epic{" +
33-
"subtaskIds=" + subtaskIds +
34-
'}';
35+
return STR."Epic{subtaskIds=\{subtaskIds}\{'}'}";
3536
}
3637

3738
}

src/ru/yandex/javacource/golotin/schedule/model/Subtask.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,20 @@ public Subtask(String name, Status status, String description,int epicId) {
1010
setEpicId(epicId);
1111
}
1212

13+
@Override
1314
public Integer getEpicId() {
1415
return epicId;
1516
}
1617

18+
@Override
19+
public TaskType getType() {return TaskType.SUBTASK;}
20+
1721
public void setEpicId(Integer epicId) {
1822
this.epicId = epicId;
1923
}
2024

2125
@Override
2226
public String toString() {
23-
return "Subtask{" +
24-
"epicId=" + epicId +
25-
'}';
27+
return STR."Subtask{epicId=\{epicId}\{'}'}";
2628
}
2729
}

src/ru/yandex/javacource/golotin/schedule/model/Task.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public String getName() {
2626
return name;
2727
}
2828

29+
public Integer getEpicId() {return null;}
30+
2931
public void setName(String name) {
3032
this.name = name;
3133
}
@@ -34,6 +36,8 @@ public String getDescription() {
3436
return description;
3537
}
3638

39+
public TaskType getType() {return TaskType.TASK;}
40+
3741
public void setDescription(String description) {
3842
this.description = description;
3943
}
@@ -61,11 +65,6 @@ public int hashCode() {
6165

6266
@Override
6367
public String toString() {
64-
return "Task{" +
65-
"id=" + id +
66-
", name='" + name + '\'' +
67-
", description='" + description + '\'' +
68-
", status=" + status +
69-
'}';
68+
return STR."Task{id=\{id}, name='\{name}\{'\''}, description='\{description}\{'\''}, status=\{status}\{'}'}";
7069
}
7170
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package ru.yandex.javacource.golotin.schedule.model;
2+
3+
import java.util.List;
4+
5+
public class TaskData {
6+
final List<Task> tasks;
7+
final List<Integer> history;
8+
9+
public TaskData(List<Task> tasks, List<Integer> history) {
10+
this.tasks = tasks;
11+
this.history = history;
12+
}
13+
14+
public List<Task> getTasks() {
15+
return tasks;
16+
}
17+
18+
public List<Integer> getHistory() {
19+
return history;
20+
}
21+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package ru.yandex.javacource.golotin.schedule.model;
2+
3+
public enum TaskType {
4+
TASK,
5+
SUBTASK,
6+
EPIC
7+
}
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
package ru.yandex.javacource.golotin.schedule.service;
2+
3+
import static java.nio.charset.StandardCharsets.UTF_8;
4+
5+
import java.io.*;
6+
7+
import java.util.ArrayList;
8+
import java.util.HashMap;
9+
import java.util.List;
10+
import java.util.Map;
11+
12+
import ru.yandex.javacource.golotin.schedule.converter.TaskConverter;
13+
import ru.yandex.javacource.golotin.schedule.exception.ManagerSaveException;
14+
import ru.yandex.javacource.golotin.schedule.model.*;
15+
16+
public class FileBackedTaskManager extends InMemoryTaskManager {
17+
HashMap<TaskType, TaskConverter> converters;
18+
private final File file;
19+
public FileBackedTaskManager() {
20+
this(Manager.getDefaultHistory());
21+
}
22+
23+
public FileBackedTaskManager(HistoryManager historyManager) {
24+
this(historyManager, new File(TASK_CSV));
25+
}
26+
27+
public FileBackedTaskManager(File file) {
28+
this(Manager.getDefaultHistory(), file);
29+
}
30+
31+
32+
public FileBackedTaskManager(HistoryManager historyManager, File file) {
33+
super(historyManager);
34+
this.file = file;
35+
}
36+
37+
public void initialization() {
38+
loadFromFile();
39+
}
40+
41+
public static FileBackedTaskManager loadFromFile(File file) {
42+
FileBackedTaskManager manager = new FileBackedTaskManager(file);
43+
manager.initialization();
44+
return manager;
45+
}
46+
@Override
47+
public List<Task> getTasks() {
48+
return super.getTasks();
49+
}
50+
51+
@Override
52+
public Task getTask(int id) {
53+
return super.getTask(id);
54+
}
55+
56+
@Override
57+
public Task createTask(Task task) {
58+
Task newTask = super.createTask(task);
59+
saveToFile();
60+
return newTask;
61+
}
62+
63+
@Override
64+
public void updateTask(Task task) {
65+
super.updateTask(task);
66+
}
67+
68+
@Override
69+
public void updateEpic(Epic epic) {
70+
super.updateEpic(epic);
71+
}
72+
73+
@Override
74+
public void updateSubtask(Subtask subTask) {
75+
super.updateSubtask(subTask);
76+
}
77+
78+
@Override
79+
public void deleteTask(int id) {
80+
super.deleteTask(id);
81+
}
82+
83+
@Override
84+
public void deleteSubtask(int id) {
85+
super.deleteSubtask(id);
86+
}
87+
88+
private String toString(Task task) {
89+
return STR."\{task.getId()},\{task.getName()},\{task.getDescription()},\{task.getEpicId()}";
90+
}
91+
92+
private Task fromString(String value) {
93+
final String[] columns = value.split(",");
94+
int id = 0;
95+
int epicId = 0;
96+
String name = "";
97+
String description = "";
98+
Status status = null;
99+
TaskType type = TaskType.valueOf(columns[1]);
100+
Task task = null;
101+
switch (type) {
102+
case TASK:
103+
task = new Task(name, status, description);
104+
break;
105+
case SUBTASK:
106+
task = new Subtask(name, status, description, epicId);
107+
break;
108+
case EPIC:
109+
task = new Epic(name, status, description);
110+
break;
111+
}
112+
return task;
113+
}
114+
115+
static String toString(HistoryManager manager) {
116+
String sb = "";
117+
manager.getAll();
118+
return sb;
119+
}
120+
121+
static List<Integer> historyFromString(String value) {
122+
final String[] ids = value.split(",");
123+
List<Integer> history = new ArrayList<>();
124+
for (String id : ids) {
125+
history.add(Integer.valueOf(id));
126+
}
127+
return history;
128+
}
129+
130+
131+
private void saveToFile() {// Сохранение в файл
132+
try (final BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
133+
for (Map.Entry<Integer, Task> entry : tasks.entrySet()) {
134+
writer.append(toString(entry.getValue()));
135+
writer.newLine();
136+
}
137+
} catch (IOException e) {
138+
throw new ManagerSaveException(STR."Ошибка в файле: \{file.getAbsolutePath()}", e);
139+
}
140+
141+
}
142+
143+
private void loadFromFile() {// Чтение из в файла
144+
int maxId = 0;
145+
try (final BufferedReader reader = new BufferedReader(new FileReader(file, UTF_8))) {
146+
reader.readLine(); // Пропускаем заголовок
147+
while (true) {
148+
String line = reader.readLine();
149+
final Task task = fromString(line);
150+
final int id = task.getId();
151+
if (task.getType() == TaskType.TASK) {
152+
tasks.put(id, task);
153+
}
154+
if (maxId < id) {
155+
maxId = id;
156+
}
157+
if (line.isEmpty()) {
158+
break;
159+
}
160+
}
161+
String line = reader.readLine();// История
162+
} catch (IOException e) {// Отлавливаем ошибки
163+
throw new ManagerSaveException(STR."Ошибка при чтении файла: \{file.getAbsolutePath()}", e);
164+
}
165+
counterId = maxId;// генератор
166+
}
167+
168+
public static final String TASK_CSV = "task.csv";
169+
}

0 commit comments

Comments
 (0)