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
2 changes: 2 additions & 0 deletions java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
<artifactId>tasks</artifactId>
<version>0.1</version>

<packaging>jar</packaging>
<name>Task List</name>


<dependencies>
<dependency>
<groupId>junit</groupId>
Expand Down
19 changes: 19 additions & 0 deletions java/src/main/java/com/codurance/training/actions/TaskActions.java
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
@@ -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<String, List<Task>> tasksMap= new LinkedHashMap<>();
@Override
public void show() {
for (Map.Entry<String, List<Task>> 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<Task>());
}

private void addTask(String project, String description) {
List<Task> 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<String, List<Task>> 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 <project name>");
out.println(" add task <project name> <task description>");
out.println(" check <task ID>");
out.println(" uncheck <task ID>");
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;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.codurance.training.executioner;

public interface TaskExecutioner {
void execute(String commandLine);
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
Original file line number Diff line number Diff line change
@@ -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();
}

}
}
112 changes: 4 additions & 108 deletions java/src/main/java/com/codurance/training/tasks/TaskList.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,21 @@
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;

public final class TaskList implements Runnable {
private static final String QUIT = "quit";

private final Map<String, List<Task>> 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;
Expand All @@ -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<String, List<Task>> 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<Task>());
}

private void addTask(String project, String description) {
List<Task> 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<String, List<Task>> 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 <project name>");
out.println(" add task <project name> <task description>");
out.println(" check <task ID>");
out.println(" uncheck <task ID>");
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;
}
}