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
85 changes: 84 additions & 1 deletion src/Main.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
import managers.FileBackedTaskManager;
import statuses.*;
import managers.TaskManager;
import tasks.*;
import util.Managers;

import java.io.File;

public class Main {

public static void main(String[] args) {
System.out.println("Поехали!");
TaskManager inMemoryTaskManager = Managers.getDefault();
printHistoryDeleteTaskWorkExample(inMemoryTaskManager);
TaskManager fileBackedTaskManager = Managers.getDefaultFileBackend();
// printHistoryDeleteTaskWorkExample(inMemoryTaskManager);
printWorkingExampleWithFile(fileBackedTaskManager);
// printWorkingExampleFromFile(file);
}

private static void printWorkingExample(TaskManager manager) {
Expand Down Expand Up @@ -120,6 +126,7 @@ private static void printHistoryWorkExample(TaskManager manager) {

private static void printHistoryDeleteTaskWorkExample(TaskManager manager) {
manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут"));

manager.addTask(new Task("Сделать ДЗ", "Сделать ДЗ за 1 час"));
manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг"));
manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 3));
Expand Down Expand Up @@ -177,4 +184,80 @@ private static void printHistoryDeleteTaskWorkExample(TaskManager manager) {
System.out.println(task);
}
}

private static void printWorkingExampleWithFile(TaskManager manager) {
manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут"));
manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг"));
manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2));
manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2));
manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2));
manager.addEpic(new Epic("Покрасить волосы", "На праздник"));
manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 6));
System.out.println("Задачи:");
for (Task task : manager.getTasks()) {
System.out.println(task);
}
System.out.println("Эпики:");
for (Epic epic : manager.getEpics()) {
System.out.println(epic);
}
System.out.println("Подзадачи:");
for (Subtask subtask : manager.getSubtasks()) {
System.out.println(subtask);
}
manager.updateTask(new Task("Выгулять псину", "Погулять с Джеком 40 минут", 1));
manager.updateSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", StatusTask.DONE, 2, 3));
System.out.println("После выполнения работ:");
System.out.println("Задачи:");
for (Task task : manager.getTasks()) {
System.out.println(task);
}
System.out.println("Эпики:");
for (Epic epic : manager.getEpics()) {
System.out.println(epic);
}
System.out.println("Подзадачи:");
for (Subtask subtask : manager.getSubtasks()) {
System.out.println(subtask);
}
manager.deleteSubtask(3);
manager.deleteEpic(2);
manager.updateSubtask(new Subtask("Оформить реферат", "Для выступления", StatusTask.DONE, 6, 7));
System.out.println("После выполнения работ:");
System.out.println("Задачи:");
for (Task task : manager.getTasks()) {
System.out.println(task);
}
System.out.println("Эпики:");
for (Epic epic : manager.getEpics()) {
System.out.println(epic);
}
System.out.println("Подзадачи:");
for (Subtask subtask : manager.getSubtasks()) {
System.out.println(subtask);
}
}

private static void printWorkingExampleFromFile(File file) {
FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(file);
System.out.println("Задачи:");
for (Task task : manager.getTasks()) {
System.out.println(task);
}
System.out.println("Эпики:");
for (Epic epic : manager.getEpics()) {
System.out.println(epic);
}
System.out.println("Подзадачи:");
for (Subtask subtask : manager.getSubtasks()) {
System.out.println(subtask);
}
manager.addTask(new Task("Тест1", "Погулять с Джеком 20 минут"));
manager.addTask(new Task("Тест2", "Погулять с Джеком 20 минут"));
manager.addTask(new Task("Тест3", "Погулять с Джеком 20 минут"));
manager.addTask(new Task("Тест4", "Погулять с Джеком 20 минут"));
manager.addTask(new Task("Тест5", "Погулять с Джеком 20 минут"));
manager.addTask(new Task("Тест6", "Погулять с Джеком 20 минут"));
manager.addTask(new Task("Тест7", "Погулять с Джеком 20 минут"));
}
}
17 changes: 17 additions & 0 deletions src/exceptions/ManagerLoadFromFileException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package exceptions;

import java.io.File;
import java.util.NoSuchElementException;

public class ManagerLoadFromFileException extends NoSuchElementException {
File file;

public ManagerLoadFromFileException(String message, File file) {
super(message);
this.file = file;
}

public String getDetailMessage() {
return String.format("%s из файла - %s", getMessage(), file.getAbsolutePath());
}
}
18 changes: 18 additions & 0 deletions src/exceptions/ManagerSaveException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package exceptions;

import java.io.File;
import java.util.NoSuchElementException;

public class ManagerSaveException extends NoSuchElementException {
File file;

public ManagerSaveException(String message, File file) {
super(message);
this.file = file;
}

public String getDetailMessage() {
return String.format("%s в файл - %s", getMessage(), file.getAbsolutePath());
}

}
168 changes: 168 additions & 0 deletions src/managers/FileBackedTaskManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
package managers;

import exceptions.ManagerLoadFromFileException;
import exceptions.ManagerSaveException;
import tasks.Epic;
import tasks.Subtask;
import tasks.Task;
import tasks.TaskType;

import java.io.*;
import java.util.ArrayList;

public class FileBackedTaskManager extends InMemoryTaskManager {

private final File managerFile;

public FileBackedTaskManager(String path) {
this.managerFile = new File(path);
}

public FileBackedTaskManager(File manager) {
this.managerFile = manager;
}

public FileBackedTaskManager() {
this.managerFile = new File("manager.csv");
}

@Override
public void addTask(Task task) {
super.addTask(task);
save();
}

@Override
public void addSubtask(Subtask subtask) {
super.addSubtask(subtask);
save();
}

@Override
public void addEpic(Epic epic) {
super.addEpic(epic);
save();
}

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

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

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

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

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

@Override
public void clearEpics() {
super.clearEpics();
}

@Override
public void updateTask(Task task) {
super.updateTask(task);
save();
}

@Override
public void updateSubtask(Subtask subtask) {
super.updateSubtask(subtask);
save();
}

@Override
public void updateEpic(Epic epic) {
super.updateEpic(epic);
save();
}

public File getManagerFile() {
return this.managerFile;
}

public static FileBackedTaskManager loadFromFile(File file) throws ManagerLoadFromFileException {
try (BufferedReader buffer = new BufferedReader(new FileReader(file))) {
FileBackedTaskManager manager = new FileBackedTaskManager();
ArrayList<String> tasks = new ArrayList<>(buffer.lines().toList());
String header = "id,type,name,status,description,epic";
tasks.remove(header);
for (String task : tasks) {
String[] taskInfo = task.split(",");
switch (TaskType.valueOf(taskInfo[1])) {
case TaskType.TASK:
manager.addTask(Task.fromString(task));
break;
case TaskType.SUBTASK:
manager.addSubtask(Subtask.fromString(task));
break;
case TaskType.EPIC:
manager.addEpic(Epic.fromString(task));
break;
default:
System.out.println("Не определена задача в файле");
}
}
return manager;
} catch (IOException e) {
throw new ManagerLoadFromFileException("Возникла ошибка при загрузке данных из файла", file);
}
}


private void save() throws ManagerSaveException {
try (FileWriter writer = new FileWriter(managerFile)) {
String header = "id,type,name,status,description,epic\n";
writer.write(header);
for (Task task : getTasks()) {
writer.write(String.format("%s\n", task.toString()));
}

for (Epic epic : getEpics()) {
writer.write(String.format("%s\n", epic.toString()));
}

for (Subtask subtask : getSubtasks()) {
writer.write(String.format("%s\n", subtask.toString()));
}
} catch (IOException e) {
throw new ManagerSaveException("Возникла ошибка при автосохранении менеджера", managerFile);
}
}

public static void main(String[] args) {
FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(new File("manager.csv"));
System.out.println("Задачи:");
for (Task task : manager.getTasks()) {
System.out.println(task);
}
System.out.println("Эпики:");
for (Epic epic : manager.getEpics()) {
System.out.println(epic);
}
System.out.println("Подзадачи:");
for (Subtask subtask : manager.getSubtasks()) {
System.out.println(subtask);
}
}
}
Loading
Loading