From d8398594b7bc43da5eb865321c5a50cec4b3923d Mon Sep 17 00:00:00 2001 From: damithc Date: Mon, 25 May 2020 00:58:18 +0800 Subject: [PATCH 01/41] Add Gradle support --- build.gradle | 46 ++++++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58695 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 183 +++++++++++++++++++++++ gradlew.bat | 103 +++++++++++++ text-ui-test/runtest.sh | 0 6 files changed, 337 insertions(+) create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat mode change 100644 => 100755 text-ui-test/runtest.sh diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000000..20c0521cc7 --- /dev/null +++ b/build.gradle @@ -0,0 +1,46 @@ +plugins { + id 'java' + id 'application' + id 'checkstyle' + id 'com.github.johnrengelman.shadow' version '5.1.0' +} + +repositories { + mavenCentral() +} + +dependencies { + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.0' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.0' +} + +test { + useJUnitPlatform() + + testLogging { + events "passed", "skipped", "failed" + + showExceptions true + exceptionFormat "full" + showCauses true + showStackTraces true + showStandardStreams = false + } +} + +application { + mainClassName = "seedu.duke.Duke" +} + +shadowJar { + archiveBaseName = "duke" + archiveClassifier = null +} + +checkstyle { + toolVersion = '8.29' +} + +run{ + standardInput = System.in +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..f3d88b1c2faf2fc91d853cd5d4242b5547257070 GIT binary patch literal 58695 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..b7c8c5dbf5 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000000..2fe81a7d95 --- /dev/null +++ b/gradlew @@ -0,0 +1,183 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000000..62bd9b9cce --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,103 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh old mode 100644 new mode 100755 From a5e37a07169811df73d6b0ef4fabaf83d416c68e Mon Sep 17 00:00:00 2001 From: ramaven Date: Thu, 19 Aug 2021 12:29:38 +0800 Subject: [PATCH 02/41] Level-1 --- src/main/java/Duke.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334cc..5d28be7fe5 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,5 @@ +import java.util.Scanner; + public class Duke { public static void main(String[] args) { String logo = " ____ _ \n" @@ -6,5 +8,23 @@ public static void main(String[] args) { + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); + + System.out.println("Hello! I'm Duke \nWhat can I do for you?"); + + Scanner sc = new Scanner(System.in); + String input = ""; + while(true){ + input = sc.nextLine(); + if(input.equals("bye")){ + System.out.println("Bye. Hope to see you again soon!\n"); + break; + //System.exit(); + } + + else { + System.out.println(input); + } + } + } } From 9f114de1a31170fedf955b04999cded0987c6764 Mon Sep 17 00:00:00 2001 From: ramaven Date: Thu, 19 Aug 2021 12:33:42 +0800 Subject: [PATCH 03/41] Level-2 --- src/main/java/Duke.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d28be7fe5..d7d6316fd2 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -12,6 +12,10 @@ public static void main(String[] args) { System.out.println("Hello! I'm Duke \nWhat can I do for you?"); Scanner sc = new Scanner(System.in); + + String[] tasks = new String[100]; + int taskCounter = 0; + String input = ""; while(true){ input = sc.nextLine(); @@ -20,9 +24,16 @@ public static void main(String[] args) { break; //System.exit(); } + else if(input.equals("list")) { + for(int i = 0; i < taskCounter; i++){ + System.out.println((i+1) + ". " + tasks[i]); + } + } else { - System.out.println(input); + tasks[taskCounter] = input; + taskCounter++; + System.out.println("added: " + input); } } From 254a8438536da5a6f268353e86e29105cef320b3 Mon Sep 17 00:00:00 2001 From: ramaven Date: Thu, 19 Aug 2021 12:53:01 +0800 Subject: [PATCH 04/41] Level-3 --- src/main/java/Duke.java | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d7d6316fd2..1795752b9b 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -13,8 +13,9 @@ public static void main(String[] args) { Scanner sc = new Scanner(System.in); - String[] tasks = new String[100]; + Task[] tasks = new Task[100]; int taskCounter = 0; + //boolean[] doneTracker = new boolean[100]; String input = ""; while(true){ @@ -26,12 +27,23 @@ public static void main(String[] args) { } else if(input.equals("list")) { for(int i = 0; i < taskCounter; i++){ - System.out.println((i+1) + ". " + tasks[i]); + String done; + if (tasks[i].done==true){ + done = "X"; + } else { + done = " "; + } + System.out.println((i+1) + "." + "[" + done + "] " + tasks[i].name); } + } else if (input.length() > 4 && input.substring(0,4).equals("done")){ + String taskDone = input.substring(5); + int taskDoneIndex = Integer.parseInt(taskDone)-1; + tasks[taskDoneIndex].makeDone(); + System.out.println("Nice! I've marked this task as done: "); + System.out.println(" [X] " + tasks[taskDoneIndex].name); } - else { - tasks[taskCounter] = input; + tasks[taskCounter] = new Task(input); taskCounter++; System.out.println("added: " + input); } @@ -39,3 +51,16 @@ else if(input.equals("list")) { } } + +class Task{ + String name; + //String taskNumber; + boolean done = false; + + Task(String name){ + this.name = name; + } + void makeDone(){ + done = true; + } +} \ No newline at end of file From dcbae9212452efa9992197182ad9116d06e22aa7 Mon Sep 17 00:00:00 2001 From: ramaven Date: Thu, 19 Aug 2021 15:56:12 +0800 Subject: [PATCH 05/41] Level-4 --- src/main/java/Duke.java | 90 +++++++++++++++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 12 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 1795752b9b..804bb6cd6e 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -27,25 +27,52 @@ public static void main(String[] args) { } else if(input.equals("list")) { for(int i = 0; i < taskCounter; i++){ - String done; - if (tasks[i].done==true){ - done = "X"; - } else { - done = " "; - } - System.out.println((i+1) + "." + "[" + done + "] " + tasks[i].name); +// String done; +// if (tasks[i].done==true){ +// done = "X"; +// } else { +// done = " "; +// } + //System.out.println((i+1) + "." + "[" + tasks[i].type + "] " + "[" + done + "] " + tasks[i].name); + System.out.println((i+1) + "." + tasks[i].toString()); } } else if (input.length() > 4 && input.substring(0,4).equals("done")){ String taskDone = input.substring(5); int taskDoneIndex = Integer.parseInt(taskDone)-1; tasks[taskDoneIndex].makeDone(); System.out.println("Nice! I've marked this task as done: "); - System.out.println(" [X] " + tasks[taskDoneIndex].name); + //System.out.println("[" + tasks[taskDoneIndex].type + "]" + " [X] " + tasks[taskDoneIndex].name); + System.out.println(tasks[taskDoneIndex].toString()); } else { - tasks[taskCounter] = new Task(input); - taskCounter++; - System.out.println("added: " + input); + System.out.println("Got it. I've added this task: "); + + if(input.substring(0,4).equals("todo")){ + Task newTask = new Task(input.substring(5), "T"); + tasks[taskCounter] = newTask; + taskCounter++; + //System.out.println(" [T]" + "[ ] " + input.substring(5)); + System.out.print(" " + newTask.toString()); + + } else if(input.substring(0,5).equals("event")){ + String at = input.split("/")[1].substring(3); + Event newEvent = new Event(input.substring(6).split("/")[0], at); + tasks[taskCounter] = newEvent; + taskCounter++; + //System.out.println(" [E]" + "[ ] " + input.substring(6)); + System.out.println(" " + newEvent.toString()); + } else { + // deadline + String by = input.split("/")[1].substring(3); + Deadline newDeadline = new Deadline(input.substring(9).split("/")[0], by); + tasks[taskCounter] = newDeadline; + taskCounter++; + //System.out.println(" [D]" + "[ ] " + input.substring(9)); + System.out.println(" " + newDeadline.toString()); + + } + + System.out.println("Now you have " + (taskCounter) + " tasks in the list."); } } @@ -56,11 +83,50 @@ class Task{ String name; //String taskNumber; boolean done = false; + String type; - Task(String name){ + Task(String name, String type){ this.name = name; + this.type = type; } void makeDone(){ done = true; } + + @Override + public String toString(){ + String doneSymbol = done? "X" : " "; + String result = "[" + type + "] " + "[" + doneSymbol + "] " + name; + return result; + } +} + +class Deadline extends Task{ + String by; + Deadline(String description, String by) { + super(description, "D"); + this.by = by; + } + + @Override + public String toString(){ + String doneSymbol = done? "X" : " "; + String result = "[" + type + "] " + "[" + doneSymbol + "] " + name + "(by: " + by + ")"; + return result; + } +} + +class Event extends Task{ + String at; + Event(String description, String at) { + super(description, "E"); + this.at = at; + } + + @Override + public String toString(){ + String doneSymbol = done? "X" : " "; + String result = "[" + type + "] " + "[" + doneSymbol + "] " + name + "(at: " + at + ")"; + return result; + } } \ No newline at end of file From cba3a3af0c0c6ab9fada4d737f9b3359bab89def Mon Sep 17 00:00:00 2001 From: ramaven Date: Thu, 19 Aug 2021 23:16:31 +0800 Subject: [PATCH 06/41] Level-5 --- src/main/java/Duke.java | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 804bb6cd6e..75749c607f 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,7 +1,7 @@ import java.util.Scanner; public class Duke { - public static void main(String[] args) { + public static void main(String[] args) throws DukeException{ String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" @@ -15,10 +15,9 @@ public static void main(String[] args) { Task[] tasks = new Task[100]; int taskCounter = 0; - //boolean[] doneTracker = new boolean[100]; String input = ""; - while(true){ + try {while(true){ input = sc.nextLine(); if(input.equals("bye")){ System.out.println("Bye. Hope to see you again soon!\n"); @@ -27,13 +26,6 @@ public static void main(String[] args) { } else if(input.equals("list")) { for(int i = 0; i < taskCounter; i++){ -// String done; -// if (tasks[i].done==true){ -// done = "X"; -// } else { -// done = " "; -// } - //System.out.println((i+1) + "." + "[" + tasks[i].type + "] " + "[" + done + "] " + tasks[i].name); System.out.println((i+1) + "." + tasks[i].toString()); } } else if (input.length() > 4 && input.substring(0,4).equals("done")){ @@ -41,17 +33,18 @@ else if(input.equals("list")) { int taskDoneIndex = Integer.parseInt(taskDone)-1; tasks[taskDoneIndex].makeDone(); System.out.println("Nice! I've marked this task as done: "); - //System.out.println("[" + tasks[taskDoneIndex].type + "]" + " [X] " + tasks[taskDoneIndex].name); System.out.println(tasks[taskDoneIndex].toString()); } else { + if(input.length()!= 4 || input.length()!=5 || input.length()!=8){ + throw new DukeException("Unacceptable input"); + } System.out.println("Got it. I've added this task: "); if(input.substring(0,4).equals("todo")){ Task newTask = new Task(input.substring(5), "T"); tasks[taskCounter] = newTask; taskCounter++; - //System.out.println(" [T]" + "[ ] " + input.substring(5)); System.out.print(" " + newTask.toString()); } else if(input.substring(0,5).equals("event")){ @@ -59,33 +52,35 @@ else if(input.equals("list")) { Event newEvent = new Event(input.substring(6).split("/")[0], at); tasks[taskCounter] = newEvent; taskCounter++; - //System.out.println(" [E]" + "[ ] " + input.substring(6)); System.out.println(" " + newEvent.toString()); - } else { + } else if(input.substring(0,8).equals("deadline")){ // deadline String by = input.split("/")[1].substring(3); Deadline newDeadline = new Deadline(input.substring(9).split("/")[0], by); tasks[taskCounter] = newDeadline; taskCounter++; - //System.out.println(" [D]" + "[ ] " + input.substring(9)); System.out.println(" " + newDeadline.toString()); + } else { + throw new DukeException("Unacceptable input"); } System.out.println("Now you have " + (taskCounter) + " tasks in the list."); } + }} catch (DukeException e){ + System.out.println("OOPS!!! You have enteted an invalid category"); } } } -class Task{ +class Task { String name; //String taskNumber; boolean done = false; String type; - Task(String name, String type){ + Task(String name, String type) { this.name = name; this.type = type; } @@ -129,4 +124,10 @@ public String toString(){ String result = "[" + type + "] " + "[" + doneSymbol + "] " + name + "(at: " + at + ")"; return result; } +} + +class DukeException extends Exception { + DukeException(String message){ + super(message); + } } \ No newline at end of file From ec3c11f4ead355c2394da9d0a1aa12d6c6993821 Mon Sep 17 00:00:00 2001 From: ramaven Date: Thu, 19 Aug 2021 23:35:22 +0800 Subject: [PATCH 07/41] Level-6 --- src/main/java/Duke.java | 44 +++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 75749c607f..622471b764 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,4 @@ +import java.util.ArrayList; import java.util.Scanner; public class Duke { @@ -13,7 +14,8 @@ public static void main(String[] args) throws DukeException{ Scanner sc = new Scanner(System.in); - Task[] tasks = new Task[100]; + //Task[] tasks = new Task[100]; + ArrayList tasks = new ArrayList(); int taskCounter = 0; String input = ""; @@ -26,46 +28,62 @@ public static void main(String[] args) throws DukeException{ } else if(input.equals("list")) { for(int i = 0; i < taskCounter; i++){ - System.out.println((i+1) + "." + tasks[i].toString()); + System.out.println((i+1) + "." + tasks.get(i).toString()); } } else if (input.length() > 4 && input.substring(0,4).equals("done")){ String taskDone = input.substring(5); int taskDoneIndex = Integer.parseInt(taskDone)-1; - tasks[taskDoneIndex].makeDone(); + tasks.get(taskDoneIndex).makeDone(); System.out.println("Nice! I've marked this task as done: "); - System.out.println(tasks[taskDoneIndex].toString()); + System.out.println(tasks.get(taskDoneIndex).toString()); } else { - if(input.length()!= 4 || input.length()!=5 || input.length()!=8){ + if(input.length()<4 ){ throw new DukeException("Unacceptable input"); } - System.out.println("Got it. I've added this task: "); - if(input.substring(0,4).equals("todo")){ Task newTask = new Task(input.substring(5), "T"); - tasks[taskCounter] = newTask; + tasks.add(newTask); taskCounter++; + System.out.println("Got it. I've added this task: "); System.out.print(" " + newTask.toString()); } else if(input.substring(0,5).equals("event")){ String at = input.split("/")[1].substring(3); Event newEvent = new Event(input.substring(6).split("/")[0], at); - tasks[taskCounter] = newEvent; + tasks.add(newEvent); taskCounter++; + System.out.println("Got it. I've added this task: "); System.out.println(" " + newEvent.toString()); - } else if(input.substring(0,8).equals("deadline")){ + } else if(input.length()>5 && input.length()<8){ + throw new DukeException("Unacceptable input"); + } + else if(input.substring(0,6).equals("delete")) { + // delete from arraylist + // reduce counter by 1 + int indexToDel = Integer.parseInt(input.substring(7)); + Task tasktoDel = tasks.get(indexToDel); + tasks.remove(indexToDel); + taskCounter--; + System.out.println(" Noted. I've removed this task: "); + System.out.println(" " + tasktoDel.toString()); + } + else if(input.substring(0,8).equals("deadline")){ // deadline String by = input.split("/")[1].substring(3); Deadline newDeadline = new Deadline(input.substring(9).split("/")[0], by); - tasks[taskCounter] = newDeadline; + tasks.add(newDeadline); taskCounter++; + System.out.println("Got it. I've added this task: "); System.out.println(" " + newDeadline.toString()); - } else { + } + + else { throw new DukeException("Unacceptable input"); } - System.out.println("Now you have " + (taskCounter) + " tasks in the list."); + System.out.println("\nNow you have " + (taskCounter) + " tasks in the list."); } }} catch (DukeException e){ System.out.println("OOPS!!! You have enteted an invalid category"); From 913b02ffec5d612d9d41be16ec49c2234a483cab Mon Sep 17 00:00:00 2001 From: ramaven Date: Thu, 2 Sep 2021 18:35:05 +0800 Subject: [PATCH 08/41] modified expected output --- text-ui-test/EXPECTED.TXT | 2 ++ 1 file changed, 2 insertions(+) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 657e74f6e7..348b7cd3f6 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -5,3 +5,5 @@ Hello from | |_| | |_| | < __/ |____/ \__,_|_|\_\___| +Hello! I'm Duke +What can I do for you? From 75ec70db093b02c70e1205bcc4c09eaba2b72893 Mon Sep 17 00:00:00 2001 From: ramaven Date: Thu, 2 Sep 2021 20:33:41 +0800 Subject: [PATCH 09/41] enum & refactoring --- src/main/java/Tasks/DeadlineTask.java | 2 ++ src/main/java/Tasks/EventTask.java | 2 ++ src/main/java/Tasks/Task.java | 2 ++ src/main/java/Tasks/TodoTask.java | 2 ++ src/main/java/exceptions/DukeException.java | 2 ++ 5 files changed, 10 insertions(+) create mode 100644 src/main/java/Tasks/DeadlineTask.java create mode 100644 src/main/java/Tasks/EventTask.java create mode 100644 src/main/java/Tasks/Task.java create mode 100644 src/main/java/Tasks/TodoTask.java create mode 100644 src/main/java/exceptions/DukeException.java diff --git a/src/main/java/Tasks/DeadlineTask.java b/src/main/java/Tasks/DeadlineTask.java new file mode 100644 index 0000000000..9706e6d81e --- /dev/null +++ b/src/main/java/Tasks/DeadlineTask.java @@ -0,0 +1,2 @@ +package Tasks;public class DeadlineTasl { +} diff --git a/src/main/java/Tasks/EventTask.java b/src/main/java/Tasks/EventTask.java new file mode 100644 index 0000000000..46da4b4469 --- /dev/null +++ b/src/main/java/Tasks/EventTask.java @@ -0,0 +1,2 @@ +package Tasks;public class EventTask { +} diff --git a/src/main/java/Tasks/Task.java b/src/main/java/Tasks/Task.java new file mode 100644 index 0000000000..4cbb8e17bc --- /dev/null +++ b/src/main/java/Tasks/Task.java @@ -0,0 +1,2 @@ +package Tasks;public class Task { +} diff --git a/src/main/java/Tasks/TodoTask.java b/src/main/java/Tasks/TodoTask.java new file mode 100644 index 0000000000..3176303fca --- /dev/null +++ b/src/main/java/Tasks/TodoTask.java @@ -0,0 +1,2 @@ +package Tasks;public class TodoTask { +} diff --git a/src/main/java/exceptions/DukeException.java b/src/main/java/exceptions/DukeException.java new file mode 100644 index 0000000000..27333bba98 --- /dev/null +++ b/src/main/java/exceptions/DukeException.java @@ -0,0 +1,2 @@ +package exceptions;public class DukeException { +} From 76f877c55d45a0f061716a68589d653b865e85b1 Mon Sep 17 00:00:00 2001 From: ramaven Date: Thu, 2 Sep 2021 20:34:34 +0800 Subject: [PATCH 10/41] enum; refactoring --- src/main/java/Duke.java | 65 ++------------------- src/main/java/Tasks/DeadlineTask.java | 18 +++++- src/main/java/Tasks/EventTask.java | 17 +++++- src/main/java/Tasks/Task.java | 33 ++++++++++- src/main/java/Tasks/TodoTask.java | 9 ++- src/main/java/exceptions/DukeException.java | 9 ++- 6 files changed, 85 insertions(+), 66 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 622471b764..88dc988c3c 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,5 @@ +import tasks.*; +import exceptions.*; import java.util.ArrayList; import java.util.Scanner; @@ -42,7 +44,7 @@ else if(input.equals("list")) { throw new DukeException("Unacceptable input"); } if(input.substring(0,4).equals("todo")){ - Task newTask = new Task(input.substring(5), "T"); + TodoTask newTask = new TodoTask(input.substring(5)); tasks.add(newTask); taskCounter++; System.out.println("Got it. I've added this task: "); @@ -50,7 +52,7 @@ else if(input.equals("list")) { } else if(input.substring(0,5).equals("event")){ String at = input.split("/")[1].substring(3); - Event newEvent = new Event(input.substring(6).split("/")[0], at); + EventTask newEvent = new EventTask(input.substring(6).split("/")[0], at); tasks.add(newEvent); taskCounter++; System.out.println("Got it. I've added this task: "); @@ -71,7 +73,7 @@ else if(input.substring(0,6).equals("delete")) { else if(input.substring(0,8).equals("deadline")){ // deadline String by = input.split("/")[1].substring(3); - Deadline newDeadline = new Deadline(input.substring(9).split("/")[0], by); + DeadlineTask newDeadline = new DeadlineTask(input.substring(9).split("/")[0], by); tasks.add(newDeadline); taskCounter++; System.out.println("Got it. I've added this task: "); @@ -92,60 +94,3 @@ else if(input.substring(0,8).equals("deadline")){ } } -class Task { - String name; - //String taskNumber; - boolean done = false; - String type; - - Task(String name, String type) { - this.name = name; - this.type = type; - } - void makeDone(){ - done = true; - } - - @Override - public String toString(){ - String doneSymbol = done? "X" : " "; - String result = "[" + type + "] " + "[" + doneSymbol + "] " + name; - return result; - } -} - -class Deadline extends Task{ - String by; - Deadline(String description, String by) { - super(description, "D"); - this.by = by; - } - - @Override - public String toString(){ - String doneSymbol = done? "X" : " "; - String result = "[" + type + "] " + "[" + doneSymbol + "] " + name + "(by: " + by + ")"; - return result; - } -} - -class Event extends Task{ - String at; - Event(String description, String at) { - super(description, "E"); - this.at = at; - } - - @Override - public String toString(){ - String doneSymbol = done? "X" : " "; - String result = "[" + type + "] " + "[" + doneSymbol + "] " + name + "(at: " + at + ")"; - return result; - } -} - -class DukeException extends Exception { - DukeException(String message){ - super(message); - } -} \ No newline at end of file diff --git a/src/main/java/Tasks/DeadlineTask.java b/src/main/java/Tasks/DeadlineTask.java index 9706e6d81e..1691ec0819 100644 --- a/src/main/java/Tasks/DeadlineTask.java +++ b/src/main/java/Tasks/DeadlineTask.java @@ -1,2 +1,18 @@ -package Tasks;public class DeadlineTasl { +package tasks; + +public class DeadlineTask extends Task{ + String by; + public DeadlineTask(String description, String by) { + super(description, TaskType.DEADLINE); + this.by = by; + } + + @Override + public String toString(){ + String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT? "E" : "D"; + String doneSymbol = isDone? "X" : " "; + String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + "(by: " + by + ")"; + return result; + } + } diff --git a/src/main/java/Tasks/EventTask.java b/src/main/java/Tasks/EventTask.java index 46da4b4469..983e745e87 100644 --- a/src/main/java/Tasks/EventTask.java +++ b/src/main/java/Tasks/EventTask.java @@ -1,2 +1,17 @@ -package Tasks;public class EventTask { +package tasks; + +public class EventTask extends Task { + String at; + public EventTask(String description, String at) { + super(description, TaskType.EVENT); + this.at = at; + } + + @Override + public String toString(){ + String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT? "E" : "D"; + String doneSymbol = isDone? "X" : " "; + String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + "(at: " + at + ")"; + return result; + } } diff --git a/src/main/java/Tasks/Task.java b/src/main/java/Tasks/Task.java index 4cbb8e17bc..a6c3041d51 100644 --- a/src/main/java/Tasks/Task.java +++ b/src/main/java/Tasks/Task.java @@ -1,2 +1,33 @@ -package Tasks;public class Task { +package tasks; + +public class Task { + + protected String name; + protected boolean isDone = false; + TaskType type; + + public enum TaskType { + TODO, DEADLINE, EVENT + } + + public Task(String name, TaskType type) { + this.name = name; + this.type = type; + } + + public boolean isDone(){ + return isDone; + } + public void makeDone(){ + isDone = true; + } + + @Override + public String toString(){ + String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT? "E" : "D"; + String doneSymbol = isDone? "X" : " "; + String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name; + return result; + } + } diff --git a/src/main/java/Tasks/TodoTask.java b/src/main/java/Tasks/TodoTask.java index 3176303fca..67b7267098 100644 --- a/src/main/java/Tasks/TodoTask.java +++ b/src/main/java/Tasks/TodoTask.java @@ -1,2 +1,9 @@ -package Tasks;public class TodoTask { +package tasks; + +public class TodoTask extends Task{ + + public TodoTask(String description) { + super(description, TaskType.TODO); + } + } diff --git a/src/main/java/exceptions/DukeException.java b/src/main/java/exceptions/DukeException.java index 27333bba98..95fdbe5802 100644 --- a/src/main/java/exceptions/DukeException.java +++ b/src/main/java/exceptions/DukeException.java @@ -1,2 +1,7 @@ -package exceptions;public class DukeException { -} +package exceptions; + +public class DukeException extends Exception { + public DukeException(String message){ + super(message); + } +} \ No newline at end of file From d6610f1c2e629e598400c4fac1ef736288ed69b1 Mon Sep 17 00:00:00 2001 From: ramaven Date: Sun, 5 Sep 2021 20:23:41 +0800 Subject: [PATCH 11/41] added save functionality --- src/main/java/Storage.java | 2 ++ src/main/java/TaskList.java | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 src/main/java/Storage.java create mode 100644 src/main/java/TaskList.java diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java new file mode 100644 index 0000000000..ee840ea8bc --- /dev/null +++ b/src/main/java/Storage.java @@ -0,0 +1,2 @@ +package PACKAGE_NAME;public class Storage { +} diff --git a/src/main/java/TaskList.java b/src/main/java/TaskList.java new file mode 100644 index 0000000000..685983890b --- /dev/null +++ b/src/main/java/TaskList.java @@ -0,0 +1,2 @@ +package PACKAGE_NAME;public class TaskList { +} From 6e00451e8ecd1c538a7abe7d4886be7007858cda Mon Sep 17 00:00:00 2001 From: ramaven Date: Sun, 5 Sep 2021 20:24:07 +0800 Subject: [PATCH 12/41] added save --- data.txt | 4 + src/main/java/Duke.java | 57 +++++++--- src/main/java/Storage.java | 149 +++++++++++++++++++++++++- src/main/java/TaskList.java | 37 ++++++- src/main/java/Tasks/DeadlineTask.java | 6 +- src/main/java/Tasks/EventTask.java | 6 +- src/main/java/Tasks/Task.java | 9 ++ 7 files changed, 250 insertions(+), 18 deletions(-) create mode 100644 data.txt diff --git a/data.txt b/data.txt new file mode 100644 index 0000000000..d43d34fe10 --- /dev/null +++ b/data.txt @@ -0,0 +1,4 @@ +T;1;read book +D;0;return book;June 6th +E;0;project meeting;Aug 6th 2-4pm +T;1;join sports club \ No newline at end of file diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 88dc988c3c..b7d538b2f6 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,9 +1,21 @@ import tasks.*; import exceptions.*; + +import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; public class Duke { + + private static TaskList taskList; + + +// public Duke() throws FileNotFoundException { +// this.storage = new Storage(); +// taskList = storage.loadTaskList(); +// +// } + public static void main(String[] args) throws DukeException{ String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -16,47 +28,62 @@ public static void main(String[] args) throws DukeException{ Scanner sc = new Scanner(System.in); - //Task[] tasks = new Task[100]; ArrayList tasks = new ArrayList(); int taskCounter = 0; String input = ""; + + Storage storage = new Storage(); + try{ + taskList = storage.loadTaskList(); + } catch (FileNotFoundException e){ + System.out.println(e.getMessage()); + } + + try {while(true){ input = sc.nextLine(); if(input.equals("bye")){ System.out.println("Bye. Hope to see you again soon!\n"); + storage.saveTaskListToDisk(taskList); break; //System.exit(); } else if(input.equals("list")) { - for(int i = 0; i < taskCounter; i++){ - System.out.println((i+1) + "." + tasks.get(i).toString()); + for(int i = 0; i < taskList.numberOfTasks(); i++){ + System.out.println((i+1) + "." + taskList.getTask(i).toString()); } } else if (input.length() > 4 && input.substring(0,4).equals("done")){ String taskDone = input.substring(5); int taskDoneIndex = Integer.parseInt(taskDone)-1; - tasks.get(taskDoneIndex).makeDone(); + // tasks.get(taskDoneIndex).makeDone(); + taskList.getTask(taskDoneIndex).makeDone(); System.out.println("Nice! I've marked this task as done: "); - System.out.println(tasks.get(taskDoneIndex).toString()); + // System.out.println(tasks.get(taskDoneIndex).toString()); + System.out.println(taskList.getTask(taskDoneIndex).toString()); + } else { if(input.length()<4 ){ throw new DukeException("Unacceptable input"); } if(input.substring(0,4).equals("todo")){ - TodoTask newTask = new TodoTask(input.substring(5)); - tasks.add(newTask); - taskCounter++; + TodoTask newTodo = new TodoTask(input.substring(5)); + //tasks.add(newTask); + taskList.addTask(newTodo); + //taskCounter++; System.out.println("Got it. I've added this task: "); - System.out.print(" " + newTask.toString()); + System.out.print(" " + newTodo.toString()); } else if(input.substring(0,5).equals("event")){ String at = input.split("/")[1].substring(3); EventTask newEvent = new EventTask(input.substring(6).split("/")[0], at); - tasks.add(newEvent); - taskCounter++; + //tasks.add(newEvent); + taskList.addTask(newEvent); + //taskCounter++; System.out.println("Got it. I've added this task: "); System.out.println(" " + newEvent.toString()); + } else if(input.length()>5 && input.length()<8){ throw new DukeException("Unacceptable input"); } @@ -64,7 +91,8 @@ else if(input.substring(0,6).equals("delete")) { // delete from arraylist // reduce counter by 1 int indexToDel = Integer.parseInt(input.substring(7)); - Task tasktoDel = tasks.get(indexToDel); + //Task tasktoDel = tasks.get(indexToDel); + Task tasktoDel = taskList.getTask(indexToDel-1); tasks.remove(indexToDel); taskCounter--; System.out.println(" Noted. I've removed this task: "); @@ -74,7 +102,8 @@ else if(input.substring(0,8).equals("deadline")){ // deadline String by = input.split("/")[1].substring(3); DeadlineTask newDeadline = new DeadlineTask(input.substring(9).split("/")[0], by); - tasks.add(newDeadline); + //tasks.add(newDeadline); + taskList.addTask(newDeadline); taskCounter++; System.out.println("Got it. I've added this task: "); System.out.println(" " + newDeadline.toString()); @@ -85,7 +114,7 @@ else if(input.substring(0,8).equals("deadline")){ throw new DukeException("Unacceptable input"); } - System.out.println("\nNow you have " + (taskCounter) + " tasks in the list."); + System.out.println("\nNow you have " + (taskList.numberOfTasks()) + " tasks in the list."); } }} catch (DukeException e){ System.out.println("OOPS!!! You have enteted an invalid category"); diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java index ee840ea8bc..31d5cc474a 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/Storage.java @@ -1,2 +1,149 @@ -package PACKAGE_NAME;public class Storage { +import tasks.*; +import exceptions.*; + +import java.io.*; +import java.sql.SQLOutput; +import java.util.ArrayList; +import java.util.Scanner; + + +public class Storage { + + private String userDir = System.getProperty("user.dir"); + private String dataFilePath = userDir + "/" + "data.txt"; + + private static final String DELIMITER = ";"; + + public TaskList loadTaskList() throws FileNotFoundException { + + File f = new File(dataFilePath); + ArrayList taskList = new ArrayList(); + + if(!f.exists()){ + return new TaskList(new ArrayList()); + } + + try{ + Scanner dataReader = new Scanner(f); + + while(dataReader.hasNextLine()){ + // convert saved info to Task + String currLine = dataReader.nextLine(); + Task currTask = convertStringToTask(currLine); + taskList.add(currTask); + } + dataReader.close(); + + } catch (FileNotFoundException e){ + System.out.println("File unable to load"); + } + + return new TaskList(taskList); + + } + + public void saveTaskListToDisk(TaskList taskList){ + + File f = new File(dataFilePath); + if(!f.exists()) { + try{ + boolean created = f.createNewFile(); + } catch (IOException e) { + System.out.println("Error creating file"); + } + } + + try{ + FileWriter writeTasks = new FileWriter(dataFilePath); + String allTasksString = ""; + + for(int i = 0; i < taskList.numberOfTasks(); i++){ + Task currTask = taskList.getTask(i); + String taskString = convertTaskToString(currTask); + allTasksString += taskString + "\n"; + + } + + writeTasks.write(allTasksString); + writeTasks.flush(); + writeTasks.close(); + + + } catch (IOException e){ + System.out.println("Error creating file"); + } + + } + + public String convertTaskToString(Task task){ + + // Example storage in file: + // T | 1 | read book + // D | 0 | return book | June 6th + // E | 0 | project meeting | Aug 6th 2-4pm + + String taskType = task.getType() == Task.TaskType.TODO ? "T" : + task.getType() == Task.TaskType.EVENT ? "E" : "D"; + + String taskName = task.getName(); + + String isDone = task.isDone() ? "1" : "0"; + + String taskString = taskType + DELIMITER + isDone + DELIMITER + taskName; + + if (task.getType() == Task.TaskType.EVENT){ + taskString += DELIMITER; + taskString += ((EventTask) task).getDate(); + } + + if(task.getType() == Task.TaskType.DEADLINE){ + taskString += DELIMITER; + taskString += ((DeadlineTask) task).getDate(); + } + + return taskString; + + } + + public Task convertStringToTask(String line){ + + // Example storage in file: + // T | 1 | read book + // D | 0 | return book | June 6th + // E | 0 | project meeting | Aug 6th 2-4pm + + String[] lineSplit = line.split(DELIMITER); + System.out.println(lineSplit.length); + Task.TaskType taskType = lineSplit[0].equals("T") ? Task.TaskType.TODO : + lineSplit[0].equals("D") ? Task.TaskType.DEADLINE : Task.TaskType.EVENT; + + boolean taskDone = lineSplit[1].equals("0") ? false : true; + + Task currTask; + + switch (taskType){ + case TODO: + currTask = new TodoTask(lineSplit[2]); + break; + + case DEADLINE: + currTask = new DeadlineTask(lineSplit[2], lineSplit[3]); + break; + + case EVENT: + currTask = new EventTask(lineSplit[2], lineSplit[3]); + break; + + default: + throw new IllegalArgumentException("Corrupted file"); + } + + if(taskDone ){ + currTask.makeDone(); + } + + return currTask; + + } + } diff --git a/src/main/java/TaskList.java b/src/main/java/TaskList.java index 685983890b..420460bd67 100644 --- a/src/main/java/TaskList.java +++ b/src/main/java/TaskList.java @@ -1,2 +1,37 @@ -package PACKAGE_NAME;public class TaskList { +import java.util.ArrayList; +import tasks.*; + +public class TaskList { + private ArrayList tasks; + + public TaskList(ArrayList tasks){ + this.tasks = tasks; + } + + // 1. adding a task to the list + + public void addTask(Task task){ + tasks.add(task); + } + + // 2. getting a task in a specified index + public Task getTask(int index){ + return tasks.get(index); + } + + // 3. removing a task from the specified index + public void removeTask(int index){ + tasks.remove(index); + } + + // 4. clearing tasklist + public void clearTaskList(){ + tasks.clear(); + } + + // 5. checking number of tasks in tasklist + public int numberOfTasks(){ + return tasks.size(); + } + } diff --git a/src/main/java/Tasks/DeadlineTask.java b/src/main/java/Tasks/DeadlineTask.java index 1691ec0819..06406d42ff 100644 --- a/src/main/java/Tasks/DeadlineTask.java +++ b/src/main/java/Tasks/DeadlineTask.java @@ -7,11 +7,15 @@ public DeadlineTask(String description, String by) { this.by = by; } + public String getDate(){ + return by; + } + @Override public String toString(){ String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT? "E" : "D"; String doneSymbol = isDone? "X" : " "; - String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + "(by: " + by + ")"; + String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + " (by: " + by + ")"; return result; } diff --git a/src/main/java/Tasks/EventTask.java b/src/main/java/Tasks/EventTask.java index 983e745e87..fca96c360b 100644 --- a/src/main/java/Tasks/EventTask.java +++ b/src/main/java/Tasks/EventTask.java @@ -7,11 +7,15 @@ public EventTask(String description, String at) { this.at = at; } + public String getDate(){ + return at; + } + @Override public String toString(){ String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT? "E" : "D"; String doneSymbol = isDone? "X" : " "; - String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + "(at: " + at + ")"; + String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + " (at: " + at + ")"; return result; } } diff --git a/src/main/java/Tasks/Task.java b/src/main/java/Tasks/Task.java index a6c3041d51..f2ef16daba 100644 --- a/src/main/java/Tasks/Task.java +++ b/src/main/java/Tasks/Task.java @@ -18,6 +18,15 @@ public Task(String name, TaskType type) { public boolean isDone(){ return isDone; } + + public TaskType getType(){ + return type; + } + + public String getName(){ + return name; + } + public void makeDone(){ isDone = true; } From a4d5124fc7d4164144cbd13ed7ba7d0d1b9a75ce Mon Sep 17 00:00:00 2001 From: ramaven Date: Mon, 6 Sep 2021 12:24:26 +0800 Subject: [PATCH 13/41] Added DukeDate parse --- src/main/java/Duke.java | 31 +++++++-- src/main/java/Tasks/DeadlineTask.java | 15 ++++- src/main/java/Tasks/EventTask.java | 15 ++++- src/main/java/utils/DukeDate.java | 90 +++++++++++++++++++++++++++ 4 files changed, 139 insertions(+), 12 deletions(-) create mode 100644 src/main/java/utils/DukeDate.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 88dc988c3c..4e0b300869 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -22,7 +22,7 @@ public static void main(String[] args) throws DukeException{ String input = ""; try {while(true){ - input = sc.nextLine(); + input = sc.nextLine().strip(); if(input.equals("bye")){ System.out.println("Bye. Hope to see you again soon!\n"); break; @@ -51,8 +51,18 @@ else if(input.equals("list")) { System.out.print(" " + newTask.toString()); } else if(input.substring(0,5).equals("event")){ - String at = input.split("/")[1].substring(3); - EventTask newEvent = new EventTask(input.substring(6).split("/")[0], at); + //String at = input.split("/")[1].substring(3); + + String[] dateArr = input.split("/"); + String date = ""; + for(int i=1; i< dateArr.length; i++){ + if (i==1){ + date+=dateArr[1].substring(3); + } else { + date += "/" + dateArr[i]; + } + } + EventTask newEvent = new EventTask(input.substring(6).split("/")[0], date); tasks.add(newEvent); taskCounter++; System.out.println("Got it. I've added this task: "); @@ -63,7 +73,7 @@ else if(input.equals("list")) { else if(input.substring(0,6).equals("delete")) { // delete from arraylist // reduce counter by 1 - int indexToDel = Integer.parseInt(input.substring(7)); + int indexToDel = Integer.parseInt(input.substring(7))-1; Task tasktoDel = tasks.get(indexToDel); tasks.remove(indexToDel); taskCounter--; @@ -72,8 +82,17 @@ else if(input.substring(0,6).equals("delete")) { } else if(input.substring(0,8).equals("deadline")){ // deadline - String by = input.split("/")[1].substring(3); - DeadlineTask newDeadline = new DeadlineTask(input.substring(9).split("/")[0], by); + //String by = input.split("/")[1].substring(3); + String[] dateArr = input.split("/"); + String date = ""; + for(int i=1; i< dateArr.length; i++){ + if (i==1){ + date+=dateArr[1].substring(3); + } else { + date += "/" + dateArr[i]; + } + } + DeadlineTask newDeadline = new DeadlineTask(input.substring(9).split("/")[0], date); tasks.add(newDeadline); taskCounter++; System.out.println("Got it. I've added this task: "); diff --git a/src/main/java/Tasks/DeadlineTask.java b/src/main/java/Tasks/DeadlineTask.java index 1691ec0819..de3b42cb0c 100644 --- a/src/main/java/Tasks/DeadlineTask.java +++ b/src/main/java/Tasks/DeadlineTask.java @@ -1,17 +1,26 @@ package tasks; +import utils.DukeDate; +import java.time.LocalDateTime; +import java.util.Date; public class DeadlineTask extends Task{ - String by; + String dateLiteral; + Date dateFormatted; + String dateReadable; + + public DeadlineTask(String description, String by) { super(description, TaskType.DEADLINE); - this.by = by; + this.dateLiteral = by; + this.dateFormatted = DukeDate.formatDate(by); + this.dateReadable = DukeDate.parseDateToString(dateFormatted); } @Override public String toString(){ String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT? "E" : "D"; String doneSymbol = isDone? "X" : " "; - String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + "(by: " + by + ")"; + String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + "(by: " + dateReadable + ")"; return result; } diff --git a/src/main/java/Tasks/EventTask.java b/src/main/java/Tasks/EventTask.java index 983e745e87..3931278a7a 100644 --- a/src/main/java/Tasks/EventTask.java +++ b/src/main/java/Tasks/EventTask.java @@ -1,17 +1,26 @@ package tasks; +import utils.DukeDate; + +import java.time.LocalDateTime; +import java.util.Date; public class EventTask extends Task { - String at; + String dateLiteral; + Date dateFormatted; + String dateReadable; + public EventTask(String description, String at) { super(description, TaskType.EVENT); - this.at = at; + this.dateLiteral = at; + this.dateFormatted = DukeDate.formatDate(at); + this.dateReadable = DukeDate.parseDateToString(dateFormatted); } @Override public String toString(){ String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT? "E" : "D"; String doneSymbol = isDone? "X" : " "; - String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + "(at: " + at + ")"; + String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + "(at: " + dateReadable + ")"; return result; } } diff --git a/src/main/java/utils/DukeDate.java b/src/main/java/utils/DukeDate.java new file mode 100644 index 0000000000..9419dd42b9 --- /dev/null +++ b/src/main/java/utils/DukeDate.java @@ -0,0 +1,90 @@ +package utils; + +import exceptions.DukeException; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + +public class DukeDate { + + + // OPTION 1 +// Why you don't use SimpleDateFormat instead of regex : +// +// try{ +// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS"); +// format.parse("55555"); +// System.out.println("Correct date"); +// }catch(ParseException e){ +// System.out.println("Incorrect date"); +// } + + + // OPTION 2 + + // from stackoverflow + // https://stackoverflow.com/questions/43845215/java-regex-to-check-for-date-and-time +// String[] patterns = {"yyyy-MM-dd HH:mm", "yyyy-MM-dd HH"}; +// String date = "2018-02-02 11:50"; +// boolean check = Arrays.asList(patterns).stream() +// .anyMatch(pattern -> { +// try { +// LocalDateTime.parse(date, DateTimeFormatter.ofPattern(pattern)); +// System.out.println("Correct"); +// return true; +// } catch (Exception e) { +// System.out.println("Not Correct"); +// return false; +// } +// }); +// + public static Date formatDate(String dateLiteral){ + if(dateLiteral.length()==14 || dateLiteral.length()==15){ + SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HHmm"); + try{ + Date dateFormatted = format.parse(dateLiteral); + //System.out.println(dateFormatted); + return dateFormatted; + // eg. dateLiteral = 2/12/2019 1800 + // after parse + // Mon Dec 02 18:00:00 SGT 2019 + + } catch (java.text.ParseException e){ + System.out.println("Incorrect date format"); + } + + } else if (dateLiteral.length() == 9 || dateLiteral.length() == 10){ + SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); + try{ + Date dateFormatted = format.parse(dateLiteral); + //System.out.println(dateFormatted); + return dateFormatted; + // eg. dateLiteral = 2/12/2019 + // after parse + // Mon Dec 02 00:00:00 SGT 2019 + + } catch (java.text.ParseException e){ + System.out.println("Incorrect date format"); + } + } + System.out.println("Incorrect date format"); + return new Date(); + + } + + public static String parseDateToString(Date date){ + String[] dateArr = date.toString().split(" "); + String dateStr = ""; + dateStr += dateArr[0] + ", " + dateArr[1] + " " + dateArr[2] + " " + dateArr[5]; + + // for adding the time to the string + dateStr += ", " + dateArr[3].substring(0,5); + + return dateStr; + } + + + +} From f54b7d858a6765631a9dd01d82a8c2a629004149 Mon Sep 17 00:00:00 2001 From: ramaven Date: Mon, 6 Sep 2021 13:05:39 +0800 Subject: [PATCH 14/41] fixed getDate() bug --- src/main/java/Tasks/DeadlineTask.java | 2 +- src/main/java/Tasks/EventTask.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/Tasks/DeadlineTask.java b/src/main/java/Tasks/DeadlineTask.java index 118a648950..d3e3a63598 100644 --- a/src/main/java/Tasks/DeadlineTask.java +++ b/src/main/java/Tasks/DeadlineTask.java @@ -17,7 +17,7 @@ public DeadlineTask(String description, String by) { } public String getDate(){ - return by; + return dateReadable; } @Override diff --git a/src/main/java/Tasks/EventTask.java b/src/main/java/Tasks/EventTask.java index 1d64bf7b2e..16c55d36ba 100644 --- a/src/main/java/Tasks/EventTask.java +++ b/src/main/java/Tasks/EventTask.java @@ -17,7 +17,7 @@ public EventTask(String description, String at) { } public String getDate(){ - return at; + return dateReadable; } @Override From 6e50441796e4fcbdcac376180eae80a4021a9e78 Mon Sep 17 00:00:00 2001 From: ramaven Date: Mon, 6 Sep 2021 14:10:52 +0800 Subject: [PATCH 15/41] refactored packages --- data.txt | 6 ++--- src/main/java/Duke.java | 22 ++++++++++--------- .../{ => duke}/exceptions/DukeException.java | 2 +- .../{Tasks => duke/tasks}/DeadlineTask.java | 6 ++--- .../java/{Tasks => duke/tasks}/EventTask.java | 5 ++--- src/main/java/{Tasks => duke/tasks}/Task.java | 2 +- .../java/{Tasks => duke/tasks}/TodoTask.java | 2 +- src/main/java/{ => duke}/utils/DukeDate.java | 6 +---- src/main/java/{ => duke/utils}/Storage.java | 6 ++--- src/main/java/{ => duke/utils}/TaskList.java | 6 +++-- 10 files changed, 30 insertions(+), 33 deletions(-) rename src/main/java/{ => duke}/exceptions/DukeException.java (82%) rename src/main/java/{Tasks => duke/tasks}/DeadlineTask.java (91%) rename src/main/java/{Tasks => duke/tasks}/EventTask.java (91%) rename src/main/java/{Tasks => duke/tasks}/Task.java (97%) rename src/main/java/{Tasks => duke/tasks}/TodoTask.java (86%) rename src/main/java/{ => duke}/utils/DukeDate.java (96%) rename src/main/java/{ => duke/utils}/Storage.java (98%) rename src/main/java/{ => duke/utils}/TaskList.java (87%) diff --git a/data.txt b/data.txt index d43d34fe10..8f2fceb0dd 100644 --- a/data.txt +++ b/data.txt @@ -1,4 +1,2 @@ -T;1;read book -D;0;return book;June 6th -E;0;project meeting;Aug 6th 2-4pm -T;1;join sports club \ No newline at end of file +T;0;read book +D;0;return book ;Mon, Dec 02 2019, 18:00 diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 389c68ab0e..81a84f28b7 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,5 +1,7 @@ -import tasks.*; -import exceptions.*; +import duke.tasks.*; +import duke.exceptions.*; +import duke.utils.Storage; +import duke.utils.TaskList; import java.io.FileNotFoundException; import java.util.ArrayList; @@ -11,7 +13,7 @@ public class Duke { // public Duke() throws FileNotFoundException { -// this.storage = new Storage(); +// this.storage = new duke.utils.Storage(); // taskList = storage.loadTaskList(); // // } @@ -56,10 +58,10 @@ else if(input.equals("list")) { } else if (input.length() > 4 && input.substring(0,4).equals("done")){ String taskDone = input.substring(5); int taskDoneIndex = Integer.parseInt(taskDone)-1; - // tasks.get(taskDoneIndex).makeDone(); + // duke.tasks.get(taskDoneIndex).makeDone(); taskList.getTask(taskDoneIndex).makeDone(); System.out.println("Nice! I've marked this task as done: "); - // System.out.println(tasks.get(taskDoneIndex).toString()); + // System.out.println(duke.tasks.get(taskDoneIndex).toString()); System.out.println(taskList.getTask(taskDoneIndex).toString()); } @@ -69,7 +71,7 @@ else if(input.equals("list")) { } if(input.substring(0,4).equals("todo")){ TodoTask newTodo = new TodoTask(input.substring(5)); - //tasks.add(newTask); + //duke.tasks.add(newTask); taskList.addTask(newTodo); //taskCounter++; System.out.println("Got it. I've added this task: "); @@ -90,7 +92,7 @@ else if(input.equals("list")) { String at = input.split("/")[1].substring(3); EventTask newEvent = new EventTask(input.substring(6).split("/")[0], date); - //tasks.add(newEvent); + //duke.tasks.add(newEvent); taskList.addTask(newEvent); //taskCounter++; System.out.println("Got it. I've added this task: "); @@ -104,7 +106,7 @@ else if(input.substring(0,6).equals("delete")) { // reduce counter by 1 int indexToDel = Integer.parseInt(input.substring(7))-1; - //Task tasktoDel = tasks.get(indexToDel); + //Task tasktoDel = duke.tasks.get(indexToDel); Task tasktoDel = taskList.getTask(indexToDel); tasks.remove(indexToDel); @@ -126,7 +128,7 @@ else if(input.substring(0,8).equals("deadline")){ } } DeadlineTask newDeadline = new DeadlineTask(input.substring(9).split("/")[0], date); - //tasks.add(newDeadline); + //duke.tasks.add(newDeadline); taskList.addTask(newDeadline); taskCounter++; @@ -139,7 +141,7 @@ else if(input.substring(0,8).equals("deadline")){ throw new DukeException("Unacceptable input"); } - System.out.println("\nNow you have " + (taskList.numberOfTasks()) + " tasks in the list."); + System.out.println("\nNow you have " + (taskList.numberOfTasks()) + " duke.tasks in the list."); } }} catch (DukeException e){ System.out.println("OOPS!!! You have enteted an invalid category"); diff --git a/src/main/java/exceptions/DukeException.java b/src/main/java/duke/exceptions/DukeException.java similarity index 82% rename from src/main/java/exceptions/DukeException.java rename to src/main/java/duke/exceptions/DukeException.java index 95fdbe5802..49c744cd7a 100644 --- a/src/main/java/exceptions/DukeException.java +++ b/src/main/java/duke/exceptions/DukeException.java @@ -1,4 +1,4 @@ -package exceptions; +package duke.exceptions; public class DukeException extends Exception { public DukeException(String message){ diff --git a/src/main/java/Tasks/DeadlineTask.java b/src/main/java/duke/tasks/DeadlineTask.java similarity index 91% rename from src/main/java/Tasks/DeadlineTask.java rename to src/main/java/duke/tasks/DeadlineTask.java index d3e3a63598..db356b0a7c 100644 --- a/src/main/java/Tasks/DeadlineTask.java +++ b/src/main/java/duke/tasks/DeadlineTask.java @@ -1,6 +1,6 @@ -package tasks; -import utils.DukeDate; -import java.time.LocalDateTime; +package duke.tasks; +import duke.utils.DukeDate; + import java.util.Date; public class DeadlineTask extends Task{ diff --git a/src/main/java/Tasks/EventTask.java b/src/main/java/duke/tasks/EventTask.java similarity index 91% rename from src/main/java/Tasks/EventTask.java rename to src/main/java/duke/tasks/EventTask.java index 16c55d36ba..d7780ac8b2 100644 --- a/src/main/java/Tasks/EventTask.java +++ b/src/main/java/duke/tasks/EventTask.java @@ -1,7 +1,6 @@ -package tasks; -import utils.DukeDate; +package duke.tasks; +import duke.utils.DukeDate; -import java.time.LocalDateTime; import java.util.Date; public class EventTask extends Task { diff --git a/src/main/java/Tasks/Task.java b/src/main/java/duke/tasks/Task.java similarity index 97% rename from src/main/java/Tasks/Task.java rename to src/main/java/duke/tasks/Task.java index f2ef16daba..b7e8b36542 100644 --- a/src/main/java/Tasks/Task.java +++ b/src/main/java/duke/tasks/Task.java @@ -1,4 +1,4 @@ -package tasks; +package duke.tasks; public class Task { diff --git a/src/main/java/Tasks/TodoTask.java b/src/main/java/duke/tasks/TodoTask.java similarity index 86% rename from src/main/java/Tasks/TodoTask.java rename to src/main/java/duke/tasks/TodoTask.java index 67b7267098..584b769198 100644 --- a/src/main/java/Tasks/TodoTask.java +++ b/src/main/java/duke/tasks/TodoTask.java @@ -1,4 +1,4 @@ -package tasks; +package duke.tasks; public class TodoTask extends Task{ diff --git a/src/main/java/utils/DukeDate.java b/src/main/java/duke/utils/DukeDate.java similarity index 96% rename from src/main/java/utils/DukeDate.java rename to src/main/java/duke/utils/DukeDate.java index 9419dd42b9..5751e4d27f 100644 --- a/src/main/java/utils/DukeDate.java +++ b/src/main/java/duke/utils/DukeDate.java @@ -1,10 +1,6 @@ -package utils; - -import exceptions.DukeException; +package duke.utils; import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.Date; public class DukeDate { diff --git a/src/main/java/Storage.java b/src/main/java/duke/utils/Storage.java similarity index 98% rename from src/main/java/Storage.java rename to src/main/java/duke/utils/Storage.java index 31d5cc474a..6e3915fad8 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -1,8 +1,8 @@ -import tasks.*; -import exceptions.*; +package duke.utils; + +import duke.tasks.*; import java.io.*; -import java.sql.SQLOutput; import java.util.ArrayList; import java.util.Scanner; diff --git a/src/main/java/TaskList.java b/src/main/java/duke/utils/TaskList.java similarity index 87% rename from src/main/java/TaskList.java rename to src/main/java/duke/utils/TaskList.java index 420460bd67..aca3ca977f 100644 --- a/src/main/java/TaskList.java +++ b/src/main/java/duke/utils/TaskList.java @@ -1,5 +1,7 @@ +package duke.utils; + import java.util.ArrayList; -import tasks.*; +import duke.tasks.*; public class TaskList { private ArrayList tasks; @@ -29,7 +31,7 @@ public void clearTaskList(){ tasks.clear(); } - // 5. checking number of tasks in tasklist + // 5. checking number of duke.tasks in tasklist public int numberOfTasks(){ return tasks.size(); } From 54125a490efe05e34323406a0590772172367691 Mon Sep 17 00:00:00 2001 From: ramaven Date: Mon, 6 Sep 2021 14:31:16 +0800 Subject: [PATCH 16/41] removed debug statements --- data.txt | 4 +-- src/main/java/duke/tasks/DeadlineTask.java | 2 +- src/main/java/duke/tasks/EventTask.java | 2 +- src/main/java/duke/utils/DukeDate.java | 31 ---------------------- src/main/java/duke/utils/Storage.java | 8 +++++- 5 files changed, 11 insertions(+), 36 deletions(-) diff --git a/data.txt b/data.txt index 8f2fceb0dd..4ffa1f231e 100644 --- a/data.txt +++ b/data.txt @@ -1,2 +1,2 @@ -T;0;read book -D;0;return book ;Mon, Dec 02 2019, 18:00 +T;0;readbook +D;0;return book ;2/12/2019 1800 diff --git a/src/main/java/duke/tasks/DeadlineTask.java b/src/main/java/duke/tasks/DeadlineTask.java index db356b0a7c..ee26a5d53f 100644 --- a/src/main/java/duke/tasks/DeadlineTask.java +++ b/src/main/java/duke/tasks/DeadlineTask.java @@ -17,7 +17,7 @@ public DeadlineTask(String description, String by) { } public String getDate(){ - return dateReadable; + return dateLiteral; } @Override diff --git a/src/main/java/duke/tasks/EventTask.java b/src/main/java/duke/tasks/EventTask.java index d7780ac8b2..bf2bf7d24e 100644 --- a/src/main/java/duke/tasks/EventTask.java +++ b/src/main/java/duke/tasks/EventTask.java @@ -16,7 +16,7 @@ public EventTask(String description, String at) { } public String getDate(){ - return dateReadable; + return dateLiteral; } @Override diff --git a/src/main/java/duke/utils/DukeDate.java b/src/main/java/duke/utils/DukeDate.java index 5751e4d27f..46e50028d7 100644 --- a/src/main/java/duke/utils/DukeDate.java +++ b/src/main/java/duke/utils/DukeDate.java @@ -5,37 +5,6 @@ public class DukeDate { - - // OPTION 1 -// Why you don't use SimpleDateFormat instead of regex : -// -// try{ -// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS"); -// format.parse("55555"); -// System.out.println("Correct date"); -// }catch(ParseException e){ -// System.out.println("Incorrect date"); -// } - - - // OPTION 2 - - // from stackoverflow - // https://stackoverflow.com/questions/43845215/java-regex-to-check-for-date-and-time -// String[] patterns = {"yyyy-MM-dd HH:mm", "yyyy-MM-dd HH"}; -// String date = "2018-02-02 11:50"; -// boolean check = Arrays.asList(patterns).stream() -// .anyMatch(pattern -> { -// try { -// LocalDateTime.parse(date, DateTimeFormatter.ofPattern(pattern)); -// System.out.println("Correct"); -// return true; -// } catch (Exception e) { -// System.out.println("Not Correct"); -// return false; -// } -// }); -// public static Date formatDate(String dateLiteral){ if(dateLiteral.length()==14 || dateLiteral.length()==15){ SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HHmm"); diff --git a/src/main/java/duke/utils/Storage.java b/src/main/java/duke/utils/Storage.java index 6e3915fad8..0b289c1ef6 100644 --- a/src/main/java/duke/utils/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -113,7 +113,7 @@ public Task convertStringToTask(String line){ // E | 0 | project meeting | Aug 6th 2-4pm String[] lineSplit = line.split(DELIMITER); - System.out.println(lineSplit.length); + //System.out.println(lineSplit.length); Task.TaskType taskType = lineSplit[0].equals("T") ? Task.TaskType.TODO : lineSplit[0].equals("D") ? Task.TaskType.DEADLINE : Task.TaskType.EVENT; @@ -146,4 +146,10 @@ public Task convertStringToTask(String line){ } + public String convertSavedStringDateToDukeDate(String savedDate){ + + return ""; + + } + } From c471774fcad31957a49c88f978e46b4c7d3d1914 Mon Sep 17 00:00:00 2001 From: ramaven Date: Tue, 7 Sep 2021 00:02:57 +0800 Subject: [PATCH 17/41] added Command class; OOP --- src/main/java/Duke.java | 158 ++++-------------- src/main/java/duke/commands/Command.java | 10 ++ .../java/duke/commands/DeadlineCommand.java | 39 +++++ .../java/duke/commands/DeleteCommand.java | 46 +++++ src/main/java/duke/commands/DoneCommand.java | 39 +++++ src/main/java/duke/commands/ErrorCommand.java | 19 +++ src/main/java/duke/commands/EventCommand.java | 43 +++++ src/main/java/duke/commands/ExitCommand.java | 16 ++ src/main/java/duke/commands/ListCommand.java | 20 +++ src/main/java/duke/commands/TodoCommand.java | 30 ++++ src/main/java/duke/utils/Parser.java | 40 +++++ src/main/java/duke/utils/Storage.java | 14 +- src/main/java/duke/utils/Ui.java | 46 +++++ 13 files changed, 388 insertions(+), 132 deletions(-) create mode 100644 src/main/java/duke/commands/Command.java create mode 100644 src/main/java/duke/commands/DeadlineCommand.java create mode 100644 src/main/java/duke/commands/DeleteCommand.java create mode 100644 src/main/java/duke/commands/DoneCommand.java create mode 100644 src/main/java/duke/commands/ErrorCommand.java create mode 100644 src/main/java/duke/commands/EventCommand.java create mode 100644 src/main/java/duke/commands/ExitCommand.java create mode 100644 src/main/java/duke/commands/ListCommand.java create mode 100644 src/main/java/duke/commands/TodoCommand.java create mode 100644 src/main/java/duke/utils/Parser.java create mode 100644 src/main/java/duke/utils/Ui.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 81a84f28b7..90f7c9656c 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,7 +1,10 @@ +import duke.commands.Command; import duke.tasks.*; -import duke.exceptions.*; +import duke.exceptions.DukeException; +import duke.utils.Parser; import duke.utils.Storage; import duke.utils.TaskList; +import duke.utils.Ui; import java.io.FileNotFoundException; import java.util.ArrayList; @@ -9,143 +12,48 @@ public class Duke { - private static TaskList taskList; + private TaskList taskList; + private Ui ui; + private Parser parser; + private Storage storage; - -// public Duke() throws FileNotFoundException { -// this.storage = new duke.utils.Storage(); -// taskList = storage.loadTaskList(); -// -// } - - public static void main(String[] args) throws DukeException{ - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - - System.out.println("Hello! I'm Duke \nWhat can I do for you?"); - - Scanner sc = new Scanner(System.in); - - ArrayList tasks = new ArrayList(); - int taskCounter = 0; - - String input = ""; - - Storage storage = new Storage(); + public Duke(){ + ui = new Ui(); + parser = new Parser(); + this.storage = new Storage(); try{ taskList = storage.loadTaskList(); - } catch (FileNotFoundException e){ + } catch(FileNotFoundException e){ System.out.println(e.getMessage()); } + } - try {while(true){ - input = sc.nextLine().strip(); - if(input.equals("bye")){ - System.out.println("Bye. Hope to see you again soon!\n"); - storage.saveTaskListToDisk(taskList); - break; - //System.exit(); - } - else if(input.equals("list")) { - for(int i = 0; i < taskList.numberOfTasks(); i++){ - System.out.println((i+1) + "." + taskList.getTask(i).toString()); - } - } else if (input.length() > 4 && input.substring(0,4).equals("done")){ - String taskDone = input.substring(5); - int taskDoneIndex = Integer.parseInt(taskDone)-1; - // duke.tasks.get(taskDoneIndex).makeDone(); - taskList.getTask(taskDoneIndex).makeDone(); - System.out.println("Nice! I've marked this task as done: "); - // System.out.println(duke.tasks.get(taskDoneIndex).toString()); - System.out.println(taskList.getTask(taskDoneIndex).toString()); - - } - else { - if(input.length()<4 ){ - throw new DukeException("Unacceptable input"); - } - if(input.substring(0,4).equals("todo")){ - TodoTask newTodo = new TodoTask(input.substring(5)); - //duke.tasks.add(newTask); - taskList.addTask(newTodo); - //taskCounter++; - System.out.println("Got it. I've added this task: "); - System.out.print(" " + newTodo.toString()); - - } else if(input.substring(0,5).equals("event")){ - //String at = input.split("/")[1].substring(3); - - String[] dateArr = input.split("/"); - String date = ""; - for(int i=1; i< dateArr.length; i++){ - if (i==1){ - date+=dateArr[1].substring(3); - } else { - date += "/" + dateArr[i]; - } - } - - String at = input.split("/")[1].substring(3); - EventTask newEvent = new EventTask(input.substring(6).split("/")[0], date); - //duke.tasks.add(newEvent); - taskList.addTask(newEvent); - //taskCounter++; - System.out.println("Got it. I've added this task: "); - System.out.println(" " + newEvent.toString()); - - } else if(input.length()>5 && input.length()<8){ - throw new DukeException("Unacceptable input"); - } - else if(input.substring(0,6).equals("delete")) { - // delete from arraylist - // reduce counter by 1 - - int indexToDel = Integer.parseInt(input.substring(7))-1; - //Task tasktoDel = duke.tasks.get(indexToDel); - Task tasktoDel = taskList.getTask(indexToDel); + public void run(){ + ui.start(); + boolean isExit = false; - tasks.remove(indexToDel); - taskCounter--; - System.out.println(" Noted. I've removed this task: "); - System.out.println(" " + tasktoDel.toString()); - } - else if(input.substring(0,8).equals("deadline")){ - // deadline + while(!isExit){ + try{ + String fullCommand = ui.readCommand(); + ui.showLine(); // show the divider line ("_______") + Command c = parser.parseInput(fullCommand); + c.execute(taskList, ui, storage); + isExit = c.isExit(); - //String by = input.split("/")[1].substring(3); - String[] dateArr = input.split("/"); - String date = ""; - for(int i=1; i< dateArr.length; i++){ - if (i==1){ - date+=dateArr[1].substring(3); - } else { - date += "/" + dateArr[i]; - } - } - DeadlineTask newDeadline = new DeadlineTask(input.substring(9).split("/")[0], date); - //duke.tasks.add(newDeadline); - taskList.addTask(newDeadline); - taskCounter++; - System.out.println("Got it. I've added this task: "); - System.out.println(" " + newDeadline.toString()); + } catch (Exception e){ + ui.showError(e); + } finally { + ui.showLine(); + } + } - } + } - else { - throw new DukeException("Unacceptable input"); - } + public static void main(String[] args){ - System.out.println("\nNow you have " + (taskList.numberOfTasks()) + " duke.tasks in the list."); - } - }} catch (DukeException e){ - System.out.println("OOPS!!! You have enteted an invalid category"); - } + new Duke().run(); } } diff --git a/src/main/java/duke/commands/Command.java b/src/main/java/duke/commands/Command.java new file mode 100644 index 0000000000..56f312803e --- /dev/null +++ b/src/main/java/duke/commands/Command.java @@ -0,0 +1,10 @@ +package duke.commands; + +import duke.exceptions.DukeException; +import duke.utils.*; + +public abstract class Command { + public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException; + public abstract boolean isExit(); + +} diff --git a/src/main/java/duke/commands/DeadlineCommand.java b/src/main/java/duke/commands/DeadlineCommand.java new file mode 100644 index 0000000000..13372b2bf3 --- /dev/null +++ b/src/main/java/duke/commands/DeadlineCommand.java @@ -0,0 +1,39 @@ +package duke.commands; + +import duke.tasks.DeadlineTask; +import duke.tasks.TodoTask; +import duke.utils.Storage; +import duke.utils.TaskList; +import duke.utils.Ui; + +public class DeadlineCommand extends Command{ + + private String commandString; + + public DeadlineCommand(String commandString){ + this.commandString = commandString; + } + + @Override + public void execute(TaskList taskList, Ui ui, Storage storage){ + String[] dateArr = commandString.split("/"); + String date = ""; + for(int i=1; i< dateArr.length; i++){ + if (i==1){ + date+=dateArr[1].substring(3); + } else { + date += "/" + dateArr[i]; + } + } + DeadlineTask newDeadline = new DeadlineTask(commandString.substring(9).split("/")[0], date); + taskList.addTask(newDeadline); + + System.out.println("Got it. I've added this task: "); + System.out.println(" " + newDeadline.toString()); + } + + @Override + public boolean isExit(){ + return false; + } +} diff --git a/src/main/java/duke/commands/DeleteCommand.java b/src/main/java/duke/commands/DeleteCommand.java new file mode 100644 index 0000000000..14af661732 --- /dev/null +++ b/src/main/java/duke/commands/DeleteCommand.java @@ -0,0 +1,46 @@ +package duke.commands; + +import duke.tasks.Task; +import duke.tasks.TodoTask; +import duke.utils.Storage; +import duke.utils.TaskList; +import duke.utils.Ui; + +public class DeleteCommand extends Command{ + + + private String commandString; + + public DeleteCommand(String commandString){ + this.commandString = commandString; + } + + @Override + public void execute(TaskList taskList, Ui ui, Storage storage){ + + String[] commandArr = commandString.split(" "); + try { + int taskNumberToDelete = Integer.parseInt(commandArr[1]); + if (taskNumberToDelete > taskList.numberOfTasks()){ + System.out.println("Invalid number"); + return; + } else { + int taskToDeleteIndex = taskNumberToDelete-1; + Task tasktoDel = taskList.getTask(taskToDeleteIndex); + taskList.removeTask(taskToDeleteIndex); + System.out.println("Noted. I've removed this task: "); + System.out.println(" " + tasktoDel.toString()); + + } + } catch (Exception e){ + System.out.println("Invalid input"); + } + + } + + @Override + public boolean isExit(){ + return false; + } + +} diff --git a/src/main/java/duke/commands/DoneCommand.java b/src/main/java/duke/commands/DoneCommand.java new file mode 100644 index 0000000000..4032d0a27e --- /dev/null +++ b/src/main/java/duke/commands/DoneCommand.java @@ -0,0 +1,39 @@ +package duke.commands; + +import duke.tasks.Task; +import duke.utils.*; + +public class DoneCommand extends Command{ + + String commandString; + + public DoneCommand(String commandString){ + this.commandString = commandString; + } + + @Override + public void execute(TaskList taskList, Ui ui, Storage storage){ + + String[] commandArr = commandString.split(" "); + try { + int taskNumberDone = Integer.parseInt(commandArr[1]); + if (taskNumberDone > taskList.numberOfTasks()){ + System.out.println("Invalid number"); + return; + } else { + int taskDoneIndex = taskNumberDone-1; + taskList.getTask(taskDoneIndex).makeDone(); + System.out.println("Nice! I've marked this task as done: "); + System.out.println(taskList.getTask(taskDoneIndex).toString()); + } + } catch (Exception e){ + System.out.println("Invalid input"); + } + + } + + @Override + public boolean isExit(){ + return false; + } +} diff --git a/src/main/java/duke/commands/ErrorCommand.java b/src/main/java/duke/commands/ErrorCommand.java new file mode 100644 index 0000000000..8c13cbe83e --- /dev/null +++ b/src/main/java/duke/commands/ErrorCommand.java @@ -0,0 +1,19 @@ +package duke.commands; + +import duke.utils.Storage; +import duke.utils.TaskList; +import duke.utils.Ui; + +public class ErrorCommand extends Command{ + + @Override + public void execute(TaskList taskList, Ui ui, Storage storage){ + System.out.println("Invalid input"); + } + + @Override + public boolean isExit(){ + return false; + } + +} diff --git a/src/main/java/duke/commands/EventCommand.java b/src/main/java/duke/commands/EventCommand.java new file mode 100644 index 0000000000..0bdc159d30 --- /dev/null +++ b/src/main/java/duke/commands/EventCommand.java @@ -0,0 +1,43 @@ +package duke.commands; + +import duke.tasks.EventTask; +import duke.tasks.TodoTask; +import duke.utils.Storage; +import duke.utils.TaskList; +import duke.utils.Ui; + +public class EventCommand extends Command{ + + + private String commandString; + + public EventCommand(String commandString){ + this.commandString = commandString; + } + + @Override + public void execute(TaskList taskList, Ui ui, Storage storage){ + + String[] dateArr = commandString.split("/"); + String date = ""; + for(int i=1; i< dateArr.length; i++){ + if (i==1){ + date+=dateArr[1].substring(3); + } else { + date += "/" + dateArr[i]; + } + } + + String at = commandString.split("/")[1].substring(3); + EventTask newEvent = new EventTask(commandString.substring(6).split("/")[0], date); + taskList.addTask(newEvent); + System.out.println("Got it. I've added this task: "); + System.out.println(" " + newEvent.toString()); + + } + + @Override + public boolean isExit(){ + return false; + } +} diff --git a/src/main/java/duke/commands/ExitCommand.java b/src/main/java/duke/commands/ExitCommand.java new file mode 100644 index 0000000000..7400a54892 --- /dev/null +++ b/src/main/java/duke/commands/ExitCommand.java @@ -0,0 +1,16 @@ +package duke.commands; + +import duke.utils.*; + +public class ExitCommand extends Command{ + @Override + public void execute(TaskList task, Ui ui, Storage storage){ + ui.end(); + } + + @Override + public boolean isExit(){ + return true; + } + +} diff --git a/src/main/java/duke/commands/ListCommand.java b/src/main/java/duke/commands/ListCommand.java new file mode 100644 index 0000000000..167e7f971f --- /dev/null +++ b/src/main/java/duke/commands/ListCommand.java @@ -0,0 +1,20 @@ +package duke.commands; + +import duke.utils.*; + +public class ListCommand extends Command{ + + @Override + public void execute(TaskList taskList, Ui ui, Storage storage){ + for(int i = 0; i < taskList.numberOfTasks(); i++){ + System.out.println((i+1) + "." + taskList.getTask(i).toString()); + } + + } + + @Override + public boolean isExit(){ + return false; + } + +} diff --git a/src/main/java/duke/commands/TodoCommand.java b/src/main/java/duke/commands/TodoCommand.java new file mode 100644 index 0000000000..e725bfb914 --- /dev/null +++ b/src/main/java/duke/commands/TodoCommand.java @@ -0,0 +1,30 @@ +package duke.commands; + +import duke.tasks.TodoTask; +import duke.utils.Storage; +import duke.utils.*; + +public class TodoCommand extends Command{ + + private String commandString; + + public TodoCommand(String commandString){ + this.commandString = commandString; + } + + @Override + public void execute(TaskList taskList, Ui ui, Storage storage){ + TodoTask newTodo = new TodoTask(commandString.substring(5)); + //duke.tasks.add(newTask); + taskList.addTask(newTodo); + //taskCounter++; + System.out.println("Got it. I've added this task: "); + System.out.print(" " + newTodo.toString()); + } + + @Override + public boolean isExit(){ + return false; + } + +} diff --git a/src/main/java/duke/utils/Parser.java b/src/main/java/duke/utils/Parser.java new file mode 100644 index 0000000000..6fbfde280f --- /dev/null +++ b/src/main/java/duke/utils/Parser.java @@ -0,0 +1,40 @@ +package duke.utils; +import duke.commands.*; + +public class Parser { + + public Command parseInput(String fullCommand){ + + String[] commandSplit = fullCommand.split(" "); + String actionWord = commandSplit[0]; + + switch (actionWord) { + case "bye": + return new ExitCommand(); + + case "list": + return new ListCommand(); + + case "todo": + return new TodoCommand(fullCommand); + + case "deadline": + return new DeadlineCommand(fullCommand); + + case "event": + return new EventCommand(fullCommand); + + case "done": + return new DoneCommand(fullCommand); + + case "delete": + return new DeleteCommand(fullCommand); + + } + + return new ErrorCommand(); + + } + + +} diff --git a/src/main/java/duke/utils/Storage.java b/src/main/java/duke/utils/Storage.java index 0b289c1ef6..09395a6793 100644 --- a/src/main/java/duke/utils/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -77,10 +77,10 @@ public void saveTaskListToDisk(TaskList taskList){ public String convertTaskToString(Task task){ + // Example storage in file: - // T | 1 | read book - // D | 0 | return book | June 6th - // E | 0 | project meeting | Aug 6th 2-4pm + // T;0;readbook + // D;0;return book ;2/12/2019 1800 String taskType = task.getType() == Task.TaskType.TODO ? "T" : task.getType() == Task.TaskType.EVENT ? "E" : "D"; @@ -107,10 +107,10 @@ public String convertTaskToString(Task task){ public Task convertStringToTask(String line){ - // Example storage in file: - // T | 1 | read book - // D | 0 | return book | June 6th - // E | 0 | project meeting | Aug 6th 2-4pm + // Example storage in file: + // T;0;readbook + // D;0;return book ;2/12/2019 1800 + String[] lineSplit = line.split(DELIMITER); //System.out.println(lineSplit.length); diff --git a/src/main/java/duke/utils/Ui.java b/src/main/java/duke/utils/Ui.java new file mode 100644 index 0000000000..8f4963dd77 --- /dev/null +++ b/src/main/java/duke/utils/Ui.java @@ -0,0 +1,46 @@ +package duke.utils; + +import java.util.Scanner; + +public class Ui { + + private static final String LOGO = + " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + + private static final String INTRO = "Hello from\n" + LOGO + "\n" + "What can I do for you?"; + private static final String ENDING = "Bye. Hope to see you again soon!\n"; + + private Scanner scanner; + + public Ui(){ + scanner = new Scanner(System.in); + } + + public String readCommand(){ + return scanner.nextLine(); + } + + public void start(){ + System.out.println(INTRO); + } + + public void end(){ + System.out.println(ENDING); + } + + public void showLine(){ + System.out.println( "\n________________________________________________________ \n"); + } + + public void showError(Exception e){ + System.out.println(e.toString()); + } + + + + +} From b330b0ddb3617ce7cefed1cc6646b91dc87feaeb Mon Sep 17 00:00:00 2001 From: ramaven Date: Sat, 11 Sep 2021 15:37:26 +0800 Subject: [PATCH 18/41] adhered coding standard --- src/main/java/META-INF/MANIFEST.MF | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/main/java/META-INF/MANIFEST.MF diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..d2ffd5b4d2 --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: Duke + From 35c0733f4719d6851ff49800c865a1f440c898ee Mon Sep 17 00:00:00 2001 From: ramaven Date: Sat, 11 Sep 2021 15:37:44 +0800 Subject: [PATCH 19/41] adhered coding standard --- src/main/java/duke/commands/DeadlineCommand.java | 8 ++++---- src/main/java/duke/commands/EventCommand.java | 8 ++++---- src/main/java/duke/utils/Storage.java | 12 +++++++++--- src/main/java/duke/utils/TaskList.java | 3 ++- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/main/java/duke/commands/DeadlineCommand.java b/src/main/java/duke/commands/DeadlineCommand.java index 13372b2bf3..989ef0f242 100644 --- a/src/main/java/duke/commands/DeadlineCommand.java +++ b/src/main/java/duke/commands/DeadlineCommand.java @@ -16,13 +16,13 @@ public DeadlineCommand(String commandString){ @Override public void execute(TaskList taskList, Ui ui, Storage storage){ - String[] dateArr = commandString.split("/"); + String[] dateArray = commandString.split("/"); String date = ""; - for(int i=1; i< dateArr.length; i++){ + for(int i=1; i< dateArray.length; i++){ if (i==1){ - date+=dateArr[1].substring(3); + date+=dateArray[1].substring(3); } else { - date += "/" + dateArr[i]; + date += "/" + dateArray[i]; } } DeadlineTask newDeadline = new DeadlineTask(commandString.substring(9).split("/")[0], date); diff --git a/src/main/java/duke/commands/EventCommand.java b/src/main/java/duke/commands/EventCommand.java index 0bdc159d30..c3841d9b14 100644 --- a/src/main/java/duke/commands/EventCommand.java +++ b/src/main/java/duke/commands/EventCommand.java @@ -18,13 +18,13 @@ public EventCommand(String commandString){ @Override public void execute(TaskList taskList, Ui ui, Storage storage){ - String[] dateArr = commandString.split("/"); + String[] dateArray = commandString.split("/"); String date = ""; - for(int i=1; i< dateArr.length; i++){ + for(int i=1; i< dateArray.length; i++){ if (i==1){ - date+=dateArr[1].substring(3); + date+=dateArray[1].substring(3); } else { - date += "/" + dateArr[i]; + date += "/" + dateArray[i]; } } diff --git a/src/main/java/duke/utils/Storage.java b/src/main/java/duke/utils/Storage.java index 09395a6793..3b36376518 100644 --- a/src/main/java/duke/utils/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -1,8 +1,14 @@ package duke.utils; -import duke.tasks.*; - -import java.io.*; +import duke.tasks.DeadlineTask; +import duke.tasks.EventTask; +import duke.tasks.Task; +import duke.tasks.TodoTask; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; import java.util.ArrayList; import java.util.Scanner; diff --git a/src/main/java/duke/utils/TaskList.java b/src/main/java/duke/utils/TaskList.java index aca3ca977f..8fce5b9264 100644 --- a/src/main/java/duke/utils/TaskList.java +++ b/src/main/java/duke/utils/TaskList.java @@ -1,7 +1,8 @@ package duke.utils; +import duke.tasks.Task; + import java.util.ArrayList; -import duke.tasks.*; public class TaskList { private ArrayList tasks; From 49b8c333105d9d415db0f728111280db96c4918a Mon Sep 17 00:00:00 2001 From: ramaven Date: Sat, 11 Sep 2021 18:12:52 +0800 Subject: [PATCH 20/41] added javadocs --- src/main/java/Duke.java | 18 +++++++-- src/main/java/duke/commands/Command.java | 17 ++++++++ .../java/duke/commands/DeadlineCommand.java | 5 ++- .../java/duke/commands/DeleteCommand.java | 5 ++- src/main/java/duke/commands/DoneCommand.java | 12 ++++-- src/main/java/duke/commands/ErrorCommand.java | 5 +++ src/main/java/duke/commands/EventCommand.java | 5 ++- src/main/java/duke/commands/ExitCommand.java | 5 +++ src/main/java/duke/commands/ListCommand.java | 5 +++ src/main/java/duke/commands/TodoCommand.java | 4 ++ .../java/duke/exceptions/DukeException.java | 7 ++++ src/main/java/duke/tasks/DeadlineTask.java | 16 +++++++- src/main/java/duke/tasks/EventTask.java | 15 +++++++ src/main/java/duke/tasks/Task.java | 28 +++++++++++++ src/main/java/duke/tasks/TodoTask.java | 8 ++++ src/main/java/duke/utils/DukeDate.java | 16 ++++++++ src/main/java/duke/utils/Parser.java | 10 +++++ src/main/java/duke/utils/Storage.java | 40 ++++++++++++++++--- src/main/java/duke/utils/TaskList.java | 34 ++++++++++++++-- src/main/java/duke/utils/Ui.java | 23 +++++++++++ 20 files changed, 257 insertions(+), 21 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 90f7c9656c..c2a80e1c09 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,14 +1,16 @@ import duke.commands.Command; -import duke.tasks.*; -import duke.exceptions.DukeException; import duke.utils.Parser; import duke.utils.Storage; import duke.utils.TaskList; import duke.utils.Ui; import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.Scanner; + +/** + * Command Line Task Manager called Duke + * + * @author Rama Venkatesh + */ public class Duke { @@ -17,6 +19,9 @@ public class Duke { private Parser parser; private Storage storage; + /** + * Constructor that instantiates Duke + */ public Duke(){ ui = new Ui(); parser = new Parser(); @@ -51,6 +56,11 @@ public void run(){ } + + /** + * Commences Duke + * @param args CLI arguments + */ public static void main(String[] args){ new Duke().run(); diff --git a/src/main/java/duke/commands/Command.java b/src/main/java/duke/commands/Command.java index 56f312803e..345162e027 100644 --- a/src/main/java/duke/commands/Command.java +++ b/src/main/java/duke/commands/Command.java @@ -3,8 +3,25 @@ import duke.exceptions.DukeException; import duke.utils.*; +/** + * Abstract class that represents a Command in the application + */ public abstract class Command { + /** + * Executes the command's behaviour by performing the steps specified. + * + * @param taskList TaskList object that is being used in the app + * @param ui the Ui object that is being used in the app + * @param storage the Storage object that is being used in the app + * @throws DukeException + */ public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException; + + /** + * Returns whether or not this command is an exit command + * + * @return boolean whether this is an exit command + */ public abstract boolean isExit(); } diff --git a/src/main/java/duke/commands/DeadlineCommand.java b/src/main/java/duke/commands/DeadlineCommand.java index 989ef0f242..e8ddd424d6 100644 --- a/src/main/java/duke/commands/DeadlineCommand.java +++ b/src/main/java/duke/commands/DeadlineCommand.java @@ -1,11 +1,14 @@ package duke.commands; import duke.tasks.DeadlineTask; -import duke.tasks.TodoTask; import duke.utils.Storage; import duke.utils.TaskList; import duke.utils.Ui; +/** + * Class that is a subclass of Command class + * and handles the behaviour of the Command for deadline tasks + */ public class DeadlineCommand extends Command{ private String commandString; diff --git a/src/main/java/duke/commands/DeleteCommand.java b/src/main/java/duke/commands/DeleteCommand.java index 14af661732..6d36f5bfba 100644 --- a/src/main/java/duke/commands/DeleteCommand.java +++ b/src/main/java/duke/commands/DeleteCommand.java @@ -1,11 +1,14 @@ package duke.commands; import duke.tasks.Task; -import duke.tasks.TodoTask; import duke.utils.Storage; import duke.utils.TaskList; import duke.utils.Ui; +/** + * Class that is a subclass of Command class + * and handles the behaviour of the Command for deleting a task + */ public class DeleteCommand extends Command{ diff --git a/src/main/java/duke/commands/DoneCommand.java b/src/main/java/duke/commands/DoneCommand.java index 4032d0a27e..1c79907c85 100644 --- a/src/main/java/duke/commands/DoneCommand.java +++ b/src/main/java/duke/commands/DoneCommand.java @@ -1,8 +1,14 @@ package duke.commands; -import duke.tasks.Task; -import duke.utils.*; - +import duke.utils.Storage; +import duke.utils.TaskList; +import duke.utils.Ui; + +/** + * Class that is a subclass of Command class + * and handles the behaviour of the Command for + * marking a task as done + */ public class DoneCommand extends Command{ String commandString; diff --git a/src/main/java/duke/commands/ErrorCommand.java b/src/main/java/duke/commands/ErrorCommand.java index 8c13cbe83e..b7506303a2 100644 --- a/src/main/java/duke/commands/ErrorCommand.java +++ b/src/main/java/duke/commands/ErrorCommand.java @@ -4,6 +4,11 @@ import duke.utils.TaskList; import duke.utils.Ui; +/** + * Class that is a subclass of Command class + * and handles the behaviour of the Command for + * when an error is encountered + */ public class ErrorCommand extends Command{ @Override diff --git a/src/main/java/duke/commands/EventCommand.java b/src/main/java/duke/commands/EventCommand.java index c3841d9b14..7725e0b14c 100644 --- a/src/main/java/duke/commands/EventCommand.java +++ b/src/main/java/duke/commands/EventCommand.java @@ -1,11 +1,14 @@ package duke.commands; import duke.tasks.EventTask; -import duke.tasks.TodoTask; import duke.utils.Storage; import duke.utils.TaskList; import duke.utils.Ui; +/** + * Class that is a subclass of Command class + * and handles the behaviour of the Command for event tasks + */ public class EventCommand extends Command{ diff --git a/src/main/java/duke/commands/ExitCommand.java b/src/main/java/duke/commands/ExitCommand.java index 7400a54892..36d962b3b6 100644 --- a/src/main/java/duke/commands/ExitCommand.java +++ b/src/main/java/duke/commands/ExitCommand.java @@ -2,6 +2,11 @@ import duke.utils.*; +/** + * Class that is a subclass of Command class + * and handles the behaviour of the Command for + * when exiting the program + */ public class ExitCommand extends Command{ @Override public void execute(TaskList task, Ui ui, Storage storage){ diff --git a/src/main/java/duke/commands/ListCommand.java b/src/main/java/duke/commands/ListCommand.java index 167e7f971f..ddb4b4ad7a 100644 --- a/src/main/java/duke/commands/ListCommand.java +++ b/src/main/java/duke/commands/ListCommand.java @@ -2,6 +2,11 @@ import duke.utils.*; +/** + * Class that is a subclass of Command class + * and handles the behaviour of the Command for returning + * a list of the Tasks currently in the TaskList + */ public class ListCommand extends Command{ @Override diff --git a/src/main/java/duke/commands/TodoCommand.java b/src/main/java/duke/commands/TodoCommand.java index e725bfb914..6b5fb3481d 100644 --- a/src/main/java/duke/commands/TodoCommand.java +++ b/src/main/java/duke/commands/TodoCommand.java @@ -4,6 +4,10 @@ import duke.utils.Storage; import duke.utils.*; +/** + * Class that is a subclass of Command class + * and handles the behaviour of the Command for todotasks + */ public class TodoCommand extends Command{ private String commandString; diff --git a/src/main/java/duke/exceptions/DukeException.java b/src/main/java/duke/exceptions/DukeException.java index 49c744cd7a..b0a5859abc 100644 --- a/src/main/java/duke/exceptions/DukeException.java +++ b/src/main/java/duke/exceptions/DukeException.java @@ -1,6 +1,13 @@ package duke.exceptions; +/** + * Class that handles exceptions specific to Duke + */ public class DukeException extends Exception { + /** + * Constructor that initalizes a DukeException object. + * @param message + */ public DukeException(String message){ super(message); } diff --git a/src/main/java/duke/tasks/DeadlineTask.java b/src/main/java/duke/tasks/DeadlineTask.java index ee26a5d53f..9e6c07ca87 100644 --- a/src/main/java/duke/tasks/DeadlineTask.java +++ b/src/main/java/duke/tasks/DeadlineTask.java @@ -3,12 +3,20 @@ import java.util.Date; +/** + * Class for deadline tasks that contain a + * date or datetime + */ public class DeadlineTask extends Task{ String dateLiteral; Date dateFormatted; String dateReadable; - + /** + * Constructor that initializes an EventTask object + * @param description description of event + * @param by date of deadline + */ public DeadlineTask(String description, String by) { super(description, TaskType.DEADLINE); this.dateLiteral = by; @@ -16,6 +24,12 @@ public DeadlineTask(String description, String by) { this.dateReadable = DukeDate.parseDateToString(dateFormatted); } + /** + * Gives the date associated to this task, in the same format + * as it was keyed in by the user in the CLI. + * + * @return String date + */ public String getDate(){ return dateLiteral; } diff --git a/src/main/java/duke/tasks/EventTask.java b/src/main/java/duke/tasks/EventTask.java index bf2bf7d24e..61aeccb11a 100644 --- a/src/main/java/duke/tasks/EventTask.java +++ b/src/main/java/duke/tasks/EventTask.java @@ -3,11 +3,20 @@ import java.util.Date; +/** + * Class for event tasks that contain a + * date or datetime + */ public class EventTask extends Task { String dateLiteral; Date dateFormatted; String dateReadable; + /** + * Constructor that initializes an EventTask object + * @param description description of event + * @param at date of event + */ public EventTask(String description, String at) { super(description, TaskType.EVENT); this.dateLiteral = at; @@ -15,6 +24,12 @@ public EventTask(String description, String at) { this.dateReadable = DukeDate.parseDateToString(dateFormatted); } + /** + * Gives the date associated to this task, in the same format + * as it was keyed in by the user in the CLI. + * + * @return String date + */ public String getDate(){ return dateLiteral; } diff --git a/src/main/java/duke/tasks/Task.java b/src/main/java/duke/tasks/Task.java index b7e8b36542..f534a861cb 100644 --- a/src/main/java/duke/tasks/Task.java +++ b/src/main/java/duke/tasks/Task.java @@ -1,5 +1,8 @@ package duke.tasks; +/** + * Class that encapsulates a task and its information + */ public class Task { protected String name; @@ -10,23 +13,48 @@ public enum TaskType { TODO, DEADLINE, EVENT } + /** + * Constructor that initializes a Task object + * @param name name of task + * @param type type of task (TODO, DEADLINE, EVENT) + */ public Task(String name, TaskType type) { this.name = name; this.type = type; } + /** + * Method that returns whether or not task is done + * + * @return boolean whether or not task is done + */ public boolean isDone(){ return isDone; } + /** + * Method that returns the task type of the task + * + * @return TaskType task's type + */ public TaskType getType(){ return type; } + /** + * Method that returns the name of the task + * + * @return String name of task + */ public String getName(){ return name; } + /** + * Method that marks the task as done by + * changing the Task's boolean variable isDone + * to true. + */ public void makeDone(){ isDone = true; } diff --git a/src/main/java/duke/tasks/TodoTask.java b/src/main/java/duke/tasks/TodoTask.java index 584b769198..db381b515b 100644 --- a/src/main/java/duke/tasks/TodoTask.java +++ b/src/main/java/duke/tasks/TodoTask.java @@ -1,7 +1,15 @@ package duke.tasks; +/** + * Class for deadline tasks that do not contain a + * date or datetime + */ public class TodoTask extends Task{ + /** + * Constructor that initializes an EventTask object + * @param description description of event + */ public TodoTask(String description) { super(description, TaskType.TODO); } diff --git a/src/main/java/duke/utils/DukeDate.java b/src/main/java/duke/utils/DukeDate.java index 46e50028d7..831418d609 100644 --- a/src/main/java/duke/utils/DukeDate.java +++ b/src/main/java/duke/utils/DukeDate.java @@ -3,8 +3,19 @@ import java.text.SimpleDateFormat; import java.util.Date; + +/** + * Class that handles formatting the input date + */ public class DukeDate { + /** + * Formats the input datetime that was entered in dd/MM/YYYY HHMM + * format into a Date object + * + * @param dateLiteral date that was typed in by user + * @return Date object + */ public static Date formatDate(String dateLiteral){ if(dateLiteral.length()==14 || dateLiteral.length()==15){ SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HHmm"); @@ -39,6 +50,11 @@ public static Date formatDate(String dateLiteral){ } + /** + * Parses a Date object and converts it into a reader-friendly format + * @param date Date object + * @return String dateStr + */ public static String parseDateToString(Date date){ String[] dateArr = date.toString().split(" "); String dateStr = ""; diff --git a/src/main/java/duke/utils/Parser.java b/src/main/java/duke/utils/Parser.java index 6fbfde280f..670cfbee68 100644 --- a/src/main/java/duke/utils/Parser.java +++ b/src/main/java/duke/utils/Parser.java @@ -1,8 +1,18 @@ package duke.utils; import duke.commands.*; +/** + * Class that parses user input and perfoms the corresponding + * function dictated by user input + */ public class Parser { + /** + * Parses the user input and returns the corresponding Command + * + * @param fullCommand the user's input into the CLI + * @return Command command to be executed + */ public Command parseInput(String fullCommand){ String[] commandSplit = fullCommand.split(" "); diff --git a/src/main/java/duke/utils/Storage.java b/src/main/java/duke/utils/Storage.java index 3b36376518..a18ea3fafd 100644 --- a/src/main/java/duke/utils/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -12,6 +12,10 @@ import java.util.ArrayList; import java.util.Scanner; +/** + * Class that handles storage of data by writing to disk + * and reading from disk + */ public class Storage { @@ -20,6 +24,14 @@ public class Storage { private static final String DELIMITER = ";"; + /** + * Loads task list as a TaskList object from the data.txt file + * in the directory, and creates a new file if it does not + * already exist. + * + * @return TaskList containing tasks + * @throws FileNotFoundException + */ public TaskList loadTaskList() throws FileNotFoundException { File f = new File(dataFilePath); @@ -48,7 +60,14 @@ public TaskList loadTaskList() throws FileNotFoundException { } - public void saveTaskListToDisk(TaskList taskList){ + /** + * Saves the tasks data from the TaskList into the + * data.txt file in the directory. + * + * @param taskList tasklist + * @throws IOException + */ + public void saveTaskListToDisk(TaskList taskList) throws IOException{ File f = new File(dataFilePath); if(!f.exists()) { @@ -81,6 +100,13 @@ public void saveTaskListToDisk(TaskList taskList){ } + /** + * Converts a Task object to its String representation + * in an acceptable format to be stored in the data.txt file. + * + * @param task + * @return String representation of the task + */ public String convertTaskToString(Task task){ @@ -111,6 +137,13 @@ public String convertTaskToString(Task task){ } + /** + * Converts a task from the String format that is stored in the + * data.txt file into a Task Object. + * + * @param line String representation of a task + * @return + */ public Task convertStringToTask(String line){ // Example storage in file: @@ -152,10 +185,5 @@ public Task convertStringToTask(String line){ } - public String convertSavedStringDateToDukeDate(String savedDate){ - - return ""; - - } } diff --git a/src/main/java/duke/utils/TaskList.java b/src/main/java/duke/utils/TaskList.java index 8fce5b9264..d6969e707a 100644 --- a/src/main/java/duke/utils/TaskList.java +++ b/src/main/java/duke/utils/TaskList.java @@ -4,35 +4,61 @@ import java.util.ArrayList; +/** + * Class that represents a list of tasks + */ public class TaskList { private ArrayList tasks; + /** + * Constructor that initializes a TaskList object + * @param tasks + */ public TaskList(ArrayList tasks){ this.tasks = tasks; } - // 1. adding a task to the list - + /** + * Adds a given task to the TaskList + * + * @param task + */ public void addTask(Task task){ tasks.add(task); } - // 2. getting a task in a specified index + /** + * Getting a task at a specified index in the TaskList + * + * @param index + * @return + */ public Task getTask(int index){ return tasks.get(index); } - // 3. removing a task from the specified index + /** + * Removing a task from the specified index in the TaskList + * @param index + */ public void removeTask(int index){ tasks.remove(index); } // 4. clearing tasklist + + /** + * Clears the TaskList of all tasks + */ public void clearTaskList(){ tasks.clear(); } // 5. checking number of duke.tasks in tasklist + + /** + * @return int number of tasks in the TaskList + */ public int numberOfTasks(){ return tasks.size(); } diff --git a/src/main/java/duke/utils/Ui.java b/src/main/java/duke/utils/Ui.java index 8f4963dd77..3315de2108 100644 --- a/src/main/java/duke/utils/Ui.java +++ b/src/main/java/duke/utils/Ui.java @@ -2,6 +2,9 @@ import java.util.Scanner; +/** + * Class that handles taking in user input + */ public class Ui { private static final String LOGO = @@ -16,26 +19,46 @@ public class Ui { private Scanner scanner; + /** + * Constructor that initializes a Ui object + */ public Ui(){ scanner = new Scanner(System.in); } + /** + * + * @return String contents entered into the CLI + */ public String readCommand(){ return scanner.nextLine(); } + /** + * Returns the intro statement when app first launches + */ public void start(){ System.out.println(INTRO); } + /** + * returns the ending statement before app closes + */ public void end(){ System.out.println(ENDING); } + /** + * Prints a dashed divider line + */ public void showLine(){ System.out.println( "\n________________________________________________________ \n"); } + /** + * Prints out the string message of the given Exception. + * @param e Exception + */ public void showError(Exception e){ System.out.println(e.toString()); } From a5955e09ad9e937098731ca0a4e390fb3b2af22f Mon Sep 17 00:00:00 2001 From: ramaven Date: Sat, 11 Sep 2021 19:42:46 +0800 Subject: [PATCH 21/41] added find functionality --- src/main/java/duke/commands/FindCommand.java | 58 ++++++++++++++++++++ src/main/java/duke/commands/HelpCommand.java | 43 +++++++++++++++ src/main/java/duke/utils/Parser.java | 6 ++ 3 files changed, 107 insertions(+) create mode 100644 src/main/java/duke/commands/FindCommand.java create mode 100644 src/main/java/duke/commands/HelpCommand.java diff --git a/src/main/java/duke/commands/FindCommand.java b/src/main/java/duke/commands/FindCommand.java new file mode 100644 index 0000000000..623c9017aa --- /dev/null +++ b/src/main/java/duke/commands/FindCommand.java @@ -0,0 +1,58 @@ +package duke.commands; + +import duke.exceptions.DukeException; +import duke.utils.Storage; +import duke.utils.TaskList; +import duke.utils.Ui; + +/** + * Class that is a subclass of Command class + * and handles the behaviour of the Command for + * finding tasks with keywords + */ +public class FindCommand extends Command{ + + String commandString; + + public FindCommand(String commandString){ + this.commandString = commandString; + } + + public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException{ + String[] commandArr = commandString.split(" "); + + boolean foundAnyMatch = false; + int numberofMatches = 0; + + for(int i = 0; i < taskList.numberOfTasks(); i++){ + + boolean currTaskPrinted = false; + + // loop again for each keyword in input + for(int word = 1; word < commandArr.length; word++){ + if(taskList.getTask(i).getName().contains(commandArr[word])) { + if (!foundAnyMatch) { + System.out.println("Here are the matching tasks:"); + } + foundAnyMatch = true; + numberofMatches++; + if(!currTaskPrinted){ + System.out.println((numberofMatches) + "." + taskList.getTask(i).toString()); + currTaskPrinted = true; + } + + } + } + } + if (!foundAnyMatch){ + System.out.println("Sorry, we are unable to find any matching tasks"); + } + + + } + + @Override + public boolean isExit(){ + return false; + } +} diff --git a/src/main/java/duke/commands/HelpCommand.java b/src/main/java/duke/commands/HelpCommand.java new file mode 100644 index 0000000000..b400d926f6 --- /dev/null +++ b/src/main/java/duke/commands/HelpCommand.java @@ -0,0 +1,43 @@ +package duke.commands; + +import duke.exceptions.DukeException; +import duke.utils.Storage; +import duke.utils.TaskList; +import duke.utils.Ui; + +/** + * Class that is a subclass of Command class + * and handles the behaviour of the Command for + * when the user requests for help. + */ +public class HelpCommand extends Command{ + + public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException { + System.out.println("Here are the different commands in Duke"); + System.out.println("Type 'bye' to exit."); + System.out.println("Type 'list' to view all tasks in your list."); + System.out.println("Type 'delete x' to delete task number x. Eg. 'delete 5'"); + System.out.println("Type 'done x' to mark task number x as done. Eg. 'done 5'"); + System.out.println("Type 'find wordtofind' to search for tasks that contain the word"); + System.out.println("Eg. 'find apple' "); + + System.out.println("There are 3 types of tasks: Todo, Event, and Deadline"); + System.out.println("To add a Todo task, type 'todo' followed by your task description"); + System.out.println("Eg. 'todo read book' "); + System.out.println("To add a Event task, type 'event' followed by your task description, " + + "followed by '/at' followed by your event date"); + System.out.println("Eg. 'event finance paper /at 2/12/2019 1800' "); + System.out.println("To add a Deadline task, type 'event' followed by your task description, " + + "followed by '/by' followed by your deadline "); + System.out.println("Eg. 'deadline return book /by 2/12/2019 1800' "); + + System.out.println("Type 'help' to see the list of commands available"); + + + } + + @Override + public boolean isExit(){ + return false; + } +} diff --git a/src/main/java/duke/utils/Parser.java b/src/main/java/duke/utils/Parser.java index 670cfbee68..b8f6ed3451 100644 --- a/src/main/java/duke/utils/Parser.java +++ b/src/main/java/duke/utils/Parser.java @@ -40,6 +40,12 @@ public Command parseInput(String fullCommand){ case "delete": return new DeleteCommand(fullCommand); + case "find": + return new FindCommand(fullCommand); + + case "help": + return new HelpCommand(); + } return new ErrorCommand(); From f1722c764a5ff4174f54cccfa23cbba03292725e Mon Sep 17 00:00:00 2001 From: ramaven Date: Sun, 12 Sep 2021 15:37:39 +0800 Subject: [PATCH 22/41] fixed file save bug --- config/checkstyle/checkstyle.xml | 0 config/checkstyle/suppressions.xml | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 config/checkstyle/checkstyle.xml create mode 100644 config/checkstyle/suppressions.xml diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml new file mode 100644 index 0000000000..e69de29bb2 From 90738d5089726346662d58c28e40438bf155b60c Mon Sep 17 00:00:00 2001 From: ramaven Date: Sun, 12 Sep 2021 15:37:49 +0800 Subject: [PATCH 23/41] fixed file save bug --- config/checkstyle/checkstyle.xml | 398 +++++++++++++++++++ config/checkstyle/suppressions.xml | 10 + data.txt | 1 + src/main/java/Duke.java | 22 +- src/main/java/duke/commands/Command.java | 4 +- src/main/java/duke/commands/ExitCommand.java | 7 +- src/main/java/duke/utils/Storage.java | 28 +- 7 files changed, 445 insertions(+), 25 deletions(-) diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index e69de29bb2..7951f3a6c4 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -0,0 +1,398 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml index e69de29bb2..135ea49ee0 100644 --- a/config/checkstyle/suppressions.xml +++ b/config/checkstyle/suppressions.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/data.txt b/data.txt index 4ffa1f231e..d1c833c826 100644 --- a/data.txt +++ b/data.txt @@ -1,2 +1,3 @@ T;0;readbook D;0;return book ;2/12/2019 1800 +T;0;week 4 ip diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index c2a80e1c09..4d8369f62b 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,10 +1,11 @@ +import java.io.FileNotFoundException; + import duke.commands.Command; import duke.utils.Parser; import duke.utils.Storage; import duke.utils.TaskList; import duke.utils.Ui; -import java.io.FileNotFoundException; /** * Command Line Task Manager called Duke @@ -22,24 +23,27 @@ public class Duke { /** * Constructor that instantiates Duke */ - public Duke(){ + public Duke() { ui = new Ui(); parser = new Parser(); this.storage = new Storage(); - try{ + try { taskList = storage.loadTaskList(); - } catch(FileNotFoundException e){ + } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } } - public void run(){ + /** + * Method to start running the application + */ + public void run() { ui.start(); boolean isExit = false; - while(!isExit){ - try{ + while (!isExit) { + try { String fullCommand = ui.readCommand(); ui.showLine(); // show the divider line ("_______") Command c = parser.parseInput(fullCommand); @@ -47,7 +51,7 @@ public void run(){ isExit = c.isExit(); - } catch (Exception e){ + } catch (Exception e) { ui.showError(e); } finally { ui.showLine(); @@ -61,7 +65,7 @@ public void run(){ * Commences Duke * @param args CLI arguments */ - public static void main(String[] args){ + public static void main(String[] args) { new Duke().run(); diff --git a/src/main/java/duke/commands/Command.java b/src/main/java/duke/commands/Command.java index 345162e027..1df207d076 100644 --- a/src/main/java/duke/commands/Command.java +++ b/src/main/java/duke/commands/Command.java @@ -3,6 +3,8 @@ import duke.exceptions.DukeException; import duke.utils.*; +import java.io.IOException; + /** * Abstract class that represents a Command in the application */ @@ -15,7 +17,7 @@ public abstract class Command { * @param storage the Storage object that is being used in the app * @throws DukeException */ - public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException; + public abstract void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException, IOException; /** * Returns whether or not this command is an exit command diff --git a/src/main/java/duke/commands/ExitCommand.java b/src/main/java/duke/commands/ExitCommand.java index 36d962b3b6..03c9c76311 100644 --- a/src/main/java/duke/commands/ExitCommand.java +++ b/src/main/java/duke/commands/ExitCommand.java @@ -2,14 +2,17 @@ import duke.utils.*; +import java.io.IOException; + /** * Class that is a subclass of Command class * and handles the behaviour of the Command for * when exiting the program */ -public class ExitCommand extends Command{ +public class ExitCommand extends Command { @Override - public void execute(TaskList task, Ui ui, Storage storage){ + public void execute(TaskList tasks, Ui ui, Storage storage) throws IOException { + storage.saveTaskListToDisk(tasks); ui.end(); } diff --git a/src/main/java/duke/utils/Storage.java b/src/main/java/duke/utils/Storage.java index a18ea3fafd..981d3f7260 100644 --- a/src/main/java/duke/utils/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -37,14 +37,14 @@ public TaskList loadTaskList() throws FileNotFoundException { File f = new File(dataFilePath); ArrayList taskList = new ArrayList(); - if(!f.exists()){ + if (!f.exists()) { return new TaskList(new ArrayList()); } - try{ + try { Scanner dataReader = new Scanner(f); - while(dataReader.hasNextLine()){ + while (dataReader.hasNextLine()) { // convert saved info to Task String currLine = dataReader.nextLine(); Task currTask = convertStringToTask(currLine); @@ -52,7 +52,7 @@ public TaskList loadTaskList() throws FileNotFoundException { } dataReader.close(); - } catch (FileNotFoundException e){ + } catch (FileNotFoundException e) { System.out.println("File unable to load"); } @@ -67,34 +67,36 @@ public TaskList loadTaskList() throws FileNotFoundException { * @param taskList tasklist * @throws IOException */ - public void saveTaskListToDisk(TaskList taskList) throws IOException{ - + public void saveTaskListToDisk(TaskList taskList) throws IOException { File f = new File(dataFilePath); - if(!f.exists()) { - try{ + if (!f.exists()) { + try { boolean created = f.createNewFile(); } catch (IOException e) { System.out.println("Error creating file"); } } - try{ + try { FileWriter writeTasks = new FileWriter(dataFilePath); String allTasksString = ""; - for(int i = 0; i < taskList.numberOfTasks(); i++){ + for (int i = 0; i < taskList.numberOfTasks(); i++) { Task currTask = taskList.getTask(i); String taskString = convertTaskToString(currTask); allTasksString += taskString + "\n"; + System.out.println("written" + taskString); } writeTasks.write(allTasksString); writeTasks.flush(); writeTasks.close(); + System.out.println("I have saved your tasks."); + - } catch (IOException e){ + } catch (IOException e) { System.out.println("Error creating file"); } @@ -107,7 +109,7 @@ public void saveTaskListToDisk(TaskList taskList) throws IOException{ * @param task * @return String representation of the task */ - public String convertTaskToString(Task task){ + public String convertTaskToString(Task task) { // Example storage in file: @@ -160,7 +162,7 @@ public Task convertStringToTask(String line){ Task currTask; - switch (taskType){ + switch (taskType) { case TODO: currTask = new TodoTask(lineSplit[2]); break; From 8c536cbb97fdde4b7cb5a71bd959476feaeeec62 Mon Sep 17 00:00:00 2001 From: ramaven Date: Sun, 12 Sep 2021 15:41:36 +0800 Subject: [PATCH 24/41] added gradle support --- src/main/java/duke/utils/Storage.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/duke/utils/Storage.java b/src/main/java/duke/utils/Storage.java index a18ea3fafd..4f2d888427 100644 --- a/src/main/java/duke/utils/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -108,8 +108,6 @@ public void saveTaskListToDisk(TaskList taskList) throws IOException{ * @return String representation of the task */ public String convertTaskToString(Task task){ - - // Example storage in file: // T;0;readbook // D;0;return book ;2/12/2019 1800 @@ -152,7 +150,6 @@ public Task convertStringToTask(String line){ String[] lineSplit = line.split(DELIMITER); - //System.out.println(lineSplit.length); Task.TaskType taskType = lineSplit[0].equals("T") ? Task.TaskType.TODO : lineSplit[0].equals("D") ? Task.TaskType.DEADLINE : Task.TaskType.EVENT; From d183176e39c44918965acc7e9b479c8a44f0c8ae Mon Sep 17 00:00:00 2001 From: ramaven Date: Sun, 12 Sep 2021 15:55:32 +0800 Subject: [PATCH 25/41] checkstyle --- src/main/java/duke/utils/Storage.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/duke/utils/Storage.java b/src/main/java/duke/utils/Storage.java index 4f2d888427..d4feb888c3 100644 --- a/src/main/java/duke/utils/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -19,6 +19,8 @@ public class Storage { + + private String userDir = System.getProperty("user.dir"); private String dataFilePath = userDir + "/" + "data.txt"; From 6137ed52c22f87063c5ca4e2ca886cc6fd1667aa Mon Sep 17 00:00:00 2001 From: ramaven Date: Sun, 12 Sep 2021 19:28:38 +0800 Subject: [PATCH 26/41] modified gradle build file --- build.gradle | 15 +++++++++++++++ src/main/java/Duke.java | 20 +++++++++++++++++++- src/main/java/Launcher.java | 8 ++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/main/java/Launcher.java diff --git a/build.gradle b/build.gradle index 20c0521cc7..66636bab60 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,21 @@ repositories { } dependencies { + String javaFxVersion = '11' + + implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'linux' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.0' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.0' } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index c2a80e1c09..722c509275 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -4,21 +4,39 @@ import duke.utils.TaskList; import duke.utils.Ui; +import java.awt.*; import java.io.FileNotFoundException; +import javafx.application.Application; +import javafx.scene.Scene; +import javafx.scene.control.Label; +import javafx.stage.Stage; + + /** * Command Line Task Manager called Duke * * @author Rama Venkatesh */ -public class Duke { +public class Duke extends Application { private TaskList taskList; private Ui ui; private Parser parser; private Storage storage; + @Override + public void start(Stage stage){ + Label helloWorld = new Label("Hello World"); //Creating a new label control + Scene scene = new Scene(helloWorld); // Setting the scene to be our label + +// ui = new Ui(); +// ui.init(); + stage.setScene(scene); // Setting the stage to show our screen + stage.show(); // Render the stage + } + /** * Constructor that instantiates Duke */ diff --git a/src/main/java/Launcher.java b/src/main/java/Launcher.java new file mode 100644 index 0000000000..a2bf2450b3 --- /dev/null +++ b/src/main/java/Launcher.java @@ -0,0 +1,8 @@ +import javafx.application.Application; + +public class Launcher { + + public static void main(String[] args) { + Application.launch(Duke.class, args); + } +} From 48c8b010d4284a35648eb9e1c502ea36c2567bc4 Mon Sep 17 00:00:00 2001 From: ramaven Date: Mon, 13 Sep 2021 16:13:53 +0800 Subject: [PATCH 27/41] Added GUI --- data.txt | 3 + src/main/java/Duke.java | 58 +----- .../java/duke/commands/DeadlineCommand.java | 21 +- .../java/duke/commands/DeleteCommand.java | 8 +- src/main/java/duke/commands/DoneCommand.java | 8 +- src/main/java/duke/commands/ErrorCommand.java | 2 +- src/main/java/duke/commands/EventCommand.java | 5 +- src/main/java/duke/commands/FindCommand.java | 6 +- src/main/java/duke/commands/HelpCommand.java | 53 +++-- src/main/java/duke/commands/ListCommand.java | 9 +- src/main/java/duke/commands/TodoCommand.java | 4 +- src/main/java/duke/utils/DialogBox.java | 62 ++++++ src/main/java/duke/utils/Ui.java | 191 ++++++++++++++++-- src/main/resources/images/DaDuke.png | Bin 0 -> 5035 bytes src/main/resources/images/DaUser.png | Bin 0 -> 129922 bytes 15 files changed, 315 insertions(+), 115 deletions(-) create mode 100644 src/main/java/duke/utils/DialogBox.java create mode 100644 src/main/resources/images/DaDuke.png create mode 100644 src/main/resources/images/DaUser.png diff --git a/data.txt b/data.txt index d1c833c826..7432f14767 100644 --- a/data.txt +++ b/data.txt @@ -1,3 +1,6 @@ T;0;readbook D;0;return book ;2/12/2019 1800 T;0;week 4 ip +T;0;show mabel +T;1;sleep +E;0;nus run ;26/9/2021 1700 diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index e4ffee847e..d522302e2e 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,17 +1,9 @@ import java.io.FileNotFoundException; - -import duke.commands.Command; import duke.utils.Parser; import duke.utils.Storage; import duke.utils.TaskList; import duke.utils.Ui; - -import java.awt.*; -import java.io.FileNotFoundException; - import javafx.application.Application; -import javafx.scene.Scene; -import javafx.scene.control.Label; import javafx.stage.Stage; @@ -28,22 +20,10 @@ public class Duke extends Application { private Parser parser; private Storage storage; - @Override - public void start(Stage stage){ - Label helloWorld = new Label("Hello World"); //Creating a new label control - Scene scene = new Scene(helloWorld); // Setting the scene to be our label - -// ui = new Ui(); -// ui.init(); - stage.setScene(scene); // Setting the stage to show our screen - stage.show(); // Render the stage - } - /** * Constructor that instantiates Duke */ public Duke() { - ui = new Ui(); parser = new Parser(); this.storage = new Storage(); try { @@ -51,43 +31,13 @@ public Duke() { } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } - } - /** - * Method to start running the application - */ - public void run() { - ui.start(); - boolean isExit = false; - - while (!isExit) { - try { - String fullCommand = ui.readCommand(); - ui.showLine(); // show the divider line ("_______") - Command c = parser.parseInput(fullCommand); - c.execute(taskList, ui, storage); - isExit = c.isExit(); - - - } catch (Exception e) { - ui.showError(e); - } finally { - ui.showLine(); - } - } - - } - - - /** - * Commences Duke - * @param args CLI arguments - */ - public static void main(String[] args) { - - new Duke().run(); + @Override + public void start(Stage stage) { + ui = new Ui(stage, taskList, storage, parser); + ui.init(); } } diff --git a/src/main/java/duke/commands/DeadlineCommand.java b/src/main/java/duke/commands/DeadlineCommand.java index e8ddd424d6..9e391672da 100644 --- a/src/main/java/duke/commands/DeadlineCommand.java +++ b/src/main/java/duke/commands/DeadlineCommand.java @@ -9,21 +9,21 @@ * Class that is a subclass of Command class * and handles the behaviour of the Command for deadline tasks */ -public class DeadlineCommand extends Command{ +public class DeadlineCommand extends Command { private String commandString; - public DeadlineCommand(String commandString){ + public DeadlineCommand(String commandString) { this.commandString = commandString; } @Override - public void execute(TaskList taskList, Ui ui, Storage storage){ + public void execute(TaskList taskList, Ui ui, Storage storage) { String[] dateArray = commandString.split("/"); String date = ""; - for(int i=1; i< dateArray.length; i++){ - if (i==1){ - date+=dateArray[1].substring(3); + for (int i = 1; i < dateArray.length; i++) { + if (i == 1) { + date += dateArray[1].substring(3); } else { date += "/" + dateArray[i]; } @@ -31,12 +31,15 @@ public void execute(TaskList taskList, Ui ui, Storage storage){ DeadlineTask newDeadline = new DeadlineTask(commandString.substring(9).split("/")[0], date); taskList.addTask(newDeadline); - System.out.println("Got it. I've added this task: "); - System.out.println(" " + newDeadline.toString()); +// System.out.println("Got it. I've added this task: "); +// System.out.println(" " + newDeadline.toString()); + ui.printResponse("Got it. I've added this task: "); + ui.printResponse(" " + newDeadline.toString()); + } @Override - public boolean isExit(){ + public boolean isExit() { return false; } } diff --git a/src/main/java/duke/commands/DeleteCommand.java b/src/main/java/duke/commands/DeleteCommand.java index 6d36f5bfba..1547323c77 100644 --- a/src/main/java/duke/commands/DeleteCommand.java +++ b/src/main/java/duke/commands/DeleteCommand.java @@ -25,18 +25,18 @@ public void execute(TaskList taskList, Ui ui, Storage storage){ try { int taskNumberToDelete = Integer.parseInt(commandArr[1]); if (taskNumberToDelete > taskList.numberOfTasks()){ - System.out.println("Invalid number"); + ui.printResponse("Invalid number"); return; } else { int taskToDeleteIndex = taskNumberToDelete-1; Task tasktoDel = taskList.getTask(taskToDeleteIndex); taskList.removeTask(taskToDeleteIndex); - System.out.println("Noted. I've removed this task: "); - System.out.println(" " + tasktoDel.toString()); + ui.printResponse("Noted. I've removed this task: "); + ui.printResponse(" " + tasktoDel.toString()); } } catch (Exception e){ - System.out.println("Invalid input"); + ui.printResponse("Invalid input"); } } diff --git a/src/main/java/duke/commands/DoneCommand.java b/src/main/java/duke/commands/DoneCommand.java index 1c79907c85..a11e23850c 100644 --- a/src/main/java/duke/commands/DoneCommand.java +++ b/src/main/java/duke/commands/DoneCommand.java @@ -24,16 +24,16 @@ public void execute(TaskList taskList, Ui ui, Storage storage){ try { int taskNumberDone = Integer.parseInt(commandArr[1]); if (taskNumberDone > taskList.numberOfTasks()){ - System.out.println("Invalid number"); + ui.printResponse("Invalid number"); return; } else { int taskDoneIndex = taskNumberDone-1; taskList.getTask(taskDoneIndex).makeDone(); - System.out.println("Nice! I've marked this task as done: "); - System.out.println(taskList.getTask(taskDoneIndex).toString()); + ui.printResponse("Nice! I've marked this task as done: "); + ui.printResponse(taskList.getTask(taskDoneIndex).toString()); } } catch (Exception e){ - System.out.println("Invalid input"); + ui.printResponse("Invalid input"); } } diff --git a/src/main/java/duke/commands/ErrorCommand.java b/src/main/java/duke/commands/ErrorCommand.java index b7506303a2..23ed519b13 100644 --- a/src/main/java/duke/commands/ErrorCommand.java +++ b/src/main/java/duke/commands/ErrorCommand.java @@ -13,7 +13,7 @@ public class ErrorCommand extends Command{ @Override public void execute(TaskList taskList, Ui ui, Storage storage){ - System.out.println("Invalid input"); + ui.printResponse("Invalid input"); } @Override diff --git a/src/main/java/duke/commands/EventCommand.java b/src/main/java/duke/commands/EventCommand.java index 7725e0b14c..793d8cdddb 100644 --- a/src/main/java/duke/commands/EventCommand.java +++ b/src/main/java/duke/commands/EventCommand.java @@ -34,9 +34,8 @@ public void execute(TaskList taskList, Ui ui, Storage storage){ String at = commandString.split("/")[1].substring(3); EventTask newEvent = new EventTask(commandString.substring(6).split("/")[0], date); taskList.addTask(newEvent); - System.out.println("Got it. I've added this task: "); - System.out.println(" " + newEvent.toString()); - + ui.printResponse("Got it. I've added this task: "); + ui.printResponse(" " + newEvent.toString()); } @Override diff --git a/src/main/java/duke/commands/FindCommand.java b/src/main/java/duke/commands/FindCommand.java index 623c9017aa..dd7da35aad 100644 --- a/src/main/java/duke/commands/FindCommand.java +++ b/src/main/java/duke/commands/FindCommand.java @@ -32,12 +32,12 @@ public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeExcept for(int word = 1; word < commandArr.length; word++){ if(taskList.getTask(i).getName().contains(commandArr[word])) { if (!foundAnyMatch) { - System.out.println("Here are the matching tasks:"); + ui.printResponse("Here are the matching tasks:"); } foundAnyMatch = true; numberofMatches++; if(!currTaskPrinted){ - System.out.println((numberofMatches) + "." + taskList.getTask(i).toString()); + ui.printResponse((numberofMatches) + "." + taskList.getTask(i).toString()); currTaskPrinted = true; } @@ -45,7 +45,7 @@ public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeExcept } } if (!foundAnyMatch){ - System.out.println("Sorry, we are unable to find any matching tasks"); + ui.printResponse("Sorry, we are unable to find any matching tasks"); } diff --git a/src/main/java/duke/commands/HelpCommand.java b/src/main/java/duke/commands/HelpCommand.java index b400d926f6..4dabd60e40 100644 --- a/src/main/java/duke/commands/HelpCommand.java +++ b/src/main/java/duke/commands/HelpCommand.java @@ -13,25 +13,46 @@ public class HelpCommand extends Command{ public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException { - System.out.println("Here are the different commands in Duke"); - System.out.println("Type 'bye' to exit."); - System.out.println("Type 'list' to view all tasks in your list."); - System.out.println("Type 'delete x' to delete task number x. Eg. 'delete 5'"); - System.out.println("Type 'done x' to mark task number x as done. Eg. 'done 5'"); - System.out.println("Type 'find wordtofind' to search for tasks that contain the word"); - System.out.println("Eg. 'find apple' "); - - System.out.println("There are 3 types of tasks: Todo, Event, and Deadline"); - System.out.println("To add a Todo task, type 'todo' followed by your task description"); - System.out.println("Eg. 'todo read book' "); - System.out.println("To add a Event task, type 'event' followed by your task description, " + +// System.out.println("Here are the different commands in Duke"); +// System.out.println("Type 'bye' to exit."); +// System.out.println("Type 'list' to view all tasks in your list."); +// System.out.println("Type 'delete x' to delete task number x. Eg. 'delete 5'"); +// System.out.println("Type 'done x' to mark task number x as done. Eg. 'done 5'"); +// System.out.println("Type 'find wordtofind' to search for tasks that contain the word"); +// System.out.println("Eg. 'find apple' "); +// +// System.out.println("There are 3 types of tasks: Todo, Event, and Deadline"); +// System.out.println("To add a Todo task, type 'todo' followed by your task description"); +// System.out.println("Eg. 'todo read book' "); +// System.out.println("To add a Event task, type 'event' followed by your task description, " + +// "followed by '/at' followed by your event date"); +// System.out.println("Eg. 'event finance paper /at 2/12/2019 1800' "); +// System.out.println("To add a Deadline task, type 'event' followed by your task description, " + +// "followed by '/by' followed by your deadline "); +// System.out.println("Eg. 'deadline return book /by 2/12/2019 1800' "); +// +// System.out.println("Type 'help' to see the list of commands available"); +// + ui.printResponse("Here are the different commands in Duke"); + ui.printResponse("Type 'bye' to exit."); + ui.printResponse("Type 'list' to view all tasks in your list."); + ui.printResponse("Type 'delete x' to delete task number x. Eg. 'delete 5'"); + ui.printResponse("Type 'done x' to mark task number x as done. Eg. 'done 5'"); + ui.printResponse("Type 'find wordtofind' to search for tasks that contain the word"); + ui.printResponse("Eg. 'find apple' "); + + ui.printResponse("There are 3 types of tasks: Todo, Event, and Deadline"); + ui.printResponse("To add a Todo task, type 'todo' followed by your task description"); + ui.printResponse("Eg. 'todo read book' "); + ui.printResponse("To add a Event task, type 'event' followed by your task description, " + "followed by '/at' followed by your event date"); - System.out.println("Eg. 'event finance paper /at 2/12/2019 1800' "); - System.out.println("To add a Deadline task, type 'event' followed by your task description, " + + ui.printResponse("Eg. 'event finance paper /at 2/12/2019 1800' "); + ui.printResponse("To add a Deadline task, type 'event' followed by your task description, " + "followed by '/by' followed by your deadline "); - System.out.println("Eg. 'deadline return book /by 2/12/2019 1800' "); + ui.printResponse("Eg. 'deadline return book /by 2/12/2019 1800' "); + + ui.printResponse("Type 'help' to see the list of commands available"); - System.out.println("Type 'help' to see the list of commands available"); } diff --git a/src/main/java/duke/commands/ListCommand.java b/src/main/java/duke/commands/ListCommand.java index ddb4b4ad7a..75812d698f 100644 --- a/src/main/java/duke/commands/ListCommand.java +++ b/src/main/java/duke/commands/ListCommand.java @@ -10,15 +10,14 @@ public class ListCommand extends Command{ @Override - public void execute(TaskList taskList, Ui ui, Storage storage){ - for(int i = 0; i < taskList.numberOfTasks(); i++){ - System.out.println((i+1) + "." + taskList.getTask(i).toString()); + public void execute(TaskList taskList, Ui ui, Storage storage) { + for (int i = 0; i < taskList.numberOfTasks(); i++) { + ui.printResponse((i + 1) + "." + taskList.getTask(i).toString()); } - } @Override - public boolean isExit(){ + public boolean isExit() { return false; } diff --git a/src/main/java/duke/commands/TodoCommand.java b/src/main/java/duke/commands/TodoCommand.java index 6b5fb3481d..1c848c867d 100644 --- a/src/main/java/duke/commands/TodoCommand.java +++ b/src/main/java/duke/commands/TodoCommand.java @@ -22,8 +22,8 @@ public void execute(TaskList taskList, Ui ui, Storage storage){ //duke.tasks.add(newTask); taskList.addTask(newTodo); //taskCounter++; - System.out.println("Got it. I've added this task: "); - System.out.print(" " + newTodo.toString()); + ui.printResponse("Got it. I've added this task: "); + ui.printResponse(" " + newTodo.toString()); } @Override diff --git a/src/main/java/duke/utils/DialogBox.java b/src/main/java/duke/utils/DialogBox.java new file mode 100644 index 0000000000..0bb5d81c87 --- /dev/null +++ b/src/main/java/duke/utils/DialogBox.java @@ -0,0 +1,62 @@ +package duke.utils; + +import javafx.geometry.Pos; +import javafx.scene.control.Label; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.Node; + + +public class DialogBox extends HBox { + private Label text; + private ImageView displayPicture; + + public DialogBox(Label l, ImageView iv) { + text = l; + displayPicture = iv; + + text.setWrapText(true); + displayPicture.setFitWidth(100.0); + displayPicture.setFitHeight(100.0); + + this.setAlignment(Pos.TOP_RIGHT); + this.getChildren().addAll(text, displayPicture); + } + + public DialogBox(Label l) { + text = l; + + text.setWrapText(true); + this.setAlignment(Pos.TOP_RIGHT); + this.getChildren().addAll(text); + } + + /** + * Flips the dialog box such that the ImageView is on the left and text on the right. + */ + private void flip() { + this.setAlignment(Pos.TOP_LEFT); + ObservableList tmp = FXCollections.observableArrayList(this.getChildren()); + FXCollections.reverse(tmp); + this.getChildren().setAll(tmp); + } + + public static DialogBox getUserDialog(Label l, ImageView iv) { + return new DialogBox(l, iv); + } + + public static DialogBox getDukeDialog(Label l, ImageView iv) { + var db = new DialogBox(l, iv); + db.flip(); + return db; + } + + public static DialogBox getDukeDialog(Label l) { + var db = new DialogBox(l); + db.flip(); + return db; + } + +} diff --git a/src/main/java/duke/utils/Ui.java b/src/main/java/duke/utils/Ui.java index 3315de2108..0bcd4866de 100644 --- a/src/main/java/duke/utils/Ui.java +++ b/src/main/java/duke/utils/Ui.java @@ -1,5 +1,22 @@ package duke.utils; +import duke.commands.Command; +import javafx.event.ActionEvent; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.Region; +import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; +import javafx.stage.Stage; + +import javafx.event.EventHandler; import java.util.Scanner; /** @@ -9,50 +26,194 @@ public class Ui { private static final String LOGO = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; private static final String INTRO = "Hello from\n" + LOGO + "\n" + "What can I do for you?"; private static final String ENDING = "Bye. Hope to see you again soon!\n"; + private Image user = new Image(this.getClass().getResourceAsStream("/images/DaUser.png")); + private Image duke = new Image(this.getClass().getResourceAsStream("/images/DaDuke.png")); + + + private Storage storage; + private TaskList tasklist; + private Parser parser; + private Scanner scanner; + private Stage stage; + private ScrollPane scrollPane; + private VBox vbox; + private TextField textField; + private Label label; + private StringBuilder stringBuilder; + private Button sendButton; + private AnchorPane mainLayout; + + /** * Constructor that initializes a Ui object */ - public Ui(){ + public Ui(Stage stage, TaskList taskList, Storage storage, Parser parser) { scanner = new Scanner(System.in); + this.stage = stage; + this.tasklist = taskList; + this.storage = storage; + this.parser = parser; + this.scrollPane = new ScrollPane(); + this.vbox = new VBox(); + this.textField = new TextField(); + this.label = new Label(); + this.stringBuilder = new StringBuilder(); + this.sendButton = new Button("Send"); + this.mainLayout = new AnchorPane(); + + + label.setWrapText(true); + vbox.setAlignment(Pos.TOP_LEFT); + vbox.getChildren().addAll(textField, label); + + scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS); + scrollPane.setContent(vbox); + } + + /** + * Initializes the UI by displaying the stage of the javafx application. + */ + public void init() { + stage.setTitle("Mr Duke's Todo App"); + Color bgColor = Color.AZURE; + + mainLayout.getChildren().addAll(scrollPane, textField, sendButton); + + Scene scene = new Scene(mainLayout, bgColor); + + stage.setScene(scene); // Setting the stage to show our screen + stage.show(); // Render the stage + start(); + + //Step 2. Formatting the window to look as expected + stage.setTitle("Duke"); + stage.setResizable(false); + stage.setMinHeight(600.0); + stage.setMinWidth(400.0); + + mainLayout.setPrefSize(400.0, 600.0); + + scrollPane.setPrefSize(385, 535); + scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); + scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS); + + scrollPane.setVvalue(1.0); + scrollPane.setFitToWidth(true); + + vbox.setPrefHeight(Region.USE_COMPUTED_SIZE); + + textField.setPrefWidth(325.0); + + sendButton.setPrefWidth(55.0); + + AnchorPane.setTopAnchor(scrollPane, 1.0); + + AnchorPane.setBottomAnchor(sendButton, 1.0); + AnchorPane.setRightAnchor(sendButton, 1.0); + + AnchorPane.setLeftAnchor(textField, 1.0); + AnchorPane.setBottomAnchor(textField, 1.0); + + //Part 3. Add functionality to handle user input. + sendButton.setOnMouseClicked((event) -> { + handleUserInput(); + }); + +// textField.setOnAction((event) -> { +// handleUserInput(); +// }); + + //Scroll down to the end every time dialogContainer's height changes. + vbox.heightProperty().addListener((observable) -> scrollPane.setVvalue(1.0)); + } + + + /** + * Iteration 2: + * Creates two dialog boxes, one echoing user input and the other containing Duke's reply and then appends them to + * the dialog container. Clears the user input after processing. + */ + private void handleUserInput() { + Label userText = new Label(textField.getText()); + vbox.getChildren().addAll(DialogBox.getUserDialog(userText, new ImageView(user))); + Label dukeText = new Label(getResponse(textField.getText())); + vbox.getChildren().addAll(DialogBox.getDukeDialog(dukeText, new ImageView(duke))); + textField.clear(); } /** - * - * @return String contents entered into the CLI + * You should have your own function to generate a response to user input. + * Replace this stub with your completed method. */ - public String readCommand(){ - return scanner.nextLine(); + private String getResponse(String input) { + String userInput = textField.getText(); + stringBuilder.append(userInput); + label.setText(stringBuilder.toString()); + + try { + //showLine(); // show the divider line ("_______") + Command c = parser.parseInput(userInput); + c.execute(tasklist, Ui.this, storage); + } catch (Exception ex) { + showError(ex); + } finally { + showLine(); + } + + //showLine(); + return ""; + } + + public void printResponse(String message) { + vbox.getChildren().addAll( + DialogBox.getDukeDialog(new Label(message))); + + } /** * Returns the intro statement when app first launches */ public void start(){ - System.out.println(INTRO); + + vbox.getChildren().addAll( + DialogBox.getDukeDialog(new Label(INTRO), new ImageView(duke) )); + showLine(); } /** * returns the ending statement before app closes */ - public void end(){ - System.out.println(ENDING); + public void end() { + vbox.getChildren().addAll( + DialogBox.getDukeDialog(new Label(ENDING), new ImageView(duke) )); + showLine(); +// try { +// Thread.sleep(3000); +// } catch (InterruptedException e) { +// System.out.println("Unable to close"); +// } + stage.close(); } + /** * Prints a dashed divider line */ public void showLine(){ - System.out.println( "\n________________________________________________________ \n"); + vbox.getChildren().addAll( + DialogBox.getDukeDialog(new Label("\n________________________________________________________ \n"))); + } /** @@ -60,10 +221,12 @@ public void showLine(){ * @param e Exception */ public void showError(Exception e){ - System.out.println(e.toString()); + stringBuilder.append(e.toString()); + label.setText(stringBuilder.toString()); } + } diff --git a/src/main/resources/images/DaDuke.png b/src/main/resources/images/DaDuke.png new file mode 100644 index 0000000000000000000000000000000000000000..edabfe6acb1dfc9b37f70a75e81be9f14a59b48c GIT binary patch literal 5035 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 z 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

+0Tqo7dUl!ys#~n1`u4AXWx?k= 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 Date: Tue, 14 Sep 2021 18:48:23 +0800 Subject: [PATCH 28/41] Add assert statements No assert statements are present. Add statements are needed to declare for things that ought to be true at that point in time --- src/main/java/duke/tasks/EventTask.java | 3 ++- src/main/java/duke/utils/DukeDate.java | 18 +++++++++--------- src/main/java/duke/utils/Parser.java | 5 +++-- src/main/java/duke/utils/Storage.java | 5 +++++ src/main/java/duke/utils/TaskList.java | 6 ++++-- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/main/java/duke/tasks/EventTask.java b/src/main/java/duke/tasks/EventTask.java index 61aeccb11a..a12b3265d0 100644 --- a/src/main/java/duke/tasks/EventTask.java +++ b/src/main/java/duke/tasks/EventTask.java @@ -8,7 +8,7 @@ * date or datetime */ public class EventTask extends Task { - String dateLiteral; + private String dateLiteral; Date dateFormatted; String dateReadable; @@ -19,6 +19,7 @@ public class EventTask extends Task { */ public EventTask(String description, String at) { super(description, TaskType.EVENT); + assert (!at.equals("")); this.dateLiteral = at; this.dateFormatted = DukeDate.formatDate(at); this.dateReadable = DukeDate.parseDateToString(dateFormatted); diff --git a/src/main/java/duke/utils/DukeDate.java b/src/main/java/duke/utils/DukeDate.java index 831418d609..9611258b86 100644 --- a/src/main/java/duke/utils/DukeDate.java +++ b/src/main/java/duke/utils/DukeDate.java @@ -16,10 +16,10 @@ public class DukeDate { * @param dateLiteral date that was typed in by user * @return Date object */ - public static Date formatDate(String dateLiteral){ - if(dateLiteral.length()==14 || dateLiteral.length()==15){ + public static Date formatDate(String dateLiteral) { + if (dateLiteral.length() == 14 || dateLiteral.length() == 15) { SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HHmm"); - try{ + try { Date dateFormatted = format.parse(dateLiteral); //System.out.println(dateFormatted); return dateFormatted; @@ -27,13 +27,13 @@ public static Date formatDate(String dateLiteral){ // after parse // Mon Dec 02 18:00:00 SGT 2019 - } catch (java.text.ParseException e){ + } catch (java.text.ParseException e) { System.out.println("Incorrect date format"); } - } else if (dateLiteral.length() == 9 || dateLiteral.length() == 10){ + } else if (dateLiteral.length() == 9 || dateLiteral.length() == 10) { SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); - try{ + try { Date dateFormatted = format.parse(dateLiteral); //System.out.println(dateFormatted); return dateFormatted; @@ -41,7 +41,7 @@ public static Date formatDate(String dateLiteral){ // after parse // Mon Dec 02 00:00:00 SGT 2019 - } catch (java.text.ParseException e){ + } catch (java.text.ParseException e) { System.out.println("Incorrect date format"); } } @@ -55,13 +55,13 @@ public static Date formatDate(String dateLiteral){ * @param date Date object * @return String dateStr */ - public static String parseDateToString(Date date){ + public static String parseDateToString(Date date) { String[] dateArr = date.toString().split(" "); String dateStr = ""; dateStr += dateArr[0] + ", " + dateArr[1] + " " + dateArr[2] + " " + dateArr[5]; // for adding the time to the string - dateStr += ", " + dateArr[3].substring(0,5); + dateStr += ", " + dateArr[3].substring(0, 5); return dateStr; } diff --git a/src/main/java/duke/utils/Parser.java b/src/main/java/duke/utils/Parser.java index b8f6ed3451..f4a19dc57c 100644 --- a/src/main/java/duke/utils/Parser.java +++ b/src/main/java/duke/utils/Parser.java @@ -13,15 +13,15 @@ public class Parser { * @param fullCommand the user's input into the CLI * @return Command command to be executed */ - public Command parseInput(String fullCommand){ + public Command parseInput(String fullCommand) { String[] commandSplit = fullCommand.split(" "); String actionWord = commandSplit[0]; + assert (actionWord != null); switch (actionWord) { case "bye": return new ExitCommand(); - case "list": return new ListCommand(); @@ -46,6 +46,7 @@ public Command parseInput(String fullCommand){ case "help": return new HelpCommand(); + } return new ErrorCommand(); diff --git a/src/main/java/duke/utils/Storage.java b/src/main/java/duke/utils/Storage.java index 4af7b17c06..5a1a2d7b28 100644 --- a/src/main/java/duke/utils/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -36,8 +36,11 @@ public class Storage { */ public TaskList loadTaskList() throws FileNotFoundException { + assert(dataFilePath != null); + File f = new File(dataFilePath); ArrayList taskList = new ArrayList(); + assert(taskList != null); if (!f.exists()) { return new TaskList(new ArrayList()); @@ -70,6 +73,7 @@ public TaskList loadTaskList() throws FileNotFoundException { * @throws IOException */ public void saveTaskListToDisk(TaskList taskList) throws IOException { + assert (dataFilePath != null); File f = new File(dataFilePath); if (!f.exists()) { try { @@ -115,6 +119,7 @@ public String convertTaskToString(Task task){ // Example storage in file: // T;0;readbook // D;0;return book ;2/12/2019 1800 + assert (task != null); String taskType = task.getType() == Task.TaskType.TODO ? "T" : task.getType() == Task.TaskType.EVENT ? "E" : "D"; diff --git a/src/main/java/duke/utils/TaskList.java b/src/main/java/duke/utils/TaskList.java index d6969e707a..6abf336bd5 100644 --- a/src/main/java/duke/utils/TaskList.java +++ b/src/main/java/duke/utils/TaskList.java @@ -33,7 +33,8 @@ public void addTask(Task task){ * @param index * @return */ - public Task getTask(int index){ + public Task getTask(int index) { + assert (index < tasks.size()); return tasks.get(index); } @@ -41,7 +42,8 @@ public Task getTask(int index){ * Removing a task from the specified index in the TaskList * @param index */ - public void removeTask(int index){ + public void removeTask(int index) { + assert (index < tasks.size()); tasks.remove(index); } From b919c1831aca1794f9db6e389939fcf377a3f8a4 Mon Sep 17 00:00:00 2001 From: ramaven Date: Tue, 14 Sep 2021 19:03:13 +0800 Subject: [PATCH 29/41] Find command: make matching case insensitive Find command is case sensitive A case insensitive find is more user-friendly because users cannot be expected to remember the exact case of the keywords Let's, * update the search algorithm to use case-insensitive matching --- src/main/java/duke/commands/FindCommand.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/duke/commands/FindCommand.java b/src/main/java/duke/commands/FindCommand.java index dd7da35aad..3aa63c6244 100644 --- a/src/main/java/duke/commands/FindCommand.java +++ b/src/main/java/duke/commands/FindCommand.java @@ -5,6 +5,8 @@ import duke.utils.TaskList; import duke.utils.Ui; +import java.util.Locale; + /** * Class that is a subclass of Command class * and handles the behaviour of the Command for @@ -30,7 +32,7 @@ public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeExcept // loop again for each keyword in input for(int word = 1; word < commandArr.length; word++){ - if(taskList.getTask(i).getName().contains(commandArr[word])) { + if(taskList.getTask(i).getName().toLowerCase().contains(commandArr[word].toLowerCase())) { if (!foundAnyMatch) { ui.printResponse("Here are the matching tasks:"); } From 6735ff4f3e001dd41c76ac1c766f5ffb824831c4 Mon Sep 17 00:00:00 2001 From: ramaven Date: Wed, 15 Sep 2021 14:40:14 +0800 Subject: [PATCH 30/41] Improve code quality Coding standard not fully adhered to and SLAP principle not followed in Ui class Adhering more closely to coding standards makes code more readable and better understood, and following coding principles makes it easier for other programmers to understand it. Let's * fix the order of import statements * follow SLAP principle in Ui class' init method * simplify complicated expressions in FindCommand class --- src/main/java/Duke.java | 2 +- src/main/java/Launcher.java | 1 - src/main/java/duke/commands/Command.java | 7 ++- .../java/duke/commands/DeadlineCommand.java | 3 - .../java/duke/commands/DeleteCommand.java | 14 ++--- src/main/java/duke/commands/DoneCommand.java | 16 +++--- src/main/java/duke/commands/ErrorCommand.java | 6 +- src/main/java/duke/commands/EventCommand.java | 16 +++--- src/main/java/duke/commands/ExitCommand.java | 8 ++- src/main/java/duke/commands/FindCommand.java | 32 +++++------ src/main/java/duke/commands/HelpCommand.java | 39 +++++-------- src/main/java/duke/commands/ListCommand.java | 6 +- src/main/java/duke/commands/TodoCommand.java | 12 ++-- .../java/duke/exceptions/DukeException.java | 2 +- src/main/java/duke/tasks/DeadlineTask.java | 19 ++++--- src/main/java/duke/tasks/EventTask.java | 16 +++--- src/main/java/duke/tasks/Task.java | 16 +++--- src/main/java/duke/tasks/TodoTask.java | 2 +- src/main/java/duke/utils/DialogBox.java | 15 ++++- src/main/java/duke/utils/Parser.java | 21 ++++--- src/main/java/duke/utils/Storage.java | 40 +++++++------ src/main/java/duke/utils/TaskList.java | 12 ++-- src/main/java/duke/utils/Ui.java | 56 ++++++++++--------- 23 files changed, 189 insertions(+), 172 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d522302e2e..79ccfcf608 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,4 +1,5 @@ import java.io.FileNotFoundException; + import duke.utils.Parser; import duke.utils.Storage; import duke.utils.TaskList; @@ -36,7 +37,6 @@ public Duke() { @Override public void start(Stage stage) { ui = new Ui(stage, taskList, storage, parser); - ui.init(); } } diff --git a/src/main/java/Launcher.java b/src/main/java/Launcher.java index a2bf2450b3..eb292faf89 100644 --- a/src/main/java/Launcher.java +++ b/src/main/java/Launcher.java @@ -1,7 +1,6 @@ import javafx.application.Application; public class Launcher { - public static void main(String[] args) { Application.launch(Duke.class, args); } diff --git a/src/main/java/duke/commands/Command.java b/src/main/java/duke/commands/Command.java index 1df207d076..be013473b2 100644 --- a/src/main/java/duke/commands/Command.java +++ b/src/main/java/duke/commands/Command.java @@ -1,9 +1,12 @@ package duke.commands; +import java.io.IOException; + import duke.exceptions.DukeException; -import duke.utils.*; +import duke.utils.Storage; +import duke.utils.TaskList; +import duke.utils.Ui; -import java.io.IOException; /** * Abstract class that represents a Command in the application diff --git a/src/main/java/duke/commands/DeadlineCommand.java b/src/main/java/duke/commands/DeadlineCommand.java index 9e391672da..7568654e74 100644 --- a/src/main/java/duke/commands/DeadlineCommand.java +++ b/src/main/java/duke/commands/DeadlineCommand.java @@ -30,9 +30,6 @@ public void execute(TaskList taskList, Ui ui, Storage storage) { } DeadlineTask newDeadline = new DeadlineTask(commandString.substring(9).split("/")[0], date); taskList.addTask(newDeadline); - -// System.out.println("Got it. I've added this task: "); -// System.out.println(" " + newDeadline.toString()); ui.printResponse("Got it. I've added this task: "); ui.printResponse(" " + newDeadline.toString()); diff --git a/src/main/java/duke/commands/DeleteCommand.java b/src/main/java/duke/commands/DeleteCommand.java index 1547323c77..71158023af 100644 --- a/src/main/java/duke/commands/DeleteCommand.java +++ b/src/main/java/duke/commands/DeleteCommand.java @@ -9,40 +9,40 @@ * Class that is a subclass of Command class * and handles the behaviour of the Command for deleting a task */ -public class DeleteCommand extends Command{ +public class DeleteCommand extends Command { private String commandString; - public DeleteCommand(String commandString){ + public DeleteCommand(String commandString) { this.commandString = commandString; } @Override - public void execute(TaskList taskList, Ui ui, Storage storage){ + public void execute(TaskList taskList, Ui ui, Storage storage) { String[] commandArr = commandString.split(" "); try { int taskNumberToDelete = Integer.parseInt(commandArr[1]); - if (taskNumberToDelete > taskList.numberOfTasks()){ + if (taskNumberToDelete > taskList.numberOfTasks()) { ui.printResponse("Invalid number"); return; } else { - int taskToDeleteIndex = taskNumberToDelete-1; + int taskToDeleteIndex = taskNumberToDelete - 1; Task tasktoDel = taskList.getTask(taskToDeleteIndex); taskList.removeTask(taskToDeleteIndex); ui.printResponse("Noted. I've removed this task: "); ui.printResponse(" " + tasktoDel.toString()); } - } catch (Exception e){ + } catch (Exception e) { ui.printResponse("Invalid input"); } } @Override - public boolean isExit(){ + public boolean isExit() { return false; } diff --git a/src/main/java/duke/commands/DoneCommand.java b/src/main/java/duke/commands/DoneCommand.java index a11e23850c..d9d71cc9ab 100644 --- a/src/main/java/duke/commands/DoneCommand.java +++ b/src/main/java/duke/commands/DoneCommand.java @@ -9,37 +9,37 @@ * and handles the behaviour of the Command for * marking a task as done */ -public class DoneCommand extends Command{ +public class DoneCommand extends Command { - String commandString; + private String commandString; - public DoneCommand(String commandString){ + public DoneCommand(String commandString) { this.commandString = commandString; } @Override - public void execute(TaskList taskList, Ui ui, Storage storage){ + public void execute(TaskList taskList, Ui ui, Storage storage) { String[] commandArr = commandString.split(" "); try { int taskNumberDone = Integer.parseInt(commandArr[1]); - if (taskNumberDone > taskList.numberOfTasks()){ + if (taskNumberDone > taskList.numberOfTasks()) { ui.printResponse("Invalid number"); return; } else { - int taskDoneIndex = taskNumberDone-1; + int taskDoneIndex = taskNumberDone - 1; taskList.getTask(taskDoneIndex).makeDone(); ui.printResponse("Nice! I've marked this task as done: "); ui.printResponse(taskList.getTask(taskDoneIndex).toString()); } - } catch (Exception e){ + } catch (Exception e) { ui.printResponse("Invalid input"); } } @Override - public boolean isExit(){ + public boolean isExit() { return false; } } diff --git a/src/main/java/duke/commands/ErrorCommand.java b/src/main/java/duke/commands/ErrorCommand.java index 23ed519b13..c09abef447 100644 --- a/src/main/java/duke/commands/ErrorCommand.java +++ b/src/main/java/duke/commands/ErrorCommand.java @@ -9,15 +9,15 @@ * and handles the behaviour of the Command for * when an error is encountered */ -public class ErrorCommand extends Command{ +public class ErrorCommand extends Command { @Override - public void execute(TaskList taskList, Ui ui, Storage storage){ + public void execute(TaskList taskList, Ui ui, Storage storage) { ui.printResponse("Invalid input"); } @Override - public boolean isExit(){ + public boolean isExit() { return false; } diff --git a/src/main/java/duke/commands/EventCommand.java b/src/main/java/duke/commands/EventCommand.java index 793d8cdddb..4e94d16ff2 100644 --- a/src/main/java/duke/commands/EventCommand.java +++ b/src/main/java/duke/commands/EventCommand.java @@ -9,23 +9,21 @@ * Class that is a subclass of Command class * and handles the behaviour of the Command for event tasks */ -public class EventCommand extends Command{ - - +public class EventCommand extends Command { private String commandString; - public EventCommand(String commandString){ + public EventCommand(String commandString) { this.commandString = commandString; } @Override - public void execute(TaskList taskList, Ui ui, Storage storage){ + public void execute(TaskList taskList, Ui ui, Storage storage) { String[] dateArray = commandString.split("/"); String date = ""; - for(int i=1; i< dateArray.length; i++){ - if (i==1){ - date+=dateArray[1].substring(3); + for (int i = 1; i < dateArray.length; i++) { + if (i == 1) { + date += dateArray[1].substring(3); } else { date += "/" + dateArray[i]; } @@ -39,7 +37,7 @@ public void execute(TaskList taskList, Ui ui, Storage storage){ } @Override - public boolean isExit(){ + public boolean isExit() { return false; } } diff --git a/src/main/java/duke/commands/ExitCommand.java b/src/main/java/duke/commands/ExitCommand.java index 03c9c76311..23d4a3b780 100644 --- a/src/main/java/duke/commands/ExitCommand.java +++ b/src/main/java/duke/commands/ExitCommand.java @@ -1,9 +1,11 @@ package duke.commands; -import duke.utils.*; - import java.io.IOException; +import duke.utils.Storage; +import duke.utils.TaskList; +import duke.utils.Ui; + /** * Class that is a subclass of Command class * and handles the behaviour of the Command for @@ -17,7 +19,7 @@ public void execute(TaskList tasks, Ui ui, Storage storage) throws IOException { } @Override - public boolean isExit(){ + public boolean isExit() { return true; } diff --git a/src/main/java/duke/commands/FindCommand.java b/src/main/java/duke/commands/FindCommand.java index 3aa63c6244..ea5ed2a1b6 100644 --- a/src/main/java/duke/commands/FindCommand.java +++ b/src/main/java/duke/commands/FindCommand.java @@ -5,48 +5,46 @@ import duke.utils.TaskList; import duke.utils.Ui; -import java.util.Locale; - /** * Class that is a subclass of Command class * and handles the behaviour of the Command for * finding tasks with keywords */ -public class FindCommand extends Command{ +public class FindCommand extends Command { - String commandString; + private String commandString; - public FindCommand(String commandString){ + public FindCommand(String commandString) { this.commandString = commandString; } - public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException{ + @Override + public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException { String[] commandArr = commandString.split(" "); - boolean foundAnyMatch = false; - int numberofMatches = 0; - - for(int i = 0; i < taskList.numberOfTasks(); i++){ + int numberOfMatches = 0; + for (int i = 0; i < taskList.numberOfTasks(); i++) { boolean currTaskPrinted = false; // loop again for each keyword in input - for(int word = 1; word < commandArr.length; word++){ - if(taskList.getTask(i).getName().toLowerCase().contains(commandArr[word].toLowerCase())) { + for (int word = 1; word < commandArr.length; word++) { + boolean matches = taskList.getTask(i).getName().toLowerCase().contains(commandArr[word].toLowerCase()); + if (matches) { if (!foundAnyMatch) { ui.printResponse("Here are the matching tasks:"); } foundAnyMatch = true; - numberofMatches++; - if(!currTaskPrinted){ - ui.printResponse((numberofMatches) + "." + taskList.getTask(i).toString()); + numberOfMatches++; + if (!currTaskPrinted) { + ui.printResponse((numberOfMatches) + "." + taskList.getTask(i).toString()); currTaskPrinted = true; } } } } - if (!foundAnyMatch){ + if (!foundAnyMatch) { ui.printResponse("Sorry, we are unable to find any matching tasks"); } @@ -54,7 +52,7 @@ public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeExcept } @Override - public boolean isExit(){ + public boolean isExit() { return false; } } diff --git a/src/main/java/duke/commands/HelpCommand.java b/src/main/java/duke/commands/HelpCommand.java index 4dabd60e40..d5464eaf1d 100644 --- a/src/main/java/duke/commands/HelpCommand.java +++ b/src/main/java/duke/commands/HelpCommand.java @@ -10,29 +10,16 @@ * and handles the behaviour of the Command for * when the user requests for help. */ -public class HelpCommand extends Command{ - +public class HelpCommand extends Command { + + /** + * Gives a list of possible commands that user can type. + * @param taskList TaskList object that is being used in the app + * @param ui the Ui object that is being used in the app + * @param storage the Storage object that is being used in the app + * @throws DukeException + */ public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException { -// System.out.println("Here are the different commands in Duke"); -// System.out.println("Type 'bye' to exit."); -// System.out.println("Type 'list' to view all tasks in your list."); -// System.out.println("Type 'delete x' to delete task number x. Eg. 'delete 5'"); -// System.out.println("Type 'done x' to mark task number x as done. Eg. 'done 5'"); -// System.out.println("Type 'find wordtofind' to search for tasks that contain the word"); -// System.out.println("Eg. 'find apple' "); -// -// System.out.println("There are 3 types of tasks: Todo, Event, and Deadline"); -// System.out.println("To add a Todo task, type 'todo' followed by your task description"); -// System.out.println("Eg. 'todo read book' "); -// System.out.println("To add a Event task, type 'event' followed by your task description, " + -// "followed by '/at' followed by your event date"); -// System.out.println("Eg. 'event finance paper /at 2/12/2019 1800' "); -// System.out.println("To add a Deadline task, type 'event' followed by your task description, " + -// "followed by '/by' followed by your deadline "); -// System.out.println("Eg. 'deadline return book /by 2/12/2019 1800' "); -// -// System.out.println("Type 'help' to see the list of commands available"); -// ui.printResponse("Here are the different commands in Duke"); ui.printResponse("Type 'bye' to exit."); ui.printResponse("Type 'list' to view all tasks in your list."); @@ -44,10 +31,12 @@ public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeExcept ui.printResponse("There are 3 types of tasks: Todo, Event, and Deadline"); ui.printResponse("To add a Todo task, type 'todo' followed by your task description"); ui.printResponse("Eg. 'todo read book' "); - ui.printResponse("To add a Event task, type 'event' followed by your task description, " + + ui.printResponse("To add a Event task, type 'event' followed by your task description, " + + "followed by '/at' followed by your event date"); ui.printResponse("Eg. 'event finance paper /at 2/12/2019 1800' "); - ui.printResponse("To add a Deadline task, type 'event' followed by your task description, " + + ui.printResponse("To add a Deadline task, type 'event' followed by your task description, " + + "followed by '/by' followed by your deadline "); ui.printResponse("Eg. 'deadline return book /by 2/12/2019 1800' "); @@ -58,7 +47,7 @@ public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeExcept } @Override - public boolean isExit(){ + public boolean isExit() { return false; } } diff --git a/src/main/java/duke/commands/ListCommand.java b/src/main/java/duke/commands/ListCommand.java index 75812d698f..8afcaa6b98 100644 --- a/src/main/java/duke/commands/ListCommand.java +++ b/src/main/java/duke/commands/ListCommand.java @@ -1,13 +1,15 @@ package duke.commands; -import duke.utils.*; +import duke.utils.Storage; +import duke.utils.TaskList; +import duke.utils.Ui; /** * Class that is a subclass of Command class * and handles the behaviour of the Command for returning * a list of the Tasks currently in the TaskList */ -public class ListCommand extends Command{ +public class ListCommand extends Command { @Override public void execute(TaskList taskList, Ui ui, Storage storage) { diff --git a/src/main/java/duke/commands/TodoCommand.java b/src/main/java/duke/commands/TodoCommand.java index 1c848c867d..4494b71b89 100644 --- a/src/main/java/duke/commands/TodoCommand.java +++ b/src/main/java/duke/commands/TodoCommand.java @@ -2,22 +2,24 @@ import duke.tasks.TodoTask; import duke.utils.Storage; -import duke.utils.*; +import duke.utils.TaskList; +import duke.utils.Ui; + /** * Class that is a subclass of Command class * and handles the behaviour of the Command for todotasks */ -public class TodoCommand extends Command{ +public class TodoCommand extends Command { private String commandString; - public TodoCommand(String commandString){ + public TodoCommand(String commandString) { this.commandString = commandString; } @Override - public void execute(TaskList taskList, Ui ui, Storage storage){ + public void execute(TaskList taskList, Ui ui, Storage storage) { TodoTask newTodo = new TodoTask(commandString.substring(5)); //duke.tasks.add(newTask); taskList.addTask(newTodo); @@ -27,7 +29,7 @@ public void execute(TaskList taskList, Ui ui, Storage storage){ } @Override - public boolean isExit(){ + public boolean isExit() { return false; } diff --git a/src/main/java/duke/exceptions/DukeException.java b/src/main/java/duke/exceptions/DukeException.java index b0a5859abc..42699f7c68 100644 --- a/src/main/java/duke/exceptions/DukeException.java +++ b/src/main/java/duke/exceptions/DukeException.java @@ -11,4 +11,4 @@ public class DukeException extends Exception { public DukeException(String message){ super(message); } -} \ No newline at end of file +} diff --git a/src/main/java/duke/tasks/DeadlineTask.java b/src/main/java/duke/tasks/DeadlineTask.java index 9e6c07ca87..023033c9fc 100644 --- a/src/main/java/duke/tasks/DeadlineTask.java +++ b/src/main/java/duke/tasks/DeadlineTask.java @@ -1,16 +1,17 @@ package duke.tasks; -import duke.utils.DukeDate; import java.util.Date; +import duke.utils.DukeDate; + /** * Class for deadline tasks that contain a * date or datetime */ -public class DeadlineTask extends Task{ - String dateLiteral; - Date dateFormatted; - String dateReadable; +public class DeadlineTask extends Task { + private String dateLiteral; + private Date dateFormatted; + private String dateReadable; /** * Constructor that initializes an EventTask object @@ -30,14 +31,14 @@ public DeadlineTask(String description, String by) { * * @return String date */ - public String getDate(){ + public String getDate() { return dateLiteral; } @Override - public String toString(){ - String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT? "E" : "D"; - String doneSymbol = isDone? "X" : " "; + public String toString() { + String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT ? "E" : "D"; + String doneSymbol = isDone ? "X" : " "; String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + "(by: " + dateReadable + ")"; return result; diff --git a/src/main/java/duke/tasks/EventTask.java b/src/main/java/duke/tasks/EventTask.java index a12b3265d0..6e4dab5ffb 100644 --- a/src/main/java/duke/tasks/EventTask.java +++ b/src/main/java/duke/tasks/EventTask.java @@ -1,16 +1,16 @@ package duke.tasks; -import duke.utils.DukeDate; - import java.util.Date; +import duke.utils.DukeDate; + /** * Class for event tasks that contain a * date or datetime */ public class EventTask extends Task { private String dateLiteral; - Date dateFormatted; - String dateReadable; + private Date dateFormatted; + private String dateReadable; /** * Constructor that initializes an EventTask object @@ -31,14 +31,14 @@ public EventTask(String description, String at) { * * @return String date */ - public String getDate(){ + public String getDate() { return dateLiteral; } @Override - public String toString(){ - String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT? "E" : "D"; - String doneSymbol = isDone? "X" : " "; + public String toString() { + String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT ? "E" : "D"; + String doneSymbol = isDone ? "X" : " "; String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name + "(at: " + dateReadable + ")"; return result; diff --git a/src/main/java/duke/tasks/Task.java b/src/main/java/duke/tasks/Task.java index f534a861cb..ceb1ea5be1 100644 --- a/src/main/java/duke/tasks/Task.java +++ b/src/main/java/duke/tasks/Task.java @@ -5,9 +5,9 @@ */ public class Task { + protected TaskType type; protected String name; protected boolean isDone = false; - TaskType type; public enum TaskType { TODO, DEADLINE, EVENT @@ -28,7 +28,7 @@ public Task(String name, TaskType type) { * * @return boolean whether or not task is done */ - public boolean isDone(){ + public boolean isDone() { return isDone; } @@ -37,7 +37,7 @@ public boolean isDone(){ * * @return TaskType task's type */ - public TaskType getType(){ + public TaskType getType() { return type; } @@ -46,7 +46,7 @@ public TaskType getType(){ * * @return String name of task */ - public String getName(){ + public String getName() { return name; } @@ -55,14 +55,14 @@ public String getName(){ * changing the Task's boolean variable isDone * to true. */ - public void makeDone(){ + public void makeDone() { isDone = true; } @Override - public String toString(){ - String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT? "E" : "D"; - String doneSymbol = isDone? "X" : " "; + public String toString() { + String typeString = type == TaskType.TODO ? "T" : type == TaskType.EVENT ? "E" : "D"; + String doneSymbol = isDone ? "X" : " "; String result = "[" + typeString + "] " + "[" + doneSymbol + "] " + name; return result; } diff --git a/src/main/java/duke/tasks/TodoTask.java b/src/main/java/duke/tasks/TodoTask.java index db381b515b..68a3f7c9b8 100644 --- a/src/main/java/duke/tasks/TodoTask.java +++ b/src/main/java/duke/tasks/TodoTask.java @@ -4,7 +4,7 @@ * Class for deadline tasks that do not contain a * date or datetime */ -public class TodoTask extends Task{ +public class TodoTask extends Task { /** * Constructor that initializes an EventTask object diff --git a/src/main/java/duke/utils/DialogBox.java b/src/main/java/duke/utils/DialogBox.java index 0bb5d81c87..9e10d57840 100644 --- a/src/main/java/duke/utils/DialogBox.java +++ b/src/main/java/duke/utils/DialogBox.java @@ -1,18 +1,23 @@ package duke.utils; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.geometry.Pos; +import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import javafx.scene.Node; public class DialogBox extends HBox { private Label text; private ImageView displayPicture; + /** + * Constructor that initializes a dialogbox with a label and an image + * @param l text that will be in the box + * @param iv image that will be next to the text + */ public DialogBox(Label l, ImageView iv) { text = l; displayPicture = iv; @@ -25,6 +30,10 @@ public DialogBox(Label l, ImageView iv) { this.getChildren().addAll(text, displayPicture); } + /** + * Constructor that initializes a dialogbox with a label only + * @param l text that will be in the box + */ public DialogBox(Label l) { text = l; diff --git a/src/main/java/duke/utils/Parser.java b/src/main/java/duke/utils/Parser.java index f4a19dc57c..deb7215386 100644 --- a/src/main/java/duke/utils/Parser.java +++ b/src/main/java/duke/utils/Parser.java @@ -1,5 +1,16 @@ package duke.utils; -import duke.commands.*; + +import duke.commands.Command; +import duke.commands.DeadlineCommand; +import duke.commands.DeleteCommand; +import duke.commands.DoneCommand; +import duke.commands.ErrorCommand; +import duke.commands.EventCommand; +import duke.commands.ExitCommand; +import duke.commands.FindCommand; +import duke.commands.HelpCommand; +import duke.commands.ListCommand; +import duke.commands.TodoCommand; /** * Class that parses user input and perfoms the corresponding @@ -46,12 +57,8 @@ public Command parseInput(String fullCommand) { case "help": return new HelpCommand(); - + default: + return new ErrorCommand(); } - - return new ErrorCommand(); - } - - } diff --git a/src/main/java/duke/utils/Storage.java b/src/main/java/duke/utils/Storage.java index 5a1a2d7b28..0d35467b9c 100644 --- a/src/main/java/duke/utils/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -1,10 +1,5 @@ package duke.utils; -import duke.tasks.DeadlineTask; -import duke.tasks.EventTask; -import duke.tasks.Task; -import duke.tasks.TodoTask; - import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; @@ -12,6 +7,13 @@ import java.util.ArrayList; import java.util.Scanner; +import duke.tasks.DeadlineTask; +import duke.tasks.EventTask; +import duke.tasks.Task; +import duke.tasks.TodoTask; + + + /** * Class that handles storage of data by writing to disk * and reading from disk @@ -19,12 +21,10 @@ public class Storage { - - + private static final String DELIMITER = ";"; private String userDir = System.getProperty("user.dir"); private String dataFilePath = userDir + "/" + "data.txt"; - private static final String DELIMITER = ";"; /** * Loads task list as a TaskList object from the data.txt file @@ -115,14 +115,17 @@ public void saveTaskListToDisk(TaskList taskList) throws IOException { * @param task * @return String representation of the task */ - public String convertTaskToString(Task task){ + public String convertTaskToString(Task task) { // Example storage in file: // T;0;readbook // D;0;return book ;2/12/2019 1800 assert (task != null); - String taskType = task.getType() == Task.TaskType.TODO ? "T" : - task.getType() == Task.TaskType.EVENT ? "E" : "D"; + String taskType = task.getType() == Task.TaskType.TODO + ? "T" + : task.getType() == Task.TaskType.EVENT + ? "E" + : "D"; String taskName = task.getName(); @@ -130,12 +133,12 @@ public String convertTaskToString(Task task){ String taskString = taskType + DELIMITER + isDone + DELIMITER + taskName; - if (task.getType() == Task.TaskType.EVENT){ + if (task.getType() == Task.TaskType.EVENT) { taskString += DELIMITER; taskString += ((EventTask) task).getDate(); } - if(task.getType() == Task.TaskType.DEADLINE){ + if (task.getType() == Task.TaskType.DEADLINE) { taskString += DELIMITER; taskString += ((DeadlineTask) task).getDate(); } @@ -151,7 +154,7 @@ public String convertTaskToString(Task task){ * @param line String representation of a task * @return */ - public Task convertStringToTask(String line){ + public Task convertStringToTask(String line) { // Example storage in file: // T;0;readbook @@ -159,8 +162,11 @@ public Task convertStringToTask(String line){ String[] lineSplit = line.split(DELIMITER); - Task.TaskType taskType = lineSplit[0].equals("T") ? Task.TaskType.TODO : - lineSplit[0].equals("D") ? Task.TaskType.DEADLINE : Task.TaskType.EVENT; + Task.TaskType taskType = lineSplit[0].equals("T") + ? Task.TaskType.TODO + : lineSplit[0].equals("D") + ? Task.TaskType.DEADLINE + : Task.TaskType.EVENT; boolean taskDone = lineSplit[1].equals("0") ? false : true; @@ -183,7 +189,7 @@ public Task convertStringToTask(String line){ throw new IllegalArgumentException("Corrupted file"); } - if(taskDone ){ + if (taskDone ) { currTask.makeDone(); } diff --git a/src/main/java/duke/utils/TaskList.java b/src/main/java/duke/utils/TaskList.java index 6abf336bd5..64bcb1478a 100644 --- a/src/main/java/duke/utils/TaskList.java +++ b/src/main/java/duke/utils/TaskList.java @@ -1,9 +1,9 @@ package duke.utils; -import duke.tasks.Task; - import java.util.ArrayList; +import duke.tasks.Task; + /** * Class that represents a list of tasks */ @@ -14,7 +14,7 @@ public class TaskList { * Constructor that initializes a TaskList object * @param tasks */ - public TaskList(ArrayList tasks){ + public TaskList(ArrayList tasks) { this.tasks = tasks; } @@ -23,7 +23,7 @@ public TaskList(ArrayList tasks){ * * @param task */ - public void addTask(Task task){ + public void addTask(Task task) { tasks.add(task); } @@ -52,7 +52,7 @@ public void removeTask(int index) { /** * Clears the TaskList of all tasks */ - public void clearTaskList(){ + public void clearTaskList() { tasks.clear(); } @@ -61,7 +61,7 @@ public void clearTaskList(){ /** * @return int number of tasks in the TaskList */ - public int numberOfTasks(){ + public int numberOfTasks() { return tasks.size(); } diff --git a/src/main/java/duke/utils/Ui.java b/src/main/java/duke/utils/Ui.java index 0bcd4866de..6a88693374 100644 --- a/src/main/java/duke/utils/Ui.java +++ b/src/main/java/duke/utils/Ui.java @@ -1,7 +1,8 @@ package duke.utils; +import java.util.Scanner; + import duke.commands.Command; -import javafx.event.ActionEvent; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; @@ -16,9 +17,6 @@ import javafx.scene.paint.Color; import javafx.stage.Stage; -import javafx.event.EventHandler; -import java.util.Scanner; - /** * Class that handles taking in user input */ @@ -84,6 +82,16 @@ public Ui(Stage stage, TaskList taskList, Storage storage, Parser parser) { * Initializes the UI by displaying the stage of the javafx application. */ public void init() { + setInitialStage(); + start(); + formatStage(); + setUserInteraction(); + } + + /** + * Sets the initial stage display. + */ + public void setInitialStage() { stage.setTitle("Mr Duke's Todo App"); Color bgColor = Color.AZURE; @@ -92,11 +100,13 @@ public void init() { Scene scene = new Scene(mainLayout, bgColor); stage.setScene(scene); // Setting the stage to show our screen - stage.show(); // Render the stage - start(); + stage.show(); + } - //Step 2. Formatting the window to look as expected - stage.setTitle("Duke"); + /** + * Formats the window to look as expected. + */ + public void formatStage() { stage.setResizable(false); stage.setMinHeight(600.0); stage.setMinWidth(400.0); @@ -123,23 +133,22 @@ public void init() { AnchorPane.setLeftAnchor(textField, 1.0); AnchorPane.setBottomAnchor(textField, 1.0); + } - //Part 3. Add functionality to handle user input. + /** + * Adds functionality to handle user input. + */ + public void setUserInteraction() { sendButton.setOnMouseClicked((event) -> { handleUserInput(); }); -// textField.setOnAction((event) -> { -// handleUserInput(); -// }); - //Scroll down to the end every time dialogContainer's height changes. vbox.heightProperty().addListener((observable) -> scrollPane.setVvalue(1.0)); } /** - * Iteration 2: * Creates two dialog boxes, one echoing user input and the other containing Duke's reply and then appends them to * the dialog container. Clears the user input after processing. */ @@ -161,7 +170,6 @@ private String getResponse(String input) { label.setText(stringBuilder.toString()); try { - //showLine(); // show the divider line ("_______") Command c = parser.parseInput(userInput); c.execute(tasklist, Ui.this, storage); } catch (Exception ex) { @@ -170,10 +178,13 @@ private String getResponse(String input) { showLine(); } - //showLine(); return ""; } + /** + * Prints the message in the UI + * @param message message to be shown on Duke + */ public void printResponse(String message) { vbox.getChildren().addAll( DialogBox.getDukeDialog(new Label(message))); @@ -184,8 +195,7 @@ public void printResponse(String message) { /** * Returns the intro statement when app first launches */ - public void start(){ - + public void start() { vbox.getChildren().addAll( DialogBox.getDukeDialog(new Label(INTRO), new ImageView(duke) )); showLine(); @@ -198,11 +208,6 @@ public void end() { vbox.getChildren().addAll( DialogBox.getDukeDialog(new Label(ENDING), new ImageView(duke) )); showLine(); -// try { -// Thread.sleep(3000); -// } catch (InterruptedException e) { -// System.out.println("Unable to close"); -// } stage.close(); } @@ -210,17 +215,16 @@ public void end() { /** * Prints a dashed divider line */ - public void showLine(){ + public void showLine() { vbox.getChildren().addAll( DialogBox.getDukeDialog(new Label("\n________________________________________________________ \n"))); - } /** * Prints out the string message of the given Exception. * @param e Exception */ - public void showError(Exception e){ + public void showError(Exception e) { stringBuilder.append(e.toString()); label.setText(stringBuilder.toString()); } From 375ee70bf706d7031c7b4fe62420ad0ade67a45f Mon Sep 17 00:00:00 2001 From: ramaven Date: Wed, 15 Sep 2021 14:59:49 +0800 Subject: [PATCH 31/41] Add product screenshot --- docs/Ui.png | Bin 0 -> 285293 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/Ui.png diff --git a/docs/Ui.png b/docs/Ui.png new file mode 100644 index 0000000000000000000000000000000000000000..45cba2109b35a3f9eec80773fe93267d12eeddf5 GIT binary patch literal 285293 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

$RPL$TR7Vi%6 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

SaL0iV+Q6INSK*L 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 literal 0 HcmV?d00001 From 5db5d4628ad35c5493decb3a4da743c89043a7d0 Mon Sep 17 00:00:00 2001 From: ramaven Date: Wed, 15 Sep 2021 17:58:27 +0800 Subject: [PATCH 32/41] Add user guide --- docs/README.md | 165 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 155 insertions(+), 10 deletions(-) diff --git a/docs/README.md b/docs/README.md index 8077118ebe..93e7279106 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,29 +1,174 @@ # User Guide +UI Screenshot + +Duke is a task management desktop application that provides an effective +and efficient way to manage all your tasks. ## Features -### Feature-ABC +### 1. Simplistic Graphical User Interface + +Duke features a simple and elegant chat-like interface where you can type your +commands into a textbox and hit send, and you will hear back from Duke. + +### 2. Adding and managing tasks -Description of the feature. +There are 3 types of tasks you can add in Duke: +1) **Todo** tasks that consist of a description +2) **Event** tasks that consist of a description and a date +3) **Deadline** tasks that consist of a description and a date -### Feature-XYZ +You can mark a task as done once you have completed it, and you can also +delete a task if you no longer want it on your list. -Description of the feature. +You can also search for tasks in your list based on keywords. + +Remember to enter `bye` to save your changes and exit the app! ## Usage -### `Keyword` - Describe action +### A. Adding New Tasks + +You can add 3 different types of tasks. + +1. Adding a todo tasks: + +```todo {description}``` + +For example: + +```todo read book``` + +2. Adding an event task -Describe the action and its outcome. +```event {description} /at {date} ``` -Example of usage: +The date can be purely a date or a date with a time. It should be +in one of the following formats: +- dd/MM/yyyy ```2/12/2019``` +- dd/MM/yyyy HHmm ```2/12/2019 1800``` -`keyword (optional arguments)` +For example: + +```event math exam /at 2/12/2019 1800``` + +```event math exam /at 2/12/2019``` + +3. Adding a deadline task + +```deadline {description} /by {date} ``` + +For example: + +```deadline return book /by 2/12/2019 1800``` + +```deadline return book /by 2/12/2019``` + + + +Expected outcome of adding tasks: +``` +todo read book +``` + +``` +Got it. I've added this task: + [T][] read book +``` +### B. Viewing all tasks + +Type ```list``` to view a list of all your tasks Expected outcome: -Description of the outcome. +``` +list +``` ``` -expected output +1.[T][] read book +2.[D][] return book (by: Mon, Dec 02 2019, 18:00) +3.[E][] math exam (at: Mon, Dec 02 2019, 18:00) ``` + +### C. Marking task as done + +By seeing the output of ```list```, obtain the number of the task that +you want to mark as done. Let's say this is task number 1. + +Type ```done 1``` to mark the 1st task in the list as done. + +Expected outcome: + +``` +done 1 +``` +``` +Nice! I've marked this task as done: +[T][X] read book +``` + +``` +list +``` +``` +1.[T][X] read book +2.[D][] return book (by: Mon, Dec 02 2019, 18:00) +3.[E][] math exam (at: Mon, Dec 02 2019, 18:00) +``` + +### D. Deleting tasks + +By seeing the output of ```list```, obtain the number of the task that +you want to delete. Let's say this is task number 1. + +Type ```delete 1``` to delete the 1st task in the list. + +Expected outcome: + +``` +delete 1 +``` +``` +Noted. I've removed this task: +[T][X] read book +``` + +``` +list +``` +``` +1.[D][] return book (by: Mon, Dec 02 2019, 18:00) +2.[E][] math exam (at: Mon, Dec 02 2019, 18:00) +``` + +### E. Searching for matching tasks + +Type ```find {words}``` to search for task descriptions that match the word(s) or letters +that you have keyed in. + +Example of usage: + +`find book` + +Expected outcome: + +``` +find book +``` + +``` +Here are the matching tasks: +1.[D][] return book (by: Mon, Dec 02 2019, 18:00) +``` + +``` +find t +``` + +``` +Here are the matching tasks: +1.[D][] return book (by: Mon, Dec 02 2019, 18:00) +2.[E][] math exam (at: Mon, Dec 02 2019, 18:00) +``` + From 790acc6b24395aa52aa2916a1fa2faaa86fd8c8d Mon Sep 17 00:00:00 2001 From: ramaven <77253789+ramaven@users.noreply.github.com> Date: Wed, 15 Sep 2021 18:05:33 +0800 Subject: [PATCH 33/41] Set theme jekyll-theme-minimal --- docs/_config.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/_config.yml diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000000..2f7efbeab5 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-minimal \ No newline at end of file From b5d33a9bd8dec2caae46f0bfecaf54c70c881980 Mon Sep 17 00:00:00 2001 From: ramaven <77253789+ramaven@users.noreply.github.com> Date: Wed, 15 Sep 2021 18:05:54 +0800 Subject: [PATCH 34/41] Set theme jekyll-theme-leap-day --- docs/_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index 2f7efbeab5..b849713594 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1 +1 @@ -theme: jekyll-theme-minimal \ No newline at end of file +theme: jekyll-theme-leap-day \ No newline at end of file From 1e5ca139dc6ad0ee0d814417fffdcefcb3d3e59e Mon Sep 17 00:00:00 2001 From: ramaven Date: Wed, 15 Sep 2021 18:07:35 +0800 Subject: [PATCH 35/41] Edit User Guide --- docs/README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/README.md b/docs/README.md index 93e7279106..4c922f43a7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,5 +1,5 @@ # User Guide -UI Screenshot +UI Screenshot Duke is a task management desktop application that provides an effective and efficient way to manage all your tasks. @@ -31,7 +31,7 @@ Remember to enter `bye` to save your changes and exit the app! You can add 3 different types of tasks. -1. Adding a todo tasks: +1. **Adding a todo tasks:** ```todo {description}``` @@ -39,7 +39,7 @@ For example: ```todo read book``` -2. Adding an event task +2. **Adding an event task:** ```event {description} /at {date} ``` @@ -54,7 +54,7 @@ For example: ```event math exam /at 2/12/2019``` -3. Adding a deadline task +3. **Adding a deadline task:** ```deadline {description} /by {date} ``` @@ -172,3 +172,7 @@ Here are the matching tasks: 2.[E][] math exam (at: Mon, Dec 02 2019, 18:00) ``` +### Acknowledgements: + +- Original Duke template forked from Prof Damith CS2103T github +- GUI Design from Javafx tutorials \ No newline at end of file From 855c0ad584752f8010763d380c27131e87b0108e Mon Sep 17 00:00:00 2001 From: ramaven <77253789+ramaven@users.noreply.github.com> Date: Wed, 15 Sep 2021 18:11:09 +0800 Subject: [PATCH 36/41] Update README --- docs/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/README.md b/docs/README.md index 93e7279106..3dcea7c2fa 100644 --- a/docs/README.md +++ b/docs/README.md @@ -172,3 +172,6 @@ Here are the matching tasks: 2.[E][] math exam (at: Mon, Dec 02 2019, 18:00) ``` +### Acknowledgements: +- Original Duke template forked from Prof Damith CS2103T github +- GUI Design from Javafx tutorials From dc8235569a6729ae305d4b0558a63f455c9028db Mon Sep 17 00:00:00 2001 From: ramaven <77253789+ramaven@users.noreply.github.com> Date: Wed, 15 Sep 2021 18:11:29 +0800 Subject: [PATCH 37/41] Update README.md --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 3dcea7c2fa..4332ed2aba 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,5 +1,5 @@ # User Guide -UI Screenshot +UI Screenshot Duke is a task management desktop application that provides an effective and efficient way to manage all your tasks. From f17b05f61f3ef49042220df948463ccfdcc66446 Mon Sep 17 00:00:00 2001 From: ramaven Date: Wed, 15 Sep 2021 18:24:00 +0800 Subject: [PATCH 38/41] Update README.md --- docs/README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 9e361ec57b..1d894a13ce 100644 --- a/docs/README.md +++ b/docs/README.md @@ -173,11 +173,5 @@ Here are the matching tasks: ``` ### Acknowledgements: -<<<<<<< HEAD - -- Original Duke template forked from Prof Damith CS2103T github -- GUI Design from Javafx tutorials -======= - Original Duke template forked from Prof Damith CS2103T github - GUI Design from Javafx tutorials ->>>>>>> dc8235569a6729ae305d4b0558a63f455c9028db From a9ce5a5bcdf6a16eff6d206945fddf713e9e4d8a Mon Sep 17 00:00:00 2001 From: ramaven Date: Wed, 15 Sep 2021 21:29:15 +0800 Subject: [PATCH 39/41] Add credits --- docs/README.md | 2 +- src/main/java/duke/utils/Ui.java | 79 +++++++++++++++++++------------- 2 files changed, 48 insertions(+), 33 deletions(-) diff --git a/docs/README.md b/docs/README.md index 1d894a13ce..0a2870c380 100644 --- a/docs/README.md +++ b/docs/README.md @@ -174,4 +174,4 @@ Here are the matching tasks: ### Acknowledgements: - Original Duke template forked from Prof Damith CS2103T github -- GUI Design from Javafx tutorials +- GUI Design based on Javafx tutorials diff --git a/src/main/java/duke/utils/Ui.java b/src/main/java/duke/utils/Ui.java index 6a88693374..3aafbcfd57 100644 --- a/src/main/java/duke/utils/Ui.java +++ b/src/main/java/duke/utils/Ui.java @@ -107,44 +107,57 @@ public void setInitialStage() { * Formats the window to look as expected. */ public void formatStage() { - stage.setResizable(false); - stage.setMinHeight(600.0); - stage.setMinWidth(400.0); + //@@author ramaven-reused + //Reused from JavaFx tutorial 2 (https://se-education.org/guides/tutorials/javaFxPart2.html) + // with minor modifications + { + stage.setResizable(false); + stage.setMinHeight(600.0); + stage.setMinWidth(400.0); - mainLayout.setPrefSize(400.0, 600.0); + mainLayout.setPrefSize(400.0, 600.0); - scrollPane.setPrefSize(385, 535); - scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); - scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS); + scrollPane.setPrefSize(385, 535); + scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); + scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS); - scrollPane.setVvalue(1.0); - scrollPane.setFitToWidth(true); + scrollPane.setVvalue(1.0); + scrollPane.setFitToWidth(true); - vbox.setPrefHeight(Region.USE_COMPUTED_SIZE); + vbox.setPrefHeight(Region.USE_COMPUTED_SIZE); - textField.setPrefWidth(325.0); + textField.setPrefWidth(325.0); - sendButton.setPrefWidth(55.0); + sendButton.setPrefWidth(55.1); - AnchorPane.setTopAnchor(scrollPane, 1.0); + AnchorPane.setTopAnchor(scrollPane, 1.0); - AnchorPane.setBottomAnchor(sendButton, 1.0); - AnchorPane.setRightAnchor(sendButton, 1.0); + AnchorPane.setBottomAnchor(sendButton, 1.0); + AnchorPane.setRightAnchor(sendButton, 1.0); - AnchorPane.setLeftAnchor(textField, 1.0); - AnchorPane.setBottomAnchor(textField, 1.0); + AnchorPane.setLeftAnchor(textField, 1.0); + AnchorPane.setBottomAnchor(textField, 1.0); + } + //@@author } /** * Adds functionality to handle user input. */ public void setUserInteraction() { - sendButton.setOnMouseClicked((event) -> { - handleUserInput(); - }); - - //Scroll down to the end every time dialogContainer's height changes. - vbox.heightProperty().addListener((observable) -> scrollPane.setVvalue(1.0)); + //@@author ramaven-reused + //Reused from JavaFx tutorial 3 (https://se-education.org/guides/tutorials/javaFxPart3.html) + // with minor modifications + { + sendButton.setOnMouseClicked((event) -> { + handleUserInput(); + }); + + //Scroll down to the end every time dialogContainer's height changes to + // improve user experience + vbox.heightProperty().addListener((observable) -> scrollPane.setVvalue(1.0)); + } + //@@author } @@ -153,16 +166,18 @@ public void setUserInteraction() { * the dialog container. Clears the user input after processing. */ private void handleUserInput() { - Label userText = new Label(textField.getText()); - vbox.getChildren().addAll(DialogBox.getUserDialog(userText, new ImageView(user))); - Label dukeText = new Label(getResponse(textField.getText())); - vbox.getChildren().addAll(DialogBox.getDukeDialog(dukeText, new ImageView(duke))); - textField.clear(); + // Solution below adapted from JavaFx tutorial 3 (https://se-education.org/guides/tutorials/javaFxPart3.html) + { + Label userText = new Label(textField.getText()); + vbox.getChildren().addAll(DialogBox.getUserDialog(userText, new ImageView(user))); + Label dukeText = new Label(getResponse(textField.getText())); + vbox.getChildren().addAll(DialogBox.getDukeDialog(dukeText, new ImageView(duke))); + textField.clear(); + } } /** - * You should have your own function to generate a response to user input. - * Replace this stub with your completed method. + * Generates a response to user input. */ private String getResponse(String input) { String userInput = textField.getText(); @@ -225,8 +240,8 @@ public void showLine() { * @param e Exception */ public void showError(Exception e) { - stringBuilder.append(e.toString()); - label.setText(stringBuilder.toString()); + vbox.getChildren().addAll( + DialogBox.getDukeDialog(new Label(e.toString()) )); } From 979f83f02d4010ff2b963d80758734683a5d2f15 Mon Sep 17 00:00:00 2001 From: ramaven Date: Wed, 15 Sep 2021 21:43:05 +0800 Subject: [PATCH 40/41] Improve code quality --- data.txt | 1 - src/main/java/duke/commands/EventCommand.java | 1 - src/main/java/duke/commands/FindCommand.java | 15 ++++++------ src/main/java/duke/commands/HelpCommand.java | 3 --- src/main/java/duke/commands/TodoCommand.java | 2 -- src/main/java/duke/utils/DukeDate.java | 10 -------- src/main/java/duke/utils/Parser.java | 1 + src/main/java/duke/utils/Storage.java | 23 ++++++++----------- src/main/java/duke/utils/Ui.java | 5 ---- 9 files changed, 17 insertions(+), 44 deletions(-) diff --git a/data.txt b/data.txt index 7432f14767..227d12922d 100644 --- a/data.txt +++ b/data.txt @@ -1,6 +1,5 @@ T;0;readbook D;0;return book ;2/12/2019 1800 T;0;week 4 ip -T;0;show mabel T;1;sleep E;0;nus run ;26/9/2021 1700 diff --git a/src/main/java/duke/commands/EventCommand.java b/src/main/java/duke/commands/EventCommand.java index 4e94d16ff2..0d774aa922 100644 --- a/src/main/java/duke/commands/EventCommand.java +++ b/src/main/java/duke/commands/EventCommand.java @@ -29,7 +29,6 @@ public void execute(TaskList taskList, Ui ui, Storage storage) { } } - String at = commandString.split("/")[1].substring(3); EventTask newEvent = new EventTask(commandString.substring(6).split("/")[0], date); taskList.addTask(newEvent); ui.printResponse("Got it. I've added this task: "); diff --git a/src/main/java/duke/commands/FindCommand.java b/src/main/java/duke/commands/FindCommand.java index ea5ed2a1b6..b8b0468095 100644 --- a/src/main/java/duke/commands/FindCommand.java +++ b/src/main/java/duke/commands/FindCommand.java @@ -21,34 +21,33 @@ public FindCommand(String commandString) { @Override public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeException { String[] commandArr = commandString.split(" "); - boolean foundAnyMatch = false; + boolean anyMatchFound = false; int numberOfMatches = 0; for (int i = 0; i < taskList.numberOfTasks(); i++) { - boolean currTaskPrinted = false; + boolean currentTaskHasBeenPrinted = false; // loop again for each keyword in input for (int word = 1; word < commandArr.length; word++) { boolean matches = taskList.getTask(i).getName().toLowerCase().contains(commandArr[word].toLowerCase()); if (matches) { - if (!foundAnyMatch) { + if (!anyMatchFound) { ui.printResponse("Here are the matching tasks:"); } - foundAnyMatch = true; + anyMatchFound = true; numberOfMatches++; - if (!currTaskPrinted) { + if (!currentTaskHasBeenPrinted) { ui.printResponse((numberOfMatches) + "." + taskList.getTask(i).toString()); - currTaskPrinted = true; + currentTaskHasBeenPrinted = true; } } } } - if (!foundAnyMatch) { + if (!anyMatchFound) { ui.printResponse("Sorry, we are unable to find any matching tasks"); } - } @Override diff --git a/src/main/java/duke/commands/HelpCommand.java b/src/main/java/duke/commands/HelpCommand.java index d5464eaf1d..fc90f48f81 100644 --- a/src/main/java/duke/commands/HelpCommand.java +++ b/src/main/java/duke/commands/HelpCommand.java @@ -41,9 +41,6 @@ public void execute(TaskList taskList, Ui ui, Storage storage) throws DukeExcept ui.printResponse("Eg. 'deadline return book /by 2/12/2019 1800' "); ui.printResponse("Type 'help' to see the list of commands available"); - - - } @Override diff --git a/src/main/java/duke/commands/TodoCommand.java b/src/main/java/duke/commands/TodoCommand.java index 4494b71b89..3c6090eff3 100644 --- a/src/main/java/duke/commands/TodoCommand.java +++ b/src/main/java/duke/commands/TodoCommand.java @@ -21,9 +21,7 @@ public TodoCommand(String commandString) { @Override public void execute(TaskList taskList, Ui ui, Storage storage) { TodoTask newTodo = new TodoTask(commandString.substring(5)); - //duke.tasks.add(newTask); taskList.addTask(newTodo); - //taskCounter++; ui.printResponse("Got it. I've added this task: "); ui.printResponse(" " + newTodo.toString()); } diff --git a/src/main/java/duke/utils/DukeDate.java b/src/main/java/duke/utils/DukeDate.java index 9611258b86..3c09097cf5 100644 --- a/src/main/java/duke/utils/DukeDate.java +++ b/src/main/java/duke/utils/DukeDate.java @@ -21,12 +21,7 @@ public static Date formatDate(String dateLiteral) { SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HHmm"); try { Date dateFormatted = format.parse(dateLiteral); - //System.out.println(dateFormatted); return dateFormatted; - // eg. dateLiteral = 2/12/2019 1800 - // after parse - // Mon Dec 02 18:00:00 SGT 2019 - } catch (java.text.ParseException e) { System.out.println("Incorrect date format"); } @@ -35,12 +30,7 @@ public static Date formatDate(String dateLiteral) { SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); try { Date dateFormatted = format.parse(dateLiteral); - //System.out.println(dateFormatted); return dateFormatted; - // eg. dateLiteral = 2/12/2019 - // after parse - // Mon Dec 02 00:00:00 SGT 2019 - } catch (java.text.ParseException e) { System.out.println("Incorrect date format"); } diff --git a/src/main/java/duke/utils/Parser.java b/src/main/java/duke/utils/Parser.java index deb7215386..af6b4bb26f 100644 --- a/src/main/java/duke/utils/Parser.java +++ b/src/main/java/duke/utils/Parser.java @@ -33,6 +33,7 @@ public Command parseInput(String fullCommand) { switch (actionWord) { case "bye": return new ExitCommand(); + case "list": return new ListCommand(); diff --git a/src/main/java/duke/utils/Storage.java b/src/main/java/duke/utils/Storage.java index 0d35467b9c..53cc635260 100644 --- a/src/main/java/duke/utils/Storage.java +++ b/src/main/java/duke/utils/Storage.java @@ -155,12 +155,9 @@ public String convertTaskToString(Task task) { * @return */ public Task convertStringToTask(String line) { - - // Example storage in file: - // T;0;readbook - // D;0;return book ;2/12/2019 1800 - - + // Example storage in file: + // T;0;readbook + // D;0;return book ;2/12/2019 1800 String[] lineSplit = line.split(DELIMITER); Task.TaskType taskType = lineSplit[0].equals("T") ? Task.TaskType.TODO @@ -170,30 +167,28 @@ public Task convertStringToTask(String line) { boolean taskDone = lineSplit[1].equals("0") ? false : true; - Task currTask; + Task currentTask; switch (taskType) { case TODO: - currTask = new TodoTask(lineSplit[2]); + currentTask = new TodoTask(lineSplit[2]); break; case DEADLINE: - currTask = new DeadlineTask(lineSplit[2], lineSplit[3]); + currentTask = new DeadlineTask(lineSplit[2], lineSplit[3]); break; case EVENT: - currTask = new EventTask(lineSplit[2], lineSplit[3]); + currentTask = new EventTask(lineSplit[2], lineSplit[3]); break; default: throw new IllegalArgumentException("Corrupted file"); } - if (taskDone ) { - currTask.makeDone(); + currentTask.makeDone(); } - - return currTask; + return currentTask; } diff --git a/src/main/java/duke/utils/Ui.java b/src/main/java/duke/utils/Ui.java index 3aafbcfd57..c4b0053706 100644 --- a/src/main/java/duke/utils/Ui.java +++ b/src/main/java/duke/utils/Ui.java @@ -243,9 +243,4 @@ public void showError(Exception e) { vbox.getChildren().addAll( DialogBox.getDukeDialog(new Label(e.toString()) )); } - - - - - } From 8e8c1d773b318db3150f4c32bf83d7f5a4bf27fc Mon Sep 17 00:00:00 2001 From: ramaven Date: Fri, 17 Sep 2021 20:10:09 +0800 Subject: [PATCH 41/41] Add test methods --- build.gradle | 11 +++++++++- src/main/java/Duke.java | 1 + src/main/java/META-INF/MANIFEST.MF | 2 +- src/test/java/duke/tasks/TodoTaskTest.java | 19 ++++++++++++++++ src/test/java/duke/utils/DukeDateTest.java | 25 ++++++++++++++++++++++ 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/test/java/duke/tasks/TodoTaskTest.java create mode 100644 src/test/java/duke/utils/DukeDateTest.java diff --git a/build.gradle b/build.gradle index 66636bab60..313b6f2ec7 100644 --- a/build.gradle +++ b/build.gradle @@ -44,7 +44,7 @@ test { } application { - mainClassName = "seedu.duke.Duke" + mainClassName = "Launcher" } shadowJar { @@ -59,3 +59,12 @@ checkstyle { run{ standardInput = System.in } + +jar { + manifest { + attributes( + + 'Main-Class': 'Launcher' + ) + } +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 79ccfcf608..bd04e33c10 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -39,5 +39,6 @@ public void start(Stage stage) { ui = new Ui(stage, taskList, storage, parser); ui.init(); } + } diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF index d2ffd5b4d2..8a51453653 100644 --- a/src/main/java/META-INF/MANIFEST.MF +++ b/src/main/java/META-INF/MANIFEST.MF @@ -1,3 +1,3 @@ Manifest-Version: 1.0 -Main-Class: Duke +Main-Class: Launcher diff --git a/src/test/java/duke/tasks/TodoTaskTest.java b/src/test/java/duke/tasks/TodoTaskTest.java new file mode 100644 index 0000000000..517b60d7cc --- /dev/null +++ b/src/test/java/duke/tasks/TodoTaskTest.java @@ -0,0 +1,19 @@ +package duke.tasks; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class TodoTaskTest { + @Test + public void todoTaskNameTest() { + TodoTask task = new TodoTask("Test task"); + assertEquals("Test task", task.getName()); + } + + @Test + public void todoTaskTypeTest() { + TodoTask task = new TodoTask("Test task"); + assertEquals(Task.TaskType.TODO, task.getType()); + } +} diff --git a/src/test/java/duke/utils/DukeDateTest.java b/src/test/java/duke/utils/DukeDateTest.java new file mode 100644 index 0000000000..a09838dd46 --- /dev/null +++ b/src/test/java/duke/utils/DukeDateTest.java @@ -0,0 +1,25 @@ +package duke.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class DukeDateTest { + + @Test + public void formatDateTimeTest() { + String literalDateTime = "2/12/2019 1800"; + String parsedDate = DukeDate.parseDateToString(DukeDate.formatDate(literalDateTime)); + String expected = "Mon, Dec 02 2019, 18:00"; + assertEquals(expected, parsedDate); + } + + @Test + public void formatDateTest() { + String literalDateTime = "2/12/2019"; + String parsedDate = DukeDate.parseDateToString(DukeDate.formatDate(literalDateTime)); + String expected = "Mon, Dec 02 2019, 00:00"; + assertEquals(expected, parsedDate); + } + +}