Skip to content
Open
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
86 changes: 0 additions & 86 deletions Test/manager/InMemoryHistoryManagerTest.java

This file was deleted.

2 changes: 1 addition & 1 deletion java-kanban.iml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/Test" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
Expand Down
Empty file added module-info.java
Empty file.
172 changes: 172 additions & 0 deletions src/manager/FileBackedTaskManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
package manager;

import model.Epic;
import model.Status;
import model.Subtask;
import model.Task;
import tasktype.TaskType;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.util.List;

public class FileBackedTaskManager extends InMemoryTaskManager {
private final File file;

public FileBackedTaskManager(File file) {
this.file = file;
}

@Override
public Task addTask(Task task) {
Task addedTask = super.addTask(task);
save();
return addedTask;
}

@Override
public Epic addEpic(Epic epic) {
Epic addedEpic = super.addEpic(epic);
save();
return addedEpic;
}

@Override
public Subtask addSubtask(Subtask subtask) {
Subtask addedSubtask = super.addSubtask(subtask);
save();
return addedSubtask;
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сюда ещё нужно добавить методы delete* update* для всех типов задач. В общем, все методы, которые изменяют содержимое хранилищ.

@Override
public Task updateTask(Task updatedTask) {
Task existingTask = super.updateTask(updatedTask);
save();
return existingTask;
}

@Override
public Epic updateEpic(Epic updatedEpic) {
Epic existingEpic = super.updateEpic(updatedEpic);
save();
return existingEpic;
}

@Override
public Subtask updateSubtask(Subtask updatedSubtask) {
Subtask existingSubtask = super.updateSubtask(updatedSubtask);
save();
return existingSubtask;
}

@Override
public void deleteTaskByID(int id) {
super.deleteTaskByID(id);
save();
}

@Override
public void deleteEpicByID(int id) {
super.deleteEpicByID(id);
save();
}

@Override
public void deleteSubtaskByID(int id) {
super.deleteSubtaskByID(id);
save();
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не забыть реализовать методы с сохранением данных в файл. 🙂

  @Override
    public void deleteTasks() {

    @Override
    public void deleteEpics() {

    @Override
    public void deleteSubtasks() {

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделано

@Override
public void deleteTasks() {
super.deleteTasks();
save();
}

@Override
public void deleteEpics() {
super.deleteEpics();
save();
}

@Override
public void deleteSubtasks() {
super.deleteSubtasks();
save();
}

public void save() {
try (PrintWriter writer = new PrintWriter(file)) {
writer.println("id,type,name,status,description,epic");
for (Task task : getTasks()) {
writer.println(toString(task));
}
for (Epic epic : getEpics()) {
writer.println(toString(epic));
}
for (Subtask subtask : getSubtasks()) {
writer.println(toString(subtask));
}
} catch (IOException e) {
throw new ManagerSaveException("Failed to save tasks to file", e);
}
}

private String toString(Task task) {
switch (task.getType()) {
case SUBTASK:
return String.format("%d,SUBTASK,%s,%s,%s,%d",
task.getId(), task.getName(), task.getStatus(), task.getDescription(), ((Subtask) task).getEpicID());
case EPIC:
return String.format("%d,EPIC,%s,%s,%s,",
task.getId(), task.getName(), task.getStatus(), task.getDescription());
case TASK:
default:
return String.format("%d,TASK,%s,%s,%s,",
task.getId(), task.getName(), task.getStatus(), task.getDescription());
}
}

public static FileBackedTaskManager loadFromFile(File file) {
FileBackedTaskManager manager = new FileBackedTaskManager(file);
try {
List<String> lines = Files.readAllLines(file.toPath());
for (String line : lines.subList(1, lines.size())) {
Task task = fromString(line);
if (task instanceof Epic) {
manager.addEpic((Epic) task);
} else if (task instanceof Subtask) {
manager.addSubtask((Subtask) task);
} else {
manager.addTask(task);
}
}
} catch (IOException e) {
throw new ManagerSaveException("Failed to load tasks from file", e);
}
return manager;
}

private static Task fromString(String value) {
String[] parts = value.split(",");
int id = Integer.parseInt(parts[0]);
String type = parts[1];
String name = parts[2];
Status status = Status.valueOf(parts[3]);
String description = parts[4];

TaskType taskType = TaskType.valueOf(type);
switch (taskType) {
case SUBTASK:
int epicID = Integer.parseInt(parts[5]);
return new Subtask(id, name, description, status, epicID);
case EPIC:
return new Epic(id, name, description);
case TASK:
default:
return new Task(id, name, description, status);
}
}
}
5 changes: 5 additions & 0 deletions src/manager/HistoryManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
import java.util.List;

public interface HistoryManager {

void add(Task task);

void remove(int id);

List<Task> getHistory();

}
Loading