diff --git a/src/main/java/me/bobert/netneutrality/command/admin/ReactionCommand.java b/src/main/java/me/bobert/netneutrality/command/admin/ReactionCommand.java index 04a8862..f6d5ce1 100644 --- a/src/main/java/me/bobert/netneutrality/command/admin/ReactionCommand.java +++ b/src/main/java/me/bobert/netneutrality/command/admin/ReactionCommand.java @@ -100,7 +100,7 @@ public class ReactionCommand extends AbstractAdminCommand { } task.addEmoji(emoji, role); - TaskManager.getInstance().persistTask(task); + TaskManager.getInstance().getTaskService().persistTask(task); return CommandExecutionResult.success("Added emoji to message successfully!"); } @@ -114,7 +114,7 @@ public class ReactionCommand extends AbstractAdminCommand { } task.removeEmoji(emoji); - TaskManager.getInstance().persistTask(task); + TaskManager.getInstance().getTaskService().persistTask(task); return CommandExecutionResult.success("Removed emoji from message successfully!"); } @@ -125,7 +125,7 @@ public class ReactionCommand extends AbstractAdminCommand { return CommandExecutionResult.error("The message ID provided isn't registered with the bot"); } - TaskManager.getInstance().unpersistTask(task); + TaskManager.getInstance().getTaskService().unpersistTask(task); return CommandExecutionResult.success("Unregistered the message ID successfully!"); } } diff --git a/src/main/java/me/bobert/netneutrality/core/tasks/TaskManager.java b/src/main/java/me/bobert/netneutrality/core/tasks/TaskManager.java index 57c58b2..1b45860 100644 --- a/src/main/java/me/bobert/netneutrality/core/tasks/TaskManager.java +++ b/src/main/java/me/bobert/netneutrality/core/tasks/TaskManager.java @@ -10,14 +10,12 @@ import me.bobert.netneutrality.context.tasks.ModalTaskContext; import me.bobert.netneutrality.core.LogHandler; import me.bobert.netneutrality.core.context.CommandContext; import me.bobert.netneutrality.core.context.TaskContext; -import me.bobert.netneutrality.core.tasks.persistence.TaskRegistry; import me.bobert.netneutrality.core.tasks.trait.Deletable; import me.bobert.netneutrality.core.tasks.trait.NotAcknowledgeable; import me.bobert.netneutrality.core.tasks.trait.WithChildren; import me.bobert.netneutrality.core.tasks.trait.WithParent; import me.bobert.netneutrality.core.thread.ThreadManager; -import me.bobert.netneutrality.db.entities.OTask; -import me.bobert.netneutrality.db.repository.TaskRepository; +import me.bobert.netneutrality.db.service.TaskService; import me.bobert.netneutrality.exceptions.TaskExecutionException; import me.bobert.netneutrality.thread.CleanupTaskThread; import net.dv8tion.jda.api.interactions.InteractionHook; @@ -36,7 +34,7 @@ public class TaskManager { private static final Logger logger = LogManager.getLogger(TaskManager.class); private static final ScheduledExecutorService executor = ThreadManager.getScheduledExecutor(); private static TaskManager instance; - private final TaskRegistry taskRegistry; + private final TaskService taskService; private final Map tasks; private final Map persistableTasks; private final Map deletableTasksContext; @@ -46,7 +44,7 @@ public class TaskManager { this.tasks = new HashMap<>(); this.persistableTasks = new HashMap<>(); this.deletableTasksContext = new HashMap<>(); - this.taskRegistry = new TaskRegistry(); + this.taskService = new TaskService(this); } public static TaskManager getInstance() { @@ -58,7 +56,11 @@ public class TaskManager { } public void init() { - taskRegistry.loadTasks(); + taskService.loadTasks(); + } + + public TaskService getTaskService() { + return taskService; } public Task getTask(String id) { @@ -107,7 +109,7 @@ public class TaskManager { logger.info("Inserting task: {}", task); if (task instanceof PersistableTask) { - persistTask((PersistableTask) task); + taskService.persistTask((PersistableTask) task); persistableTasks.put(id, (PersistableTask) task); } else { tasks.put(id, task); @@ -180,34 +182,6 @@ public class TaskManager { } } - public void persistTask(PersistableTask task) { - String taskClass = task.getClass().getName(); - if (taskRegistry.getTaskCreator(taskClass) == null) { - logger.error("No TaskCreator found for class: {}", taskClass); - return; - } - - TaskRepository taskRepository = new TaskRepository(); - OTask oTask = taskRepository.findById(task.getId()); - if (oTask == null) { - oTask = new OTask(); - } - - oTask.setTaskId(task.getId()); - oTask.setTaskClass(task.getClass().getName()); - oTask.setPayload(task.toPayload()); - - taskRepository.save(oTask); - } - - public void unpersistTask(PersistableTask task) { - logger.debug("Unpersisting task: {}", task); - TaskRepository taskRepository = new TaskRepository(); - - taskRepository.deleteBy(task.getId()); - persistableTasks.remove(task.getId()); - } - private void deleteInteraction(Task task) { if (task instanceof WithParent taskWithParent) { Task parent = (Task) taskWithParent.getParentTask(); diff --git a/src/main/java/me/bobert/netneutrality/core/tasks/persistence/TaskRegistry.java b/src/main/java/me/bobert/netneutrality/core/tasks/persistence/TaskRegistry.java index 74e7ca2..1e0362f 100644 --- a/src/main/java/me/bobert/netneutrality/core/tasks/persistence/TaskRegistry.java +++ b/src/main/java/me/bobert/netneutrality/core/tasks/persistence/TaskRegistry.java @@ -6,9 +6,6 @@ package me.bobert.netneutrality.core.tasks.persistence; */ import me.bobert.netneutrality.core.tasks.PersistableTask; -import me.bobert.netneutrality.core.tasks.TaskManager; -import me.bobert.netneutrality.db.entities.OTask; -import me.bobert.netneutrality.db.repository.TaskRepository; import org.apache.commons.io.IOUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -19,7 +16,6 @@ import java.io.FileNotFoundException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.HashMap; -import java.util.List; import java.util.Map; public class TaskRegistry { @@ -29,19 +25,17 @@ public class TaskRegistry { } private static final Logger logger = LogManager.getLogger(TaskRegistry.class); - private final Map taskCreators = new HashMap<>(); - private final TaskRepository taskRepository; + private static final Map taskCreators = new HashMap<>(); public TaskRegistry() { - taskRepository = new TaskRepository(); loadTaskConfig(); } - public TaskCreator getTaskCreator(String className) { + public static TaskCreator getTaskCreator(String className) { return taskCreators.get(className); } - private void loadTaskConfig() { + private static void loadTaskConfig() { String fileName = "persistable-tasks.json"; try (InputStream is = TaskFactory.class.getClassLoader().getResourceAsStream(fileName)) { @@ -73,29 +67,4 @@ public class TaskRegistry { logger.error(e); } } - - public void loadTasks() { - logger.info("Loading persistable tasks..."); - List tasks = taskRepository.findAll(); - - for (OTask oTask : tasks) { - String taskClass = oTask.getTaskClass(); - String payload = oTask.getPayload(); - - try { - TaskCreator creator = getTaskCreator(taskClass); - if (creator == null) { - throw new IllegalArgumentException("No task creator registered for class: " + taskClass); - } - - JSONObject json = new JSONObject(payload); - PersistableTask task = creator.fromPayload(json); - - logger.info("Loaded task: {}", task); - TaskManager.getInstance().getPersistableTaskMap().put(task.getId(), task); - } catch (Exception e) { - logger.error("Error loading task: {}", payload, e); - } - } - } } diff --git a/src/main/java/me/bobert/netneutrality/db/repository/TaskRepository.java b/src/main/java/me/bobert/netneutrality/db/repository/TaskRepository.java index 78070e3..127fd0a 100644 --- a/src/main/java/me/bobert/netneutrality/db/repository/TaskRepository.java +++ b/src/main/java/me/bobert/netneutrality/db/repository/TaskRepository.java @@ -10,8 +10,6 @@ import me.bobert.netneutrality.core.db.SessionManager; import me.bobert.netneutrality.db.Repository; import me.bobert.netneutrality.db.entities.OTask; import me.bobert.netneutrality.utils.JpaUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.hibernate.Session; import org.hibernate.query.Query; @@ -19,7 +17,6 @@ import java.util.ArrayList; import java.util.List; public class TaskRepository implements Repository { - private static final Logger logger = LogManager.getLogger(TaskRepository.class); @Override public List findAll() { diff --git a/src/main/java/me/bobert/netneutrality/db/service/TaskService.java b/src/main/java/me/bobert/netneutrality/db/service/TaskService.java new file mode 100644 index 0000000..4c55388 --- /dev/null +++ b/src/main/java/me/bobert/netneutrality/db/service/TaskService.java @@ -0,0 +1,81 @@ +package me.bobert.netneutrality.db.service; +/* + * Copyright (c) anthorob + * + * https://discord.gg/qUa6zNFZsd + */ + +import me.bobert.netneutrality.core.tasks.PersistableTask; +import me.bobert.netneutrality.core.tasks.TaskManager; +import me.bobert.netneutrality.core.tasks.persistence.TaskRegistry; +import me.bobert.netneutrality.db.entities.OTask; +import me.bobert.netneutrality.db.repository.TaskRepository; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.json.JSONObject; + +import java.util.List; + +public class TaskService { + private static final Logger logger = LogManager.getLogger(TaskService.class); + private final TaskManager taskManager; + private final TaskRepository taskRepository; + + public TaskService(TaskManager taskManager) { + this.taskManager = taskManager; + this.taskRepository = new TaskRepository(); + } + + public void loadTasks() { + logger.info("Loading persistable tasks..."); + List tasks = taskRepository.findAll(); + + for (OTask oTask : tasks) { + String taskClass = oTask.getTaskClass(); + String payload = oTask.getPayload(); + + try { + TaskRegistry.TaskCreator creator = TaskRegistry.getTaskCreator(taskClass); + if (creator == null) { + throw new IllegalArgumentException("No task creator registered for class: " + taskClass); + } + + JSONObject json = new JSONObject(payload); + PersistableTask task = creator.fromPayload(json); + + logger.info("Loaded task: {}", task); + TaskManager.getInstance().getPersistableTaskMap().put(task.getId(), task); + } catch (Exception e) { + logger.error("Error loading task: {}", payload, e); + } + } + } + + public void persistTask(PersistableTask task) { + String taskClass = task.getClass().getName(); + if (TaskRegistry.getTaskCreator(taskClass) == null) { + logger.error("No TaskCreator found for class: {}", taskClass); + return; + } + + TaskRepository taskRepository = new TaskRepository(); + OTask oTask = taskRepository.findById(task.getId()); + if (oTask == null) { + oTask = new OTask(); + } + + oTask.setTaskId(task.getId()); + oTask.setTaskClass(task.getClass().getName()); + oTask.setPayload(task.toPayload()); + + taskRepository.save(oTask); + } + + public void unpersistTask(PersistableTask task) { + logger.debug("Unpersisting task: {}", task); + TaskRepository taskRepository = new TaskRepository(); + + taskRepository.deleteBy(task.getId()); + taskManager.getPersistableTaskMap().remove(task.getId()); + } +}