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;
- }
}