Skip to content

Commit

Permalink
Implement Duke Level 7
Browse files Browse the repository at this point in the history
Add ability to save and load tasks on the hard drive.
  • Loading branch information
szelongq committed Aug 26, 2021
1 parent 5e5d767 commit a5ff454
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ bin/

/text-ui-test/ACTUAL.txt
text-ui-test/EXPECTED-UNIX.TXT
data/duke.txt
5 changes: 5 additions & 0 deletions src/main/java/Deadline.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ public Deadline(String taskName, String taskDate) {
this(taskName, taskDate, false);
}

@Override
public String toSaveFormat() {
return String.format("D, %d, %s, %s", isDone() ? 1 : 0, getTaskName(), taskDate);
}

@Override
public String toString() {
return String.format("[D]%s (by: %s)", super.toString(), taskDate);
Expand Down
74 changes: 74 additions & 0 deletions src/main/java/Duke.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,23 @@
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
import java.util.ArrayList;
import java.util.Scanner;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;

public class Duke {

private static final String DUKE = "\nDuke:";
private static final String USER = "\nUser:";
private static ArrayList<Task> tasks = new ArrayList<>();

private static String dir = System.getProperty("user.dir");
private static Path path = Paths.get(dir, "data");
private static Path savePath = Path.of(path.toString(),"duke.txt");

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

String logo = " ____ _ \n"
Expand All @@ -15,6 +26,25 @@ public static void main(String[] args) throws DukeException {
+ "| |_| | |_| | < __/\n"
+ "|____/ \\__,_|_|\\_\\___|\n";
System.out.println("Hello from\n" + logo);

try {
Files.createDirectory(path);
} catch (FileAlreadyExistsException e) {
// ignore this exception
} catch (IOException e) {
e.printStackTrace();
}

if (Files.exists(savePath))
loadTasks(savePath);
else {
try {
Files.createFile(savePath);
} catch (IOException e) {
e.printStackTrace();
}
}

System.out.println(DUKE + "Hi, what do you want from me?\n");

Scanner scanner = new Scanner(System.in);
Expand Down Expand Up @@ -78,6 +108,7 @@ private static void listTasks() {

private static void completeTask(int taskNum) {
tasks.get(taskNum - 1).setDone(true);
saveTasks(savePath);
System.out.println(DUKE + "\n\tMarking task as completed:");
System.out.printf("\t\t%s\n", tasks.get(taskNum - 1));
}
Expand All @@ -103,10 +134,53 @@ else if (taskType == TaskType.TODO) {

private static void addNewTask(Task newTask) {
tasks.add(newTask);
saveTasks(savePath);
System.out.println(DUKE + "\n\tAdded:\n\t\t" + newTask);
System.out.println("\tNow you have " + tasks.size() + " tasks in the list.");
}

private static void saveTasks(Path savePath) {
try {
BufferedWriter writer = Files.newBufferedWriter(savePath);
for (Task t: tasks) {
writer.write(t.toSaveFormat() + "\n");
}
writer.close();
} catch(IOException ex){
ex.printStackTrace();
}
}

private static void loadTasks(Path savePath) {
try (BufferedReader reader = Files.newBufferedReader(savePath)) {
String line = null;
Scanner saveDataScanner;
while ((line = reader.readLine()) != null) {
saveDataScanner = new Scanner(line).useDelimiter(", ");
String taskType = saveDataScanner.next();
boolean isTaskDone = saveDataScanner.nextInt() == 1;
String taskDesc = saveDataScanner.next();
switch (taskType) {
case "T":
tasks.add(new ToDo(taskDesc, isTaskDone));
break;
case "D":
tasks.add(new Deadline(taskDesc, saveDataScanner.next(), isTaskDone));
break;
case "E":
tasks.add(new Event(taskDesc, saveDataScanner.next(), isTaskDone));
break;
}
saveDataScanner.close();
}
reader.close();
System.out.println(DUKE + "I have loaded your past tasks list!");
listTasks();
} catch (IOException ex) {
ex.printStackTrace();
}
}

private static void printErrorMessage(String message) {
System.out.println(DUKE);
System.out.println("\tError: " + message + ".");
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/Event.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ public Event(String taskName, String taskDate) {
this(taskName, taskDate, false);
}

@Override
public String toSaveFormat() {
return String.format("E, %d, %s, %s", isDone() ? 1 : 0, getTaskName(), taskDate);
}

@Override
public String toString() {
return String.format("[E]%s (at: %s)", super.toString(), taskDate);
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ public abstract class Task {
private TaskType taskType;
private boolean isDone;

public abstract String toSaveFormat();

public Task(String taskName, TaskType taskType, boolean isDone) {
this.taskName = taskName;
this.taskType = taskType;
Expand All @@ -21,6 +23,10 @@ public void setTaskName(String taskName) {
this.taskName = taskName;
}

public TaskType getTaskType() {
return taskType;
}

public boolean isDone() {
return isDone;
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/ToDo.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ public ToDo(String taskName) {
this(taskName, false);
}

@Override
public String toSaveFormat() {
return String.format("T, %d, %s", isDone() ? 1 : 0, getTaskName());
}

@Override
public String toString() {
return String.format("[T]%s", super.toString());
Expand Down

0 comments on commit a5ff454

Please sign in to comment.