From 1f3566b8a457e2ed8af825337a320a406c0bb32b Mon Sep 17 00:00:00 2001 From: Ayush Date: Thu, 7 Sep 2023 16:51:44 +0530 Subject: [PATCH] code refactor as per SOLID principal without changing functionality. --- java/pom.xml | 2 + .../training/actions/TaskActions.java | 19 +++ .../actions/impl/TaskActionsImpl.java | 94 +++++++++++++++ .../training/executioner/TaskExecutioner.java | 5 + .../executioner/impl/TaskExecutionerImpl.java | 32 +++++ .../training/main/TaskApplicationRunner.java | 20 ++++ .../codurance/training/tasks/TaskList.java | 112 +----------------- 7 files changed, 176 insertions(+), 108 deletions(-) create mode 100644 java/src/main/java/com/codurance/training/actions/TaskActions.java create mode 100644 java/src/main/java/com/codurance/training/actions/impl/TaskActionsImpl.java create mode 100644 java/src/main/java/com/codurance/training/executioner/TaskExecutioner.java create mode 100644 java/src/main/java/com/codurance/training/executioner/impl/TaskExecutionerImpl.java create mode 100644 java/src/main/java/com/codurance/training/main/TaskApplicationRunner.java diff --git a/java/pom.xml b/java/pom.xml index 6f4d7681..8f22ab22 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -5,8 +5,10 @@ tasks 0.1 + jar Task List + junit diff --git a/java/src/main/java/com/codurance/training/actions/TaskActions.java b/java/src/main/java/com/codurance/training/actions/TaskActions.java new file mode 100644 index 00000000..36fac88d --- /dev/null +++ b/java/src/main/java/com/codurance/training/actions/TaskActions.java @@ -0,0 +1,19 @@ +package com.codurance.training.actions; + + public interface TaskActions { + void show(); + + void add(String commnandLine); + + void addProject(String name); + + void setDone(String idString,boolean done); + + void check(String idString); + + void uncheck(String idString); + + void help(); + + void error(String command); +} diff --git a/java/src/main/java/com/codurance/training/actions/impl/TaskActionsImpl.java b/java/src/main/java/com/codurance/training/actions/impl/TaskActionsImpl.java new file mode 100644 index 00000000..6cd597c4 --- /dev/null +++ b/java/src/main/java/com/codurance/training/actions/impl/TaskActionsImpl.java @@ -0,0 +1,94 @@ +package com.codurance.training.actions.impl; + +import com.codurance.training.actions.TaskActions; +import com.codurance.training.tasks.Task; + +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class TaskActionsImpl implements TaskActions { + private final PrintWriter out = new PrintWriter(System.out); + + private static long lastId = 0; + + private static final Map> tasksMap= new LinkedHashMap<>(); + @Override + public void show() { + for (Map.Entry> project : tasksMap.entrySet()) { + out.println(project.getKey()); + for (Task task : project.getValue()) { + out.printf(" [%c] %d: %s%n", (task.isDone() ? 'x' : ' '), task.getId(), task.getDescription()); + } + out.println(); + } + } + @Override + public void add(String commandLine) { + String[] subcommandRest = commandLine.split(" ", 2); + String subcommand = subcommandRest[0]; + if (subcommand.equals("project")) { + addProject(subcommandRest[1]); + } else if (subcommand.equals("task")) { + String[] projectTask = subcommandRest[1].split(" ", 2); + addTask(projectTask[0], projectTask[1]); + } + } + @Override + public void addProject(String name) { + tasksMap.put(name, new ArrayList()); + } + + private void addTask(String project, String description) { + List projectTasks = tasksMap.get(project); + if (projectTasks == null) { + out.printf("Could not find a project with the name \"%s\".", project); + out.println(); + return; + } + projectTasks.add(new Task(nextId(), description, false)); + } + @Override + public void check(String idString) { + setDone(idString, true); + } + @Override + public void uncheck(String idString) { + setDone(idString, false); + } + @Override + public void setDone(String idString, boolean done) { + int id = Integer.parseInt(idString); + for (Map.Entry> project : tasksMap.entrySet()) { + for (Task task : project.getValue()) { + if (task.getId() == id) { + task.setDone(done); + return; + } + } + } + out.printf("Could not find a task with an ID of %d.", id); + out.println(); + } + @Override + public void help() { + out.println("Commands:"); + out.println(" show"); + out.println(" add project "); + out.println(" add task "); + out.println(" check "); + out.println(" uncheck "); + out.println(); + } + @Override + public void error(String command) { + out.printf("I don't know what the command \"%s\" is.", command); + out.println(); + } + + public long nextId() { + return ++lastId; + } +} diff --git a/java/src/main/java/com/codurance/training/executioner/TaskExecutioner.java b/java/src/main/java/com/codurance/training/executioner/TaskExecutioner.java new file mode 100644 index 00000000..9d174c79 --- /dev/null +++ b/java/src/main/java/com/codurance/training/executioner/TaskExecutioner.java @@ -0,0 +1,5 @@ +package com.codurance.training.executioner; + +public interface TaskExecutioner { + void execute(String commandLine); +} diff --git a/java/src/main/java/com/codurance/training/executioner/impl/TaskExecutionerImpl.java b/java/src/main/java/com/codurance/training/executioner/impl/TaskExecutionerImpl.java new file mode 100644 index 00000000..7cd1b440 --- /dev/null +++ b/java/src/main/java/com/codurance/training/executioner/impl/TaskExecutionerImpl.java @@ -0,0 +1,32 @@ +package com.codurance.training.executioner.impl; + +import com.codurance.training.actions.impl.TaskActionsImpl; +import com.codurance.training.executioner.TaskExecutioner; + +public class TaskExecutionerImpl implements TaskExecutioner { + TaskActionsImpl taskActions = new TaskActionsImpl(); + public void execute(String commandLine) { + String[] commandRest = commandLine.split(" ", 2); + String command = commandRest[0]; + switch (command) { + case "show": + taskActions.show(); + break; + case "add": + taskActions.add(commandRest[1]); + break; + case "check": + taskActions.check(commandRest[1]); + break; + case "uncheck": + taskActions.uncheck(commandRest[1]); + break; + case "help": + taskActions.help(); + break; + default: + taskActions.error(command); + break; + } + } +} diff --git a/java/src/main/java/com/codurance/training/main/TaskApplicationRunner.java b/java/src/main/java/com/codurance/training/main/TaskApplicationRunner.java new file mode 100644 index 00000000..1ae10ae6 --- /dev/null +++ b/java/src/main/java/com/codurance/training/main/TaskApplicationRunner.java @@ -0,0 +1,20 @@ +package com.codurance.training.main; + +import com.codurance.training.tasks.TaskList; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.PrintWriter; + +public class TaskApplicationRunner { + public static void main(String[] args) { + try{ + BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); + PrintWriter out = new PrintWriter(System.out); + new TaskList(in,out).run(); + }catch (Exception e){ + e.printStackTrace(); + } + + } +} \ No newline at end of file diff --git a/java/src/main/java/com/codurance/training/tasks/TaskList.java b/java/src/main/java/com/codurance/training/tasks/TaskList.java index 9a4a8202..5cf9a345 100644 --- a/java/src/main/java/com/codurance/training/tasks/TaskList.java +++ b/java/src/main/java/com/codurance/training/tasks/TaskList.java @@ -1,10 +1,10 @@ package com.codurance.training.tasks; +import com.codurance.training.executioner.impl.TaskExecutionerImpl; + import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStreamReader; import java.io.PrintWriter; -import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -12,17 +12,10 @@ public final class TaskList implements Runnable { private static final String QUIT = "quit"; - private final Map> tasks = new LinkedHashMap<>(); private final BufferedReader in; private final PrintWriter out; - private long lastId = 0; - - public static void main(String[] args) throws Exception { - BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); - PrintWriter out = new PrintWriter(System.out); - new TaskList(in, out).run(); - } + private final TaskExecutionerImpl executioner = new TaskExecutionerImpl(); public TaskList(BufferedReader reader, PrintWriter writer) { this.in = reader; @@ -42,108 +35,11 @@ public void run() { if (command.equals(QUIT)) { break; } - execute(command); - } - } - - private void execute(String commandLine) { - String[] commandRest = commandLine.split(" ", 2); - String command = commandRest[0]; - switch (command) { - case "show": - show(); - break; - case "add": - add(commandRest[1]); - break; - case "check": - check(commandRest[1]); - break; - case "uncheck": - uncheck(commandRest[1]); - break; - case "help": - help(); - break; - default: - error(command); - break; - } - } - - private void show() { - for (Map.Entry> project : tasks.entrySet()) { - out.println(project.getKey()); - for (Task task : project.getValue()) { - out.printf(" [%c] %d: %s%n", (task.isDone() ? 'x' : ' '), task.getId(), task.getDescription()); - } - out.println(); - } - } - - private void add(String commandLine) { - String[] subcommandRest = commandLine.split(" ", 2); - String subcommand = subcommandRest[0]; - if (subcommand.equals("project")) { - addProject(subcommandRest[1]); - } else if (subcommand.equals("task")) { - String[] projectTask = subcommandRest[1].split(" ", 2); - addTask(projectTask[0], projectTask[1]); + executioner.execute(command); } } - private void addProject(String name) { - tasks.put(name, new ArrayList()); - } - private void addTask(String project, String description) { - List projectTasks = tasks.get(project); - if (projectTasks == null) { - out.printf("Could not find a project with the name \"%s\".", project); - out.println(); - return; - } - projectTasks.add(new Task(nextId(), description, false)); - } - private void check(String idString) { - setDone(idString, true); - } - - private void uncheck(String idString) { - setDone(idString, false); - } - private void setDone(String idString, boolean done) { - int id = Integer.parseInt(idString); - for (Map.Entry> project : tasks.entrySet()) { - for (Task task : project.getValue()) { - if (task.getId() == id) { - task.setDone(done); - return; - } - } - } - out.printf("Could not find a task with an ID of %d.", id); - out.println(); - } - - private void help() { - out.println("Commands:"); - out.println(" show"); - out.println(" add project "); - out.println(" add task "); - out.println(" check "); - out.println(" uncheck "); - out.println(); - } - - private void error(String command) { - out.printf("I don't know what the command \"%s\" is.", command); - out.println(); - } - - private long nextId() { - return ++lastId; - } }