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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
_java-kanban_

# Трекер задач
### Согласно задания спринта № 6.
### Согласно задания спринта № 7.
## выполнено Филипповских Сергеем

_**Когорта-53**_
196 changes: 109 additions & 87 deletions src/main/Main.java

Large diffs are not rendered by default.

4 changes: 1 addition & 3 deletions src/main/classes/Status.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package main.classes;// Задаём параметры состояний задач

public enum Status {
NEW,
IN_PROGRESS,
DONE
NEW, IN_PROGRESS, DONE
}
2 changes: 1 addition & 1 deletion src/main/classes/SubTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@ public int hashCode() {
public String toString() {
return "Sub" + super.toString().substring(0, super.toString().length() - 1) + ", idEpic=" + idEpic + "}";
}
}
}
3 changes: 1 addition & 2 deletions src/main/classes/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,7 @@ public int hashCode() {

@Override
public String toString() {
return "Task{" + "id=" + id + ", name='" + name + '\'' +
", description='" + description + '\'' + ", status=" + status + '}';
return "Task{" + "id=" + id + ", name='" + name + '\'' + ", description='" + description + '\'' + ", status=" + status + '}';
}

}
7 changes: 7 additions & 0 deletions src/main/classes/TypeTasks.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package main.classes;

public enum TypeTasks {
TASK,
EPIC,
SUBTASK
}
209 changes: 209 additions & 0 deletions src/main/service/FileBackedTaskManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
package main.service;

import main.classes.*;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;


public class FileBackedTaskManager extends InMemoryTaskManager {

private final File file;

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

public File getFile() {
return file;
}

public void loadFromFile() {

// если файл существует, то считываем из него данные

if (this.file.exists()) {
try (BufferedReader br = new BufferedReader(new FileReader(this.file, StandardCharsets.UTF_8))) {
while (br.ready()) {
String line = br.readLine();
Task loadTask = fromString(line);

if (loadTask.getId() > globalId) { // если id больше чем globalId - присваиваем счётчику globalId значение id
globalId = loadTask.getId();
}

switch (loadTask.getClass().getSimpleName()) {
case "Task" -> task.put(loadTask.getId(), loadTask);
case "Epic" -> epic.put(loadTask.getId(), (Epic) loadTask);
case "SubTask" -> {
subTask.put(loadTask.getId(), (SubTask) loadTask);
epic.get(((SubTask) loadTask).getIdEpic()).addSubTask(loadTask.getId());
}
}
globalId++; // увеличиваем счётчик globalId
}
} catch (IOException e) {
throw new ManagerSaveException("Не удалось восстановить данные из файла или указанный файл не найден");
}
}
}

public Task fromString(String value) { // метод обработки считываемой из файла строки
String[] str = value.split(",");
int id = Integer.parseInt(str[0]);
TypeTasks type = TypeTasks.valueOf(str[1]);
String name = str[2];
Status status = Status.valueOf(str[3]);
String description = str[4];
int idEpic = Integer.parseInt(str[5]);
switch (type) {
case TASK -> {
return new Task(id, name, description, status);
}
case EPIC -> {
return new Epic(id, name, description, status, new ArrayList<>());
}
case SUBTASK -> {
return new SubTask(id, name, description, status, idEpic);
}
default -> {
return null;
}
}
}

private void save() {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(this.file, StandardCharsets.UTF_8))) {
// Записываем в файл Task
for (int key : task.keySet()) {
bw.write(toString(task.get(key)));
bw.newLine();
}
// Записываем в файл Epic
for (int key : epic.keySet()) {
bw.write(toString(epic.get(key)));
bw.newLine();
}
// Записываем в файл SubTask
for (int key : subTask.keySet()) {
bw.write(toString(subTask.get(key)));
bw.newLine();
}
bw.flush();
} catch (IOException e) {
throw new ManagerSaveException("Не удалось записать данные в файл");
}
}

public String toString(Task task) { // метод обработки считываемой из файла строки
String type = "";
int idEpic = 0;
switch (task.getClass().getSimpleName()) {
case "Task" -> type = "TASK";
case "Epic" -> type = "EPIC";
case "SubTask" -> {
type = "SUBTASK";
idEpic = ((SubTask) task).getIdEpic();
}
}
return task.getId() + "," + type + "," + task.getName() + "," + task.getStatus() + "," + task.getDescription() + "," + idEpic;
}

// переопределение методов для сохранения данных в файле

@Override
public boolean updateSubTask(SubTask subTaskNew) {
if (super.updateSubTask(subTaskNew)) {
save();
return true;
}
return false;
}

@Override
public boolean updateEpic(Epic epicNew) {
if (super.updateEpic(epicNew)) {
save();
return true;
}
return false;
}

@Override
public boolean updateTask(Task taskNew) {
if (super.updateTask(taskNew)) {
save();
return true;
}
return false;
}

@Override
public boolean deleteSubTask(int id) {
if (super.deleteSubTask(id)) {
save();
return true;
}
return false;
}

@Override
public boolean deleteEpic(int id) {
if (super.deleteEpic(id)) {
save();
return true;
}
return false;
}

@Override
public boolean deleteTask(int id) {
if (super.deleteTask(id)) {
save();
return true;
}
return false;
}

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

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

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

@Override
public boolean addSubTask(SubTask subTaskNew) {
if (super.addSubTask(subTaskNew)) {
save();
return true;
}
return false;
}

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

@Override
public void addTask(Task taskNew) {
super.addTask(taskNew);
save();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import java.util.List;

public interface HistoryManagerService {
public interface HistoryManager {

void add(Task task);

Expand Down
4 changes: 2 additions & 2 deletions src/main/service/HistoryManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import java.util.*;

public class HistoryManagerImpl implements HistoryManagerService {
public class HistoryManagerImpl implements HistoryManager {
private final Map<Integer, Node<Task>> history = new HashMap<>();
private Node<Task> first;
private Node<Task> last;
Expand Down Expand Up @@ -85,4 +85,4 @@ public List<Task> getHistory() {
return result;
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@
import main.classes.SubTask;
import main.classes.Task;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class TaskManagerImpl implements TaskManagerService {
private int globalId = 1; // Глобальный счётчик всех задач
private final HashMap<Integer, Task> task = new HashMap<>();
private final HashMap<Integer, Epic> epic = new HashMap<>();
private final HashMap<Integer, SubTask> subTask = new HashMap<>();
private final HistoryManagerService history = Managers.getDefaultHistory();
public class InMemoryTaskManager implements TaskManager {
protected int globalId = 1; // Глобальный счётчик всех задач
protected final HashMap<Integer, Task> task = new HashMap<>();
protected final HashMap<Integer, Epic> epic = new HashMap<>();
protected final HashMap<Integer, SubTask> subTask = new HashMap<>();
protected final HistoryManager history = Managers.getDefaultHistory();

// добавляем задачу
@Override
Expand Down Expand Up @@ -253,4 +254,9 @@ private void checkStatusEpic(int id) {
public List<Task> getHistory() {
return history.getHistory();
}

@Override
public File getFile() {
return null;
}
}
6 changes: 6 additions & 0 deletions src/main/service/ManagerSaveException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package main.service;

public class ManagerSaveException extends RuntimeException {
public ManagerSaveException(String s) {
}
}
10 changes: 8 additions & 2 deletions src/main/service/Managers.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package main.service;

import java.io.File;

public class Managers {

public static TaskManagerImpl getDefault() {
return new TaskManagerImpl();
public static InMemoryTaskManager getDefault() {
return new InMemoryTaskManager();
}

public static FileBackedTaskManager getFile(File file) {
return new FileBackedTaskManager(file);
}

public static HistoryManagerImpl getDefaultHistory() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
import main.classes.SubTask;
import main.classes.Task;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public interface TaskManagerService {
public interface TaskManager {
// добавляем задачу
void addTask(Task taskNew);

Expand Down Expand Up @@ -60,4 +61,5 @@ public interface TaskManagerService {

List<Task> getHistory();

File getFile();
}
Loading
Loading