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
9 changes: 9 additions & 0 deletions .idea/libraries/gson_2_9_0.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions java-kanban.iml
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,6 @@
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="gson-2.9.0" level="project" />
</component>
</module>
2 changes: 1 addition & 1 deletion resources/text.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ id,type,name,status,description,epic
1,TASK,задача_5,NEW,описание задачи_5,2025.03.04 10:50:24,15
2,TASK,задача_6,NEW,описание задачи_6,2025.03.04 10:50:24,25
3,EPIC,эпик_7,NEW,описание эпик_7,2025.03.04 10:50:24,25
4,EPIC,эпик_8,NEW,описание эпик_8,2025.03.04 10:50:24,25
4,EPIC,эпик_8,NEW,описание эпик_8,2025.03.04 10:50:24,25
35 changes: 23 additions & 12 deletions src/Main.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import managers.FileBackedTaskManager;
/* import managers.FileBackedTaskManager;
import managers.InMemoryTaskManager;
import managers.Managers;
import tasks.Epic;
Expand All @@ -7,13 +7,14 @@
import util.Status;

import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;

import static managers.FileBackedTaskManager.loadFromFile;

public class Main {

public static void main(String[] args) {
public static void main(String[] args) throws IOException {
String home = System.getProperty("user.dir");
home += "\\resources\\";

Expand All @@ -24,14 +25,16 @@ public static void main(String[] args) {
SubTask subTask1 = new SubTask("subtask1", "подзадача epic3", 3, LocalDateTime.now().plusHours(5), 25);
SubTask subTask2 = new SubTask("subtask2", "подзадача epic3", 3, LocalDateTime.now().plusHours(10), 225);
SubTask subTask3 = new SubTask("subtask3", "подзадача epic3", 3, LocalDateTime.now().plusHours(6), 25);


// загрузка существуещего файла с добавлением в него Задач
FileBackedTaskManager fileBackedTaskManager = (loadFromFile(new File(home + "text.txt")));
FileBackedTaskManager fileBackedTaskManager = (loadFromFile(new File(home + "text.txt")));
fileBackedTaskManager.newTack(task1);
fileBackedTaskManager.newTack(task2);
fileBackedTaskManager.newEpic(epic1);
fileBackedTaskManager.newEpic(epic2);
printAllTasks(fileBackedTaskManager);
// создание нового файла с задачами*/
// создание нового файла с задачами
FileBackedTaskManager fileBackedTaskManager2 = new FileBackedTaskManager(Managers.getDefaultHistory(),
home + "text2.txt");
fileBackedTaskManager2.newTack(task1);
Expand All @@ -43,42 +46,50 @@ public static void main(String[] args) {
fileBackedTaskManager2.newSubTask(subTask3);
printAllTasks(fileBackedTaskManager2);
System.out.println("________________");

Task task3 = new Task("задача_6", "описание задачи_5", LocalDateTime.now(), 15);
Epic epic3 = new Epic("эпик_9", "описание эпик_8");
fileBackedTaskManager2.newTack(task3);
fileBackedTaskManager2.newEpic(epic3);
fileBackedTaskManager2.clearEpicList();
printAllTasks(fileBackedTaskManager2);
fileBackedTaskManager2.getToIdTask(1);
fileBackedTaskManager2.getToIdSubTask(5);
fileBackedTaskManager2.getToIdEpic(3);
task1.setStatus(Status.IN_PROGRESS);
task1.setStartTime(LocalDateTime.now());
fileBackedTaskManager2.updateTask(1, task1);
subTask3.setStartTime(LocalDateTime.now().plusMinutes(30));
fileBackedTaskManager2.updateSubTask(7, subTask3);
fileBackedTaskManager2.removeToIdSubTask(5);
printAllTasks(fileBackedTaskManager2);
}

private static void printAllTasks(InMemoryTaskManager manager) {

private static void printAllTasks(InMemoryTaskManager inMemoryTaskManager) {
System.out.println("Задачи:");
for (Task task : manager.getTasks()) {
for (Task task : inMemoryTaskManager.getTasks()) {
System.out.println(task);
}
System.out.println("Эпики:");
for (Task epic : manager.getEpic()) {
for (Task epic : inMemoryTaskManager.getEpic()) {
System.out.println(epic);
for (Task task : manager.getToIdSubtaskInEpic(epic.getId())) {
for (Task task : inMemoryTaskManager.getToIdSubtaskInEpic(epic.getId())) {
System.out.println("--> " + task);
}
}
System.out.println("Подзадачи:");
for (Task subtask : manager.getSubTask()) {
for (Task subtask : inMemoryTaskManager.getSubTask()) {
System.out.println(subtask);
}
System.out.println("История:");
for (Task task : manager.getHistory()) {
for (Task task : inMemoryTaskManager.getHistory()) {
System.out.println(task);
}

System.out.println("задачи по времени:");
for (Task task : manager.getPrioritizedTasks()) {
for (Task task : inMemoryTaskManager.getPrioritizedTasks()) {
System.out.println(task);
}
}
}
*/
1 change: 0 additions & 1 deletion src/exceptions/ManagerSaveException.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,4 @@ public class ManagerSaveException extends RuntimeException {
public ManagerSaveException(final String message) {
super(message);
}

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

import com.sun.net.httpserver.HttpServer;
import http.handler.*;
import managers.Managers;
import managers.TaskManager;
import tasks.Epic;
import tasks.SubTask;
import tasks.Task;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.time.LocalDateTime;

public class HttpTaskServer {
public static final int PORT = 8080;
public final HttpServer httpServer;

public final TaskManager manager;

public HttpTaskServer(TaskManager manager) throws IOException {

this.manager = manager;

httpServer = HttpServer.create(new InetSocketAddress("localhost", PORT), 0);
httpServer.createContext("/tasks", new TaskHttpHandler(manager));
httpServer.createContext("/subtasks", new SubTaskHandler(manager));
httpServer.createContext("/epics", new EpicTaskHandler(manager));
httpServer.createContext("/history", new HistoryHandler(manager));
httpServer.createContext("/prioritized", new PrioritizedHandler(manager));
}

public void start() {
httpServer.start();
System.out.println("старт сервера на порту:" + PORT);
}

public void stop() {
httpServer.stop(0);
System.out.println("остановка сервера на порту:" + PORT);
}

public static void main(String[] args) throws IOException {

Task task1 = new Task("задача_5", "описание задачи_5", LocalDateTime.now().plusHours(2), 15);
Task task2 = new Task("задача_6", "описание задачи_6", LocalDateTime.now().plusHours(1), 25);
Epic epic1 = new Epic("эпик_7", "описание эпик_7");
Epic epic2 = new Epic("эпик_8", "описание эпик_8");
SubTask subTask1 = new SubTask("subtask1", "подзадача epic3", 3, LocalDateTime.now().plusHours(5), 25);
SubTask subTask2 = new SubTask("subtask2", "подзадача epic3", 3, LocalDateTime.now().plusHours(10), 225);
SubTask subTask3 = new SubTask("subtask3", "подзадача epic3", 3, LocalDateTime.now().plusHours(6), 25);

TaskManager manager = Managers.getDefault();

manager.newTack(task1);
manager.newTack(task2);
manager.newEpic(epic1);
manager.newEpic(epic2);
manager.newSubTask(subTask1);
manager.newSubTask(subTask2);
manager.newSubTask(subTask3);

HttpTaskServer taskServer = new HttpTaskServer(manager);
taskServer.start();
}
}
23 changes: 23 additions & 0 deletions src/http/LocalDataTimeAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package http;

import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;

import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class LocalDataTimeAdapter extends TypeAdapter<LocalDateTime> {
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss");

@Override
public void write(final JsonWriter jsonWriter, final LocalDateTime localDate) throws IOException {
jsonWriter.value(localDate.format(formatter));
}

@Override
public LocalDateTime read(final JsonReader jsonReader) throws IOException {
return LocalDateTime.parse(jsonReader.nextString(), formatter);
}
}
67 changes: 67 additions & 0 deletions src/http/handler/BaseHttpHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package http.handler;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.sun.net.httpserver.HttpExchange;
import http.LocalDataTimeAdapter;
import managers.TaskManager;

import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;

public class BaseHttpHandler {

protected TaskManager manager;
protected Gson gson;

protected String readText(HttpExchange httpExchange) throws IOException {
return new String(httpExchange.getRequestBody().readAllBytes(), StandardCharsets.UTF_8);
}

protected void sendText(HttpExchange httpExchange, String text) throws IOException {
byte[] result = text.getBytes(StandardCharsets.UTF_8);
httpExchange.getResponseHeaders().add("Content-Type", "application/json;charset=utf-8");
httpExchange.sendResponseHeaders(200, result.length);
OutputStream os = httpExchange.getResponseBody();
os.write(result);
httpExchange.close();
}

protected void sendNotFound(HttpExchange httpExchange) throws IOException {
httpExchange.sendResponseHeaders(404, 0);
httpExchange.close();
}

protected void sendHasInteractions(HttpExchange httpExchange) throws IOException {
httpExchange.sendResponseHeaders(406, 0);
httpExchange.close();
}

protected void sendOk(HttpExchange httpExchange) throws IOException {
httpExchange.sendResponseHeaders(201, 0);
httpExchange.close();
}

protected void sendErr(HttpExchange httpExchange) throws IOException {
httpExchange.sendResponseHeaders(500, 0);
httpExchange.close();
}

protected void sendBadRequest(HttpExchange httpExchange) throws IOException {
httpExchange.sendResponseHeaders(400, 0);
httpExchange.close();
}

protected void sendMethodNotAllowed(HttpExchange httpExchange) throws IOException {
httpExchange.sendResponseHeaders(405, 0);
httpExchange.close();
}

public static Gson getGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(LocalDateTime.class, new LocalDataTimeAdapter());
return gsonBuilder.create();
}
}
Loading