From d8398594b7bc43da5eb865321c5a50cec4b3923d Mon Sep 17 00:00:00 2001 From: damithc Date: Mon, 25 May 2020 00:58:18 +0800 Subject: [PATCH 01/28] 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 3e87c13358afd6a0c22b75240cd3d19a3f337091 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Thu, 19 Aug 2021 21:30:46 +0800 Subject: [PATCH 02/28] Level-1 --- src/main/java/Duke.java | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334cc..0fc0af3708 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,10 +1,39 @@ +import java.util.*; + public class Duke { public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" + + Scanner scanner = new Scanner(System.in); + + String logo = " _ _ \n" + + "| | _ _| | _____ \n" + + "| | | | | | |/ / _ \\\n" + + "| |___| |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); + + String lineBreak = "\t____________________________________________________________"; + System.out.println(lineBreak + + "\n\tHello! I'm Luke, your slightly useful personal assistant!\n" + + "\tWhat can I do for you, my liege?\n" + + "\ttype 'bye' to end\n" + + lineBreak); + + String response = scanner.nextLine(); + + while (!response.equals("bye")) { + System.out.println(lineBreak + + "\n\t" + + response + + "\n" + + lineBreak); + response = scanner.nextLine(); + } + + System.out.println(lineBreak + + "\n\tBye! Talk again sometime!\n" + + lineBreak); + + scanner.close(); } } From dc74ffbaecb999fec7db9a591e0c5c8aae4e24f4 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Thu, 19 Aug 2021 21:54:44 +0800 Subject: [PATCH 03/28] Level-2 --- src/main/java/Duke.java | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 0fc0af3708..0c685f771d 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -12,26 +12,40 @@ public static void main(String[] args) { + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); + String[] list = new String[100]; + int amount = 0; + String lineBreak = "\t____________________________________________________________"; System.out.println(lineBreak - + "\n\tHello! I'm Luke, your slightly useful personal assistant!\n" - + "\tWhat can I do for you, my liege?\n" - + "\ttype 'bye' to end\n" + + "\n\t Hello! I'm Luke, your slightly useful personal assistant!\n" + + "\t What can I do for you, my liege?\n" + + "\t Type 'list' to show previous inputs\n" + + "\t Type 'bye' to end\n" + lineBreak); String response = scanner.nextLine(); while (!response.equals("bye")) { - System.out.println(lineBreak - + "\n\t" - + response - + "\n" - + lineBreak); + if(response.equals("list")) { + System.out.println(lineBreak); + for (int i = 0; i < amount; i++) { + System.out.println("\n\t " + (i + 1) + ". " + list[i]); + } + System.out.println(lineBreak); + } else { + System.out.println(lineBreak + + "\n\t added: " + + response + + "\n" + + lineBreak); + list[amount] = response; + amount++; + } response = scanner.nextLine(); } System.out.println(lineBreak - + "\n\tBye! Talk again sometime!\n" + + "\n\t Bye! Talk again sometime!\n" + lineBreak); scanner.close(); From 011e3c4c1a9345139c265dbe87ca9ab4f0ffbd07 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Thu, 19 Aug 2021 22:15:28 +0800 Subject: [PATCH 04/28] Level-2 --- src/main/java/Duke.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 0c685f771d..c3deb4f48d 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -50,4 +50,4 @@ public static void main(String[] args) { scanner.close(); } -} +} \ No newline at end of file From 7645743f4351c498b596fae027de3f22a8dbce5b Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Thu, 19 Aug 2021 22:38:29 +0800 Subject: [PATCH 05/28] Level-3 --- src/main/java/Duke.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index c3deb4f48d..e05c1b48bf 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -13,6 +13,7 @@ public static void main(String[] args) { System.out.println("Hello from\n" + logo); String[] list = new String[100]; + boolean[] done = new boolean[100]; int amount = 0; String lineBreak = "\t____________________________________________________________"; @@ -20,18 +21,29 @@ public static void main(String[] args) { + "\n\t Hello! I'm Luke, your slightly useful personal assistant!\n" + "\t What can I do for you, my liege?\n" + "\t Type 'list' to show previous inputs\n" + + "\t Type 'done #' to indicate that task # has been done\n" + "\t Type 'bye' to end\n" + lineBreak); String response = scanner.nextLine(); while (!response.equals("bye")) { - if(response.equals("list")) { + if (response.equals("list")) { System.out.println(lineBreak); + System.out.println("\t Here are the tasks in your list:"); for (int i = 0; i < amount; i++) { - System.out.println("\n\t " + (i + 1) + ". " + list[i]); + String doneI = " "; + if (done[i]) doneI = "X"; + System.out.println("\t " + (i + 1) + ".[" + doneI + "] " + list[i]); } System.out.println(lineBreak); + } else if (response.matches("done ([0-9]|[1-9][0-9])")) { + int taskNo = Integer.parseInt(response.replaceAll("\\D", "")) - 1; + System.out.println(lineBreak); + System.out.println("\t Nice! I've marked this task as done:"); + System.out.println("\t [X] " + list[taskNo]); + System.out.println(lineBreak); + done[taskNo] = true; } else { System.out.println(lineBreak + "\n\t added: " From 23d06038b3345151567366821b6b00a2eafb89c5 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Thu, 19 Aug 2021 23:28:07 +0800 Subject: [PATCH 06/28] Level-4 --- src/main/java/Duke.java | 65 ++++++++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index e05c1b48bf..a5e9925e00 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -14,6 +14,9 @@ public static void main(String[] args) { String[] list = new String[100]; boolean[] done = new boolean[100]; + // boolean[] td = new boolean[100]; + // boolean[] deadline = new boolean[100]; + // boolean[] event = new boolean[100]; int amount = 0; String lineBreak = "\t____________________________________________________________"; @@ -21,6 +24,9 @@ public static void main(String[] args) { + "\n\t Hello! I'm Luke, your slightly useful personal assistant!\n" + "\t What can I do for you, my liege?\n" + "\t Type 'list' to show previous inputs\n" + + "\t Type 'todo TASK' to indicate that TASK has to be done\n" + + "\t Type 'deadline TASK /by DATE/TIME' to indicate that TASK has to be done by DATE/TIME\n" + + "\t Type 'event TASK /at DATE/TIME PERIOD' to indicate that TASK occurs at DATE/TIME PERIOD\n" + "\t Type 'done #' to indicate that task # has been done\n" + "\t Type 'bye' to end\n" + lineBreak); @@ -34,31 +40,68 @@ public static void main(String[] args) { for (int i = 0; i < amount; i++) { String doneI = " "; if (done[i]) doneI = "X"; - System.out.println("\t " + (i + 1) + ".[" + doneI + "] " + list[i]); + // String type = " "; + // if (td[i]) type = "T"; + // if (deadline[i]) type = "D"; + // if (event[i]) type = "E"; + System.out.println("\t " + (i + 1) + "." + list[i]); } System.out.println(lineBreak); } else if (response.matches("done ([0-9]|[1-9][0-9])")) { int taskNo = Integer.parseInt(response.replaceAll("\\D", "")) - 1; System.out.println(lineBreak); System.out.println("\t Nice! I've marked this task as done:"); - System.out.println("\t [X] " + list[taskNo]); + list[taskNo] = list[taskNo].substring(0,4) + 'X' + list[taskNo].substring(5); + System.out.println("\t " + list[taskNo]); System.out.println(lineBreak); done[taskNo] = true; + } else if (response.matches("todo .+")) { + System.out.println(lineBreak); + System.out.println("\t Got it. I've added this task:"); + System.out.println("\t [T][ ] " + response.substring(5)); + System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); + System.out.println(lineBreak); + list[amount] = "[T][ ] " + response.substring(5); + // td[amount] = true; + amount++; + } else if (response.matches("deadline .+")) { + System.out.println(lineBreak); + System.out.println("\t Got it. I've added this task:"); + int pos = response.indexOf('/'); + list[amount] = "[D][ ] " + + response.substring(9, pos - 1) + + " (by: " + response.substring(response.indexOf('/') + 4) + ")"; + System.out.println("\t " + list[amount]); + System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); + System.out.println(lineBreak); + // deadline[amount] = true; + amount++; + } else if (response.matches("event .+")) { + System.out.println(lineBreak); + System.out.println("\t Got it. I've added this task:"); + int pos = response.indexOf('/'); + list[amount] = "[E][ ] " + + response.substring(6, pos - 1) + + " (at: " + response.substring(response.indexOf('/') + 4) + ")"; + System.out.println("\t " + list[amount]); + System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); + System.out.println(lineBreak); + // deadline[amount] = true; + amount++; } else { - System.out.println(lineBreak - + "\n\t added: " - + response - + "\n" - + lineBreak); - list[amount] = response; + System.out.println(lineBreak); + System.out.println("\t Got it. I've added this task:"); + System.out.println("\t [ ][ ] " + response); + System.out.println(lineBreak); + list[amount] = "[ ][ ] " + response; amount++; } response = scanner.nextLine(); } - System.out.println(lineBreak - + "\n\t Bye! Talk again sometime!\n" - + lineBreak); + System.out.println(lineBreak); + System.out.println("\t Bye! Talk again sometime!"); + System.out.println(lineBreak); scanner.close(); } From 58e344f79c9388495c5eedd31517d49eced7245a Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Thu, 19 Aug 2021 23:56:54 +0800 Subject: [PATCH 07/28] Level-5 --- src/main/java/Duke.java | 17 +++++++++--- text-ui-test/EXPECTED.TXT | 56 ++++++++++++++++++++++++++++++++++++--- text-ui-test/input.txt | 8 ++++++ text-ui-test/runtest.bat | 2 +- 4 files changed, 74 insertions(+), 9 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a5e9925e00..0863bc49ca 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -88,13 +88,22 @@ public static void main(String[] args) { System.out.println(lineBreak); // deadline[amount] = true; amount++; + } else if (response.equals("todo")) { + System.out.println(lineBreak); + System.out.println("☹ OOPS!!! The description of a todo cannot be empty."); + System.out.println(lineBreak); + } else if (response.equals("deadline")) { + System.out.println(lineBreak); + System.out.println("☹ OOPS!!! The description of a deadline cannot be empty."); + System.out.println(lineBreak); + } else if (response.equals("event")) { + System.out.println(lineBreak); + System.out.println("☹ OOPS!!! The description of an event cannot be empty."); + System.out.println(lineBreak); } else { System.out.println(lineBreak); - System.out.println("\t Got it. I've added this task:"); - System.out.println("\t [ ][ ] " + response); + System.out.println("☹ OOPS!!! I'm sorry, but I don't know what that means :-("); System.out.println(lineBreak); - list[amount] = "[ ][ ] " + response; - amount++; } response = scanner.nextLine(); } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 657e74f6e7..3b08741022 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,7 +1,55 @@ Hello from - ____ _ -| _ \ _ _| | _____ -| | | | | | | |/ / _ \ -| |_| | |_| | < __/ + _ _ +| | _ _| | _____ +| | | | | | |/ / _ \ +| |___| |_| | < __/ |____/ \__,_|_|\_\___| + ____________________________________________________________ + Hello! I'm Luke, your slightly useful personal assistant! + What can I do for you, my liege? + Type 'list' to show previous inputs + Type 'todo TASK' to indicate that TASK has to be done + Type 'deadline TASK /by DATE/TIME' to indicate that TASK has to be done by DATE/TIME + Type 'event TASK /at DATE/TIME PERIOD' to indicate that TASK occurs at DATE/TIME PERIOD + Type 'done #' to indicate that task # has been done + Type 'bye' to end + ____________________________________________________________ + ____________________________________________________________ + Got it. I've added this task: + [T][ ] borrow book + Now you have 1 tasks in the list. + ____________________________________________________________ + ____________________________________________________________ + Got it. I've added this task: + [D][ ] return book (by: Sunday) + Now you have 2 tasks in the list. + ____________________________________________________________ + ____________________________________________________________ + Got it. I've added this task: + [E][ ] project meeting (at: Mon 2-4pm) + Now you have 3 tasks in the list. + ____________________________________________________________ + ____________________________________________________________ + Here are the tasks in your list: + 1.[T][ ] borrow book + 2.[D][ ] return book (by: Sunday) + 3.[E][ ] project meeting (at: Mon 2-4pm) + ____________________________________________________________ + ____________________________________________________________ + Nice! I've marked this task as done: + [D][X] return book (by: Sunday) + ____________________________________________________________ + ____________________________________________________________ + Nice! I've marked this task as done: + [E][X] project meeting (at: Mon 2-4pm) + ____________________________________________________________ + ____________________________________________________________ + Here are the tasks in your list: + 1.[T][ ] borrow book + 2.[D][X] return book (by: Sunday) + 3.[E][X] project meeting (at: Mon 2-4pm) + ____________________________________________________________ + ____________________________________________________________ + Bye! Talk again sometime! + ____________________________________________________________ \ No newline at end of file diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index e69de29bb2..85f7a4729b 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -0,0 +1,8 @@ +todo borrow book +deadline return book /by Sunday +event project meeting /at Mon 2-4pm +list +done 2 +done 3 +list +bye diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index 0873744649..97c1d9157a 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -7,7 +7,7 @@ REM delete output from previous run if exist ACTUAL.TXT del ACTUAL.TXT REM compile the code into the bin folder -javac -cp ..\src\main\java -Xlint:none -d ..\bin ..\src\main\java\*.java +javac -cp ..\src\main\java -Xlint:none -d ..\bin ..\src\main\java\Duke.java IF ERRORLEVEL 1 ( echo ********** BUILD FAILURE ********** exit /b 1 From 54a6d6324e467394db4bbd82a275e230b79ec9c5 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 20 Aug 2021 00:02:33 +0800 Subject: [PATCH 08/28] Level-6 --- src/main/java/Duke.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 0863bc49ca..92d2e48625 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -55,6 +55,14 @@ public static void main(String[] args) { System.out.println("\t " + list[taskNo]); System.out.println(lineBreak); done[taskNo] = true; + } else if (response.matches("delete ([0-9]|[1-9][0-9])")) { + int taskNo = Integer.parseInt(response.replaceAll("\\D", "")) - 1; + System.out.println(lineBreak); + System.out.println("\t Noted. I've removed this task:"); + System.out.println("\t " + list[taskNo]); + System.out.println("\t Now you have " + (amount - 1) + " tasks in the list."); + System.out.println(lineBreak); + list[taskNo] = "deleted"; } else if (response.matches("todo .+")) { System.out.println(lineBreak); System.out.println("\t Got it. I've added this task:"); @@ -107,7 +115,6 @@ public static void main(String[] args) { } response = scanner.nextLine(); } - System.out.println(lineBreak); System.out.println("\t Bye! Talk again sometime!"); System.out.println(lineBreak); From d2e0d9472f6e108d666e679680aedb830f139fed Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 22:01:28 +0800 Subject: [PATCH 09/28] branch-Level-7 --- .gitignore | 34 ++--- CONTRIBUTORS.md | 18 +-- README.md | 48 +++---- docs/README.md | 58 ++++----- src/main/java/Duke.java | 262 ++++++++++++++++++++------------------ text-ui-test/EXPECTED.TXT | 108 ++++++++-------- text-ui-test/input.txt | 16 +-- text-ui-test/runtest.bat | 42 +++--- text-ui-test/runtest.sh | 74 +++++------ 9 files changed, 338 insertions(+), 322 deletions(-) diff --git a/.gitignore b/.gitignore index f69985ef1f..3a15cdf59e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,17 @@ -# IDEA files -/.idea/ -/out/ -/*.iml - -# Gradle build files -/.gradle/ -/build/ -src/main/resources/docs/ - -# MacOS custom attributes files created by Finder -.DS_Store -*.iml -bin/ - -/text-ui-test/ACTUAL.txt -text-ui-test/EXPECTED-UNIX.TXT +# IDEA files +/.idea/ +/out/ +/*.iml + +# Gradle build files +/.gradle/ +/build/ +src/main/resources/docs/ + +# MacOS custom attributes files created by Finder +.DS_Store +*.iml +bin/ + +/text-ui-test/ACTUAL.txt +text-ui-test/EXPECTED-UNIX.TXT diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 8e359a0145..419450f2f6 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -1,9 +1,9 @@ -# Contributors - -Display | Name | Github Profile | Homepage ----|:---:|:---:|:---: -![](https://avatars0.githubusercontent.com/u/22460123?s=100) | Jeffry Lum | [Github](https://github.com/j-lum/) | [Homepage](https://se.kasugano.moe) -![](https://avatars0.githubusercontent.com/u/1673303?s=100) | Damith C. Rajapakse | [Github](https://github.com/damithc/) | [Homepage](https://www.comp.nus.edu.sg/~damithch/) -# I would like to join this list. How can I help the project - -For more information, please refer to our [contributor's guide](https://oss-generic.github.io/process/). +# Contributors + +Display | Name | Github Profile | Homepage +---|:---:|:---:|:---: +![](https://avatars0.githubusercontent.com/u/22460123?s=100) | Jeffry Lum | [Github](https://github.com/j-lum/) | [Homepage](https://se.kasugano.moe) +![](https://avatars0.githubusercontent.com/u/1673303?s=100) | Damith C. Rajapakse | [Github](https://github.com/damithc/) | [Homepage](https://www.comp.nus.edu.sg/~damithch/) +# I would like to join this list. How can I help the project + +For more information, please refer to our [contributor's guide](https://oss-generic.github.io/process/). diff --git a/README.md b/README.md index 8715d4d915..9db1777ba0 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,24 @@ -# Duke project template - -This is a project template for a greenfield Java project. It's named after the Java mascot _Duke_. Given below are instructions on how to use it. - -## Setting up in Intellij - -Prerequisites: JDK 11, update Intellij to the most recent version. - -1. Open Intellij (if you are not in the welcome screen, click `File` > `Close Project` to close the existing project first) -1. Open the project into Intellij as follows: - 1. Click `Open`. - 1. Select the project directory, and click `OK`. - 1. If there are any further prompts, accept the defaults. -1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).
- In the same dialog, set the **Project language level** field to the `SDK default` option. -3. After that, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output: - ``` - Hello from - ____ _ - | _ \ _ _| | _____ - | | | | | | | |/ / _ \ - | |_| | |_| | < __/ - |____/ \__,_|_|\_\___| - ``` +# Duke project template + +This is a project template for a greenfield Java project. It's named after the Java mascot _Duke_. Given below are instructions on how to use it. + +## Setting up in Intellij + +Prerequisites: JDK 11, update Intellij to the most recent version. + +1. Open Intellij (if you are not in the welcome screen, click `File` > `Close Project` to close the existing project first) +1. Open the project into Intellij as follows: + 1. Click `Open`. + 1. Select the project directory, and click `OK`. + 1. If there are any further prompts, accept the defaults. +1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).
+ In the same dialog, set the **Project language level** field to the `SDK default` option. +3. After that, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output: + ``` + Hello from + ____ _ + | _ \ _ _| | _____ + | | | | | | | |/ / _ \ + | |_| | |_| | < __/ + |____/ \__,_|_|\_\___| + ``` diff --git a/docs/README.md b/docs/README.md index 8077118ebe..718e1076be 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,29 +1,29 @@ -# User Guide - -## Features - -### Feature-ABC - -Description of the feature. - -### Feature-XYZ - -Description of the feature. - -## Usage - -### `Keyword` - Describe action - -Describe the action and its outcome. - -Example of usage: - -`keyword (optional arguments)` - -Expected outcome: - -Description of the outcome. - -``` -expected output -``` +# User Guide + +## Features + +### Feature-ABC + +Description of the feature. + +### Feature-XYZ + +Description of the feature. + +## Usage + +### `Keyword` - Describe action + +Describe the action and its outcome. + +Example of usage: + +`keyword (optional arguments)` + +Expected outcome: + +Description of the outcome. + +``` +expected output +``` diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 92d2e48625..5b8757b6b8 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,124 +1,140 @@ -import java.util.*; - -public class Duke { - public static void main(String[] args) { - - Scanner scanner = new Scanner(System.in); - - String logo = " _ _ \n" - + "| | _ _| | _____ \n" - + "| | | | | | |/ / _ \\\n" - + "| |___| |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - - String[] list = new String[100]; - boolean[] done = new boolean[100]; - // boolean[] td = new boolean[100]; - // boolean[] deadline = new boolean[100]; - // boolean[] event = new boolean[100]; - int amount = 0; - - String lineBreak = "\t____________________________________________________________"; - System.out.println(lineBreak - + "\n\t Hello! I'm Luke, your slightly useful personal assistant!\n" - + "\t What can I do for you, my liege?\n" - + "\t Type 'list' to show previous inputs\n" - + "\t Type 'todo TASK' to indicate that TASK has to be done\n" - + "\t Type 'deadline TASK /by DATE/TIME' to indicate that TASK has to be done by DATE/TIME\n" - + "\t Type 'event TASK /at DATE/TIME PERIOD' to indicate that TASK occurs at DATE/TIME PERIOD\n" - + "\t Type 'done #' to indicate that task # has been done\n" - + "\t Type 'bye' to end\n" - + lineBreak); - - String response = scanner.nextLine(); - - while (!response.equals("bye")) { - if (response.equals("list")) { - System.out.println(lineBreak); - System.out.println("\t Here are the tasks in your list:"); - for (int i = 0; i < amount; i++) { - String doneI = " "; - if (done[i]) doneI = "X"; - // String type = " "; - // if (td[i]) type = "T"; - // if (deadline[i]) type = "D"; - // if (event[i]) type = "E"; - System.out.println("\t " + (i + 1) + "." + list[i]); - } - System.out.println(lineBreak); - } else if (response.matches("done ([0-9]|[1-9][0-9])")) { - int taskNo = Integer.parseInt(response.replaceAll("\\D", "")) - 1; - System.out.println(lineBreak); - System.out.println("\t Nice! I've marked this task as done:"); - list[taskNo] = list[taskNo].substring(0,4) + 'X' + list[taskNo].substring(5); - System.out.println("\t " + list[taskNo]); - System.out.println(lineBreak); - done[taskNo] = true; - } else if (response.matches("delete ([0-9]|[1-9][0-9])")) { - int taskNo = Integer.parseInt(response.replaceAll("\\D", "")) - 1; - System.out.println(lineBreak); - System.out.println("\t Noted. I've removed this task:"); - System.out.println("\t " + list[taskNo]); - System.out.println("\t Now you have " + (amount - 1) + " tasks in the list."); - System.out.println(lineBreak); - list[taskNo] = "deleted"; - } else if (response.matches("todo .+")) { - System.out.println(lineBreak); - System.out.println("\t Got it. I've added this task:"); - System.out.println("\t [T][ ] " + response.substring(5)); - System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); - System.out.println(lineBreak); - list[amount] = "[T][ ] " + response.substring(5); - // td[amount] = true; - amount++; - } else if (response.matches("deadline .+")) { - System.out.println(lineBreak); - System.out.println("\t Got it. I've added this task:"); - int pos = response.indexOf('/'); - list[amount] = "[D][ ] " - + response.substring(9, pos - 1) - + " (by: " + response.substring(response.indexOf('/') + 4) + ")"; - System.out.println("\t " + list[amount]); - System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); - System.out.println(lineBreak); - // deadline[amount] = true; - amount++; - } else if (response.matches("event .+")) { - System.out.println(lineBreak); - System.out.println("\t Got it. I've added this task:"); - int pos = response.indexOf('/'); - list[amount] = "[E][ ] " - + response.substring(6, pos - 1) - + " (at: " + response.substring(response.indexOf('/') + 4) + ")"; - System.out.println("\t " + list[amount]); - System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); - System.out.println(lineBreak); - // deadline[amount] = true; - amount++; - } else if (response.equals("todo")) { - System.out.println(lineBreak); - System.out.println("☹ OOPS!!! The description of a todo cannot be empty."); - System.out.println(lineBreak); - } else if (response.equals("deadline")) { - System.out.println(lineBreak); - System.out.println("☹ OOPS!!! The description of a deadline cannot be empty."); - System.out.println(lineBreak); - } else if (response.equals("event")) { - System.out.println(lineBreak); - System.out.println("☹ OOPS!!! The description of an event cannot be empty."); - System.out.println(lineBreak); - } else { - System.out.println(lineBreak); - System.out.println("☹ OOPS!!! I'm sorry, but I don't know what that means :-("); - System.out.println(lineBreak); - } - response = scanner.nextLine(); - } - System.out.println(lineBreak); - System.out.println("\t Bye! Talk again sometime!"); - System.out.println(lineBreak); - - scanner.close(); - } +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Scanner; + +public class Duke { + + private static void save(ArrayList tasks) throws IOException { + File f = new File("tasks.txt"); + System.out.print(f.createNewFile()); + FileWriter fw = new FileWriter("tasks.txt"); + for (String task : tasks) { + fw.write(task + System.lineSeparator()); + } + fw.close(); + } + + private static void printFileContents(String filePath) throws FileNotFoundException { + File f = new File(filePath); + Scanner s = new Scanner(f); + while (s.hasNext()) { + System.out.println(s.nextLine()); + } + s.close(); + } + + public static void main(String[] args) throws IOException { + + Scanner scanner = new Scanner(System.in); + + String logo = " _ _ \n" + + "| | _ _| | _____ \n" + + "| | | | | | |/ / _ \\\n" + + "| |___| |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + System.out.println("Hello from\n" + logo); + + ArrayList list = new ArrayList(); + int amount = 0; + + String lineBreak = "\t____________________________________________________________"; + System.out.println(lineBreak + + "\n\t Hello! I'm Luke, your slightly useful personal assistant!\n" + + "\t What can I do for you, my liege?\n" + + "\t Type 'list' to show previous inputs\n" + + "\t Type 'todo TASK' to indicate that TASK has to be done\n" + + "\t Type 'deadline TASK /by DATE/TIME' to indicate that TASK has to be done by DATE/TIME\n" + + "\t Type 'event TASK /at DATE/TIME PERIOD' to indicate that TASK occurs at DATE/TIME PERIOD\n" + + "\t Type 'done #' to indicate that task # has been done\n" + + "\t Type 'bye' to end\n" + + lineBreak); + + String response = scanner.nextLine(); + + while (!response.equals("bye")) { + if (response.equals("list")) { + System.out.println(lineBreak); + System.out.println("\t Here are the tasks in your list:"); + for (int i = 0; i < amount; i++) { + System.out.println("\t " + (i + 1) + "." + list.get(i)); + } + System.out.println(lineBreak); + } else if (response.matches("done ([0-9]|[1-9][0-9])")) { + int taskNo = Integer.parseInt(response.replaceAll("\\D", "")) - 1; + System.out.println(lineBreak); + System.out.println("\t Nice! I've marked this task as done:"); + list.set(taskNo, list.get(taskNo).substring(0,4) + "X" + list.get(taskNo).substring(5)); + System.out.println("\t " + list.get(taskNo)); + System.out.println(lineBreak); + save(list); + } else if (response.matches("delete ([0-9]|[1-9][0-9])")) { + int taskNo = Integer.parseInt(response.replaceAll("\\D", "")) - 1; + System.out.println(lineBreak); + System.out.println("\t Noted. I've removed this task:"); + System.out.println("\t " + list.get(taskNo)); + System.out.println("\t Now you have " + (amount - 1) + " tasks in the list."); + System.out.println(lineBreak); + list.set(taskNo, "deleted"); + save(list); + } else if (response.matches("todo .+")) { + System.out.println(lineBreak); + System.out.println("\t Got it. I've added this task:"); + System.out.println("\t [T][ ] " + response.substring(5)); + System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); + System.out.println(lineBreak); + list.add(amount, "[T][ ] " + response.substring(5)); + amount++; + save(list); + } else if (response.matches("deadline .+")) { + System.out.println(lineBreak); + System.out.println("\t Got it. I've added this task:"); + int pos = response.indexOf('/'); + list.add(amount, "[D][ ] " + + response.substring(9, pos - 1) + + " (by: " + response.substring(response.indexOf('/') + 4) + ")"); + System.out.println("\t " + list.get(amount)); + System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); + System.out.println(lineBreak); + amount++; + save(list); + } else if (response.matches("event .+")) { + System.out.println(lineBreak); + System.out.println("\t Got it. I've added this task:"); + int pos = response.indexOf('/'); + list.add(amount, "[E][ ] " + + response.substring(6, pos - 1) + + " (at: " + response.substring(response.indexOf('/') + 4) + ")"); + System.out.println("\t " + list.get(amount)); + System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); + System.out.println(lineBreak); + amount++; + save(list); + } else if (response.equals("todo")) { + System.out.println(lineBreak); + System.out.println("☹ OOPS!!! The description of a todo cannot be empty."); + System.out.println(lineBreak); + } else if (response.equals("deadline")) { + System.out.println(lineBreak); + System.out.println("☹ OOPS!!! The description of a deadline cannot be empty."); + System.out.println(lineBreak); + } else if (response.equals("event")) { + System.out.println(lineBreak); + System.out.println("☹ OOPS!!! The description of an event cannot be empty."); + System.out.println(lineBreak); + } else { + System.out.println(lineBreak); + System.out.println("☹ OOPS!!! I'm sorry, but I don't know what that means :-("); + System.out.println(lineBreak); + } + response = scanner.nextLine(); + } + System.out.println(lineBreak); + System.out.println("\t Bye! Talk again sometime!"); + System.out.println(lineBreak); + + scanner.close(); + } } \ No newline at end of file diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 3b08741022..7a4cb583fc 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,55 +1,55 @@ -Hello from - _ _ -| | _ _| | _____ -| | | | | | |/ / _ \ -| |___| |_| | < __/ -|____/ \__,_|_|\_\___| - - ____________________________________________________________ - Hello! I'm Luke, your slightly useful personal assistant! - What can I do for you, my liege? - Type 'list' to show previous inputs - Type 'todo TASK' to indicate that TASK has to be done - Type 'deadline TASK /by DATE/TIME' to indicate that TASK has to be done by DATE/TIME - Type 'event TASK /at DATE/TIME PERIOD' to indicate that TASK occurs at DATE/TIME PERIOD - Type 'done #' to indicate that task # has been done - Type 'bye' to end - ____________________________________________________________ - ____________________________________________________________ - Got it. I've added this task: - [T][ ] borrow book - Now you have 1 tasks in the list. - ____________________________________________________________ - ____________________________________________________________ - Got it. I've added this task: - [D][ ] return book (by: Sunday) - Now you have 2 tasks in the list. - ____________________________________________________________ - ____________________________________________________________ - Got it. I've added this task: - [E][ ] project meeting (at: Mon 2-4pm) - Now you have 3 tasks in the list. - ____________________________________________________________ - ____________________________________________________________ - Here are the tasks in your list: - 1.[T][ ] borrow book - 2.[D][ ] return book (by: Sunday) - 3.[E][ ] project meeting (at: Mon 2-4pm) - ____________________________________________________________ - ____________________________________________________________ - Nice! I've marked this task as done: - [D][X] return book (by: Sunday) - ____________________________________________________________ - ____________________________________________________________ - Nice! I've marked this task as done: - [E][X] project meeting (at: Mon 2-4pm) - ____________________________________________________________ - ____________________________________________________________ - Here are the tasks in your list: - 1.[T][ ] borrow book - 2.[D][X] return book (by: Sunday) - 3.[E][X] project meeting (at: Mon 2-4pm) - ____________________________________________________________ - ____________________________________________________________ - Bye! Talk again sometime! +Hello from + _ _ +| | _ _| | _____ +| | | | | | |/ / _ \ +| |___| |_| | < __/ +|____/ \__,_|_|\_\___| + + ____________________________________________________________ + Hello! I'm Luke, your slightly useful personal assistant! + What can I do for you, my liege? + Type 'list' to show previous inputs + Type 'todo TASK' to indicate that TASK has to be done + Type 'deadline TASK /by DATE/TIME' to indicate that TASK has to be done by DATE/TIME + Type 'event TASK /at DATE/TIME PERIOD' to indicate that TASK occurs at DATE/TIME PERIOD + Type 'done #' to indicate that task # has been done + Type 'bye' to end + ____________________________________________________________ + ____________________________________________________________ + Got it. I've added this task: + [T][ ] borrow book + Now you have 1 tasks in the list. + ____________________________________________________________ + ____________________________________________________________ + Got it. I've added this task: + [D][ ] return book (by: Sunday) + Now you have 2 tasks in the list. + ____________________________________________________________ + ____________________________________________________________ + Got it. I've added this task: + [E][ ] project meeting (at: Mon 2-4pm) + Now you have 3 tasks in the list. + ____________________________________________________________ + ____________________________________________________________ + Here are the tasks in your list: + 1.[T][ ] borrow book + 2.[D][ ] return book (by: Sunday) + 3.[E][ ] project meeting (at: Mon 2-4pm) + ____________________________________________________________ + ____________________________________________________________ + Nice! I've marked this task as done: + [D][X] return book (by: Sunday) + ____________________________________________________________ + ____________________________________________________________ + Nice! I've marked this task as done: + [E][X] project meeting (at: Mon 2-4pm) + ____________________________________________________________ + ____________________________________________________________ + Here are the tasks in your list: + 1.[T][ ] borrow book + 2.[D][X] return book (by: Sunday) + 3.[E][X] project meeting (at: Mon 2-4pm) + ____________________________________________________________ + ____________________________________________________________ + Bye! Talk again sometime! ____________________________________________________________ \ No newline at end of file diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 85f7a4729b..361a93c834 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1,8 +1,8 @@ -todo borrow book -deadline return book /by Sunday -event project meeting /at Mon 2-4pm -list -done 2 -done 3 -list -bye +todo borrow book +deadline return book /by Sunday +event project meeting /at Mon 2-4pm +list +done 2 +done 3 +list +bye diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index 97c1d9157a..918e1513c3 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -1,21 +1,21 @@ -@ECHO OFF - -REM create bin directory if it doesn't exist -if not exist ..\bin mkdir ..\bin - -REM delete output from previous run -if exist ACTUAL.TXT del ACTUAL.TXT - -REM compile the code into the bin folder -javac -cp ..\src\main\java -Xlint:none -d ..\bin ..\src\main\java\Duke.java -IF ERRORLEVEL 1 ( - echo ********** BUILD FAILURE ********** - exit /b 1 -) -REM no error here, errorlevel == 0 - -REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT -java -classpath ..\bin Duke < input.txt > ACTUAL.TXT - -REM compare the output to the expected output -FC ACTUAL.TXT EXPECTED.TXT +@ECHO OFF + +REM create bin directory if it doesn't exist +if not exist ..\bin mkdir ..\bin + +REM delete output from previous run +if exist ACTUAL.TXT del ACTUAL.TXT + +REM compile the code into the bin folder +javac -cp ..\src\main\java -Xlint:none -d ..\bin ..\src\main\java\Duke.java +IF ERRORLEVEL 1 ( + echo ********** BUILD FAILURE ********** + exit /b 1 +) +REM no error here, errorlevel == 0 + +REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT +java -classpath ..\bin Duke < input.txt > ACTUAL.TXT + +REM compare the output to the expected output +FC ACTUAL.TXT EXPECTED.TXT diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh index c9ec870033..cf8a36c1c2 100644 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -1,38 +1,38 @@ -#!/usr/bin/env bash - -# create bin directory if it doesn't exist -if [ ! -d "../bin" ] -then - mkdir ../bin -fi - -# delete output from previous run -if [ -e "./ACTUAL.TXT" ] -then - rm ACTUAL.TXT -fi - -# compile the code into the bin folder, terminates if error occurred -if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java -then - echo "********** BUILD FAILURE **********" - exit 1 -fi - -# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT -java -classpath ../bin Duke < input.txt > ACTUAL.TXT - -# convert to UNIX format -cp EXPECTED.TXT EXPECTED-UNIX.TXT -dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT - -# compare the output to the expected output -diff ACTUAL.TXT EXPECTED-UNIX.TXT -if [ $? -eq 0 ] -then - echo "Test result: PASSED" - exit 0 -else - echo "Test result: FAILED" - exit 1 +#!/usr/bin/env bash + +# create bin directory if it doesn't exist +if [ ! -d "../bin" ] +then + mkdir ../bin +fi + +# delete output from previous run +if [ -e "./ACTUAL.TXT" ] +then + rm ACTUAL.TXT +fi + +# compile the code into the bin folder, terminates if error occurred +if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java +then + echo "********** BUILD FAILURE **********" + exit 1 +fi + +# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT +java -classpath ../bin Duke < input.txt > ACTUAL.TXT + +# convert to UNIX format +cp EXPECTED.TXT EXPECTED-UNIX.TXT +dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT + +# compare the output to the expected output +diff ACTUAL.TXT EXPECTED-UNIX.TXT +if [ $? -eq 0 ] +then + echo "Test result: PASSED" + exit 0 +else + echo "Test result: FAILED" + exit 1 fi \ No newline at end of file From cf01927e7d58de9f23342e20a27c301c0c5aed4a Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 22:33:09 +0800 Subject: [PATCH 10/28] branch-Level-8 --- src/main/java/Dates.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/Dates.java diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java new file mode 100644 index 0000000000..38c156b890 --- /dev/null +++ b/src/main/java/Dates.java @@ -0,0 +1,15 @@ +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; + +public class Event { + + private Event event; + private LocalDate eventDate; + + public Event(String input) { + //create dates from strings + this.eventDate = LocalDate.parse(input); + this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + } +} \ No newline at end of file From d4758a7547841d7b4a64e0d85189269961ea537b Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 22:56:57 +0800 Subject: [PATCH 11/28] A-MoreOOP --- src/main/java/Dates.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 38c156b890..775f52d934 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,5 +11,6 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + } } \ No newline at end of file From 0e04a59204926d2e5c7db6ed33bb96a7f3eebfee Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 22:59:06 +0800 Subject: [PATCH 12/28] A-Packages --- src/main/java/Dates.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 775f52d934..38c156b890 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,6 +11,5 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); - } } \ No newline at end of file From 71bc4344f98a0bac3ebf8420625a2148da14283e Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 23:01:00 +0800 Subject: [PATCH 13/28] A-JUnit --- src/main/java/Dates.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 38c156b890..775f52d934 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,5 +11,6 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + } } \ No newline at end of file From 181c27185aa7c357e469c1e1d40771f97b6c6449 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 23:01:47 +0800 Subject: [PATCH 14/28] A-Jar --- src/main/java/Dates.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 775f52d934..38c156b890 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,6 +11,5 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); - } } \ No newline at end of file From 34e99fe051350b0d694c89e54244fe612351a79e Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 23:05:16 +0800 Subject: [PATCH 15/28] A-JavaDoc --- src/main/java/Dates.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 38c156b890..775f52d934 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,5 +11,6 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + } } \ No newline at end of file From 402584f336be97922df2efc7a2d9ea776c130b85 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 23:07:03 +0800 Subject: [PATCH 16/28] A-CodingStandard --- src/main/java/Dates.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 38c156b890..775f52d934 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,5 +11,6 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + } } \ No newline at end of file From 39ddf689f1c7ed5b2a085619f1cefd7ee17fe09a Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 23:08:21 +0800 Subject: [PATCH 17/28] Level-9 --- src/main/java/Dates.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 38c156b890..775f52d934 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,5 +11,6 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + } } \ No newline at end of file From 3ca7ec2f67040654f89d4ca09d24542bc6c38ca8 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 23:47:38 +0800 Subject: [PATCH 18/28] A-Gradle --- src/main/java/Dates.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 775f52d934..162823d1c6 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -10,7 +10,6 @@ public class Event { public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); - this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); - + this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); } } \ No newline at end of file From 335e18d9a0d332eb036289a050fd005c132ac4fa Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 23:49:48 +0800 Subject: [PATCH 19/28] Level-10 git commit -m Level-10 git commit -m Level-10 --- src/main/java/Dates.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 162823d1c6..f33c0a9634 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -10,6 +10,7 @@ public class Event { public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); - this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + } } \ No newline at end of file From 4d72ffc41a5f8dd1f75bb7ab8c03b86f22163435 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 3 Sep 2021 23:50:40 +0800 Subject: [PATCH 20/28] Level-10 --- src/main/java/Dates.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index f33c0a9634..38c156b890 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,6 +11,5 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); - } } \ No newline at end of file From 516232cff2e938d245ce4a9b565dd537f56d467f Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 10 Sep 2021 23:23:43 +0800 Subject: [PATCH 21/28] Update sample data Sample data has many blank lines. Blank lines are signs of messy code. Let's delete the blank lines. It is only way to get rid of the blank lines. This is an example for A-FullCommitMessage. --- src/main/java/Dates.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 38c156b890..775f52d934 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,5 +11,6 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + } } \ No newline at end of file From f2d95fa6769e3c3e7088e1227c92f37dd3896e3d Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 10 Sep 2021 23:35:17 +0800 Subject: [PATCH 22/28] A-Assertions --- src/main/java/Dates.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 775f52d934..38c156b890 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,6 +11,5 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); - } } \ No newline at end of file From 9c9f6916aedc422ce8c1f18d6850833954e569ff Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 10 Sep 2021 23:37:04 +0800 Subject: [PATCH 23/28] A-CodeQuality --- src/main/java/Dates.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java index 775f52d934..5a342335ff 100644 --- a/src/main/java/Dates.java +++ b/src/main/java/Dates.java @@ -11,6 +11,7 @@ public Event(String input) { //create dates from strings this.eventDate = LocalDate.parse(input); this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + } } \ No newline at end of file From 501f34108d84d12635984d0dd85f084bc57e2b1d Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Fri, 17 Sep 2021 22:54:53 +0800 Subject: [PATCH 24/28] Refactor duke --- config/checkstyle/suppressions.xml | 10 + src/main/java/Duke.java | 140 ------------ src/main/java/luke/DeadlineTest.java | 36 ++++ src/main/java/luke/Entry.java | 87 ++++++++ src/main/java/luke/EntryList.java | 216 +++++++++++++++++++ src/main/java/luke/Event.java | 70 ++++++ src/main/java/luke/EventTest.java | 36 ++++ src/main/java/luke/Launcher.java | 9 + src/main/java/luke/Luke.java | 274 ++++++++++++++++++++++++ src/main/java/luke/LukeException.java | 28 +++ src/main/java/luke/LukeTest.java | 14 ++ src/main/java/luke/Parser.java | 105 +++++++++ src/main/java/luke/Storage.java | 110 ++++++++++ src/main/java/luke/Todo.java | 44 ++++ src/main/java/luke/Ui.java | 203 ++++++++++++++++++ src/main/resources/images/LukeImage.jpg | Bin 0 -> 55449 bytes src/main/resources/images/UserImage.jpg | Bin 0 -> 58263 bytes 17 files changed, 1242 insertions(+), 140 deletions(-) create mode 100644 config/checkstyle/suppressions.xml delete mode 100644 src/main/java/Duke.java create mode 100644 src/main/java/luke/DeadlineTest.java create mode 100644 src/main/java/luke/Entry.java create mode 100644 src/main/java/luke/EntryList.java create mode 100644 src/main/java/luke/Event.java create mode 100644 src/main/java/luke/EventTest.java create mode 100644 src/main/java/luke/Launcher.java create mode 100644 src/main/java/luke/Luke.java create mode 100644 src/main/java/luke/LukeException.java create mode 100644 src/main/java/luke/LukeTest.java create mode 100644 src/main/java/luke/Parser.java create mode 100644 src/main/java/luke/Storage.java create mode 100644 src/main/java/luke/Todo.java create mode 100644 src/main/java/luke/Ui.java create mode 100644 src/main/resources/images/LukeImage.jpg create mode 100644 src/main/resources/images/UserImage.jpg diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml new file mode 100644 index 0000000000..42f14212c1 --- /dev/null +++ b/config/checkstyle/suppressions.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java deleted file mode 100644 index 5b8757b6b8..0000000000 --- a/src/main/java/Duke.java +++ /dev/null @@ -1,140 +0,0 @@ -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Scanner; - -public class Duke { - - private static void save(ArrayList tasks) throws IOException { - File f = new File("tasks.txt"); - System.out.print(f.createNewFile()); - FileWriter fw = new FileWriter("tasks.txt"); - for (String task : tasks) { - fw.write(task + System.lineSeparator()); - } - fw.close(); - } - - private static void printFileContents(String filePath) throws FileNotFoundException { - File f = new File(filePath); - Scanner s = new Scanner(f); - while (s.hasNext()) { - System.out.println(s.nextLine()); - } - s.close(); - } - - public static void main(String[] args) throws IOException { - - Scanner scanner = new Scanner(System.in); - - String logo = " _ _ \n" - + "| | _ _| | _____ \n" - + "| | | | | | |/ / _ \\\n" - + "| |___| |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - - ArrayList list = new ArrayList(); - int amount = 0; - - String lineBreak = "\t____________________________________________________________"; - System.out.println(lineBreak - + "\n\t Hello! I'm Luke, your slightly useful personal assistant!\n" - + "\t What can I do for you, my liege?\n" - + "\t Type 'list' to show previous inputs\n" - + "\t Type 'todo TASK' to indicate that TASK has to be done\n" - + "\t Type 'deadline TASK /by DATE/TIME' to indicate that TASK has to be done by DATE/TIME\n" - + "\t Type 'event TASK /at DATE/TIME PERIOD' to indicate that TASK occurs at DATE/TIME PERIOD\n" - + "\t Type 'done #' to indicate that task # has been done\n" - + "\t Type 'bye' to end\n" - + lineBreak); - - String response = scanner.nextLine(); - - while (!response.equals("bye")) { - if (response.equals("list")) { - System.out.println(lineBreak); - System.out.println("\t Here are the tasks in your list:"); - for (int i = 0; i < amount; i++) { - System.out.println("\t " + (i + 1) + "." + list.get(i)); - } - System.out.println(lineBreak); - } else if (response.matches("done ([0-9]|[1-9][0-9])")) { - int taskNo = Integer.parseInt(response.replaceAll("\\D", "")) - 1; - System.out.println(lineBreak); - System.out.println("\t Nice! I've marked this task as done:"); - list.set(taskNo, list.get(taskNo).substring(0,4) + "X" + list.get(taskNo).substring(5)); - System.out.println("\t " + list.get(taskNo)); - System.out.println(lineBreak); - save(list); - } else if (response.matches("delete ([0-9]|[1-9][0-9])")) { - int taskNo = Integer.parseInt(response.replaceAll("\\D", "")) - 1; - System.out.println(lineBreak); - System.out.println("\t Noted. I've removed this task:"); - System.out.println("\t " + list.get(taskNo)); - System.out.println("\t Now you have " + (amount - 1) + " tasks in the list."); - System.out.println(lineBreak); - list.set(taskNo, "deleted"); - save(list); - } else if (response.matches("todo .+")) { - System.out.println(lineBreak); - System.out.println("\t Got it. I've added this task:"); - System.out.println("\t [T][ ] " + response.substring(5)); - System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); - System.out.println(lineBreak); - list.add(amount, "[T][ ] " + response.substring(5)); - amount++; - save(list); - } else if (response.matches("deadline .+")) { - System.out.println(lineBreak); - System.out.println("\t Got it. I've added this task:"); - int pos = response.indexOf('/'); - list.add(amount, "[D][ ] " - + response.substring(9, pos - 1) - + " (by: " + response.substring(response.indexOf('/') + 4) + ")"); - System.out.println("\t " + list.get(amount)); - System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); - System.out.println(lineBreak); - amount++; - save(list); - } else if (response.matches("event .+")) { - System.out.println(lineBreak); - System.out.println("\t Got it. I've added this task:"); - int pos = response.indexOf('/'); - list.add(amount, "[E][ ] " - + response.substring(6, pos - 1) - + " (at: " + response.substring(response.indexOf('/') + 4) + ")"); - System.out.println("\t " + list.get(amount)); - System.out.println("\t Now you have " + (amount + 1) + " tasks in the list."); - System.out.println(lineBreak); - amount++; - save(list); - } else if (response.equals("todo")) { - System.out.println(lineBreak); - System.out.println("☹ OOPS!!! The description of a todo cannot be empty."); - System.out.println(lineBreak); - } else if (response.equals("deadline")) { - System.out.println(lineBreak); - System.out.println("☹ OOPS!!! The description of a deadline cannot be empty."); - System.out.println(lineBreak); - } else if (response.equals("event")) { - System.out.println(lineBreak); - System.out.println("☹ OOPS!!! The description of an event cannot be empty."); - System.out.println(lineBreak); - } else { - System.out.println(lineBreak); - System.out.println("☹ OOPS!!! I'm sorry, but I don't know what that means :-("); - System.out.println(lineBreak); - } - response = scanner.nextLine(); - } - System.out.println(lineBreak); - System.out.println("\t Bye! Talk again sometime!"); - System.out.println(lineBreak); - - scanner.close(); - } -} \ No newline at end of file diff --git a/src/main/java/luke/DeadlineTest.java b/src/main/java/luke/DeadlineTest.java new file mode 100644 index 0000000000..7bed50479e --- /dev/null +++ b/src/main/java/luke/DeadlineTest.java @@ -0,0 +1,36 @@ +package luke; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class DeadlineTest { + @Test + public void deadlineToStringTest() { + try { + Deadline deadline = new Deadline("testing-deadline", "2021-08-20"); + assertEquals("[D][ ] testing-deadline(by: Aug 20 2021)", deadline.toString()); + } catch (LukeException e) { + assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); + } + } + + @Test + public void deadlineSaveStringTest() { + try { + Deadline deadline = new Deadline("testing-deadline", "2021-08-20"); + assertEquals("D,0,testing-deadline,2021-08-20", deadline.saveString()); + } catch (LukeException e) { + assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); + } + } + + @Test + public void invalidDateTest() { + try { + Deadline deadline = new Deadline("testing-deadline", "20th Aug"); + } catch (LukeException e) { + assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/luke/Entry.java b/src/main/java/luke/Entry.java new file mode 100644 index 0000000000..00e6ee8384 --- /dev/null +++ b/src/main/java/luke/Entry.java @@ -0,0 +1,87 @@ +package luke; + +/** + * Abstract class that defines entry. + */ +public abstract class Entry { + private final String ENTRY; + + private boolean isDone; + + /** + * Constructor for Entry. + */ + Entry() { + this.ENTRY = ""; + this.isDone = false; + } + + /** + * Constructor for Entry with a value. + * + * @param value Entry value. + */ + Entry(String value) { + this.ENTRY = value; + this.isDone = false; + } + + /** + * Method to revert the isDone status of the Entry. + */ + public void revertDone() { + this.isDone = !this.isDone; + } + + + /** + * Method to set the isDone status to true of an Entry. + * + * @return Boolean if successful operation. + */ + public boolean setDone() { + if (this.isDone) { + return false; + } else { + this.isDone = true; + return true; + } + } + + /** + * Returns true if Entry is Empty. + * + * @return Boolean corresponding to Entry's length. + */ + public boolean isEmpty() { + return this.ENTRY.isEmpty() || this.ENTRY.isBlank(); + } + + /** + * Returns the string to be saved representing the Entry. + * + * @return String to represent entry in memory. + */ + public String saveString() { + String isDoneString = "0"; + if (this.isDone) { + isDoneString = "1"; + } + return "," + isDoneString + "," + this.ENTRY; + } + + public boolean contains(String keyword) { + return this.ENTRY.contains(keyword); + } + + /** + * Overrides Object's toString method to return a description of Entry. + * + * @return String to represent Entry. + */ + @Override + public String toString() { + char isDoneDisplay = this.isDone ? 'X' : ' '; + return ("[" + isDoneDisplay + "] " + this.ENTRY); + } +} \ No newline at end of file diff --git a/src/main/java/luke/EntryList.java b/src/main/java/luke/EntryList.java new file mode 100644 index 0000000000..6638eea5f2 --- /dev/null +++ b/src/main/java/luke/EntryList.java @@ -0,0 +1,216 @@ +package luke; + +import java.util.ArrayList; + +/** + * Class that implements methods to store an Arraylist of Entries + */ +public class EntryList extends ArrayList { + + private int numberOfEntries; + + /** + * Constructor for EntryList. + */ + EntryList() { + super(); + this.numberOfEntries = super.size(); + } + + /** + * Prints all the Entries stored currently. + * + * @param ui The UI object for the current Duke execution. + * @throws LukeException Exception if no entries are to be displayed. + */ + public void displayEntries(Ui ui) throws LukeException { + if (numberOfEntries > 0) { + for (int i = 0; i < numberOfEntries; i++) { + ui.printEntry(super.get(i), i + 1); + } + ui.endCommand(); + } else { + throw new LukeException("No entries to display!"); + } + } + + /** + * Prints all the Entries stored currently. + * + * @throws LukeException Exception if no entries are to be displayed. + */ + public String getEntries() throws LukeException { + StringBuilder entryList = new StringBuilder(); + if (numberOfEntries > 0) { + for (int i = 0; i < numberOfEntries; i++) { + entryList.append(super.get(i)).append("\n"); + } + return entryList.toString(); + } else { + throw new LukeException("No entries to display!"); + } + } + + public void findEntry(String keyword, Ui ui) { + int len = super.size(); + int count = 1; + ui.listMatches(); + for (int i = 0; i < len; i++) { + Entry currentEntry = super.get(i); + if (currentEntry.contains(keyword)) { + if (count == 1) { + ui.foundMatches(); + } + ui.printEntry(currentEntry, count++); + } + } + ui.endCommand(); + } + + /** + * Finds entries with given keyword. + * Searches for partial entries as well. + * + * @param keyword to search for. + * @param ui Ui to return info string. + * @return String of found entries. + */ + public String getFindEntry(String keyword, Ui ui) { + int len = super.size(); + int count = 1; + StringBuilder output = new StringBuilder(ui.getListMatches()); + for (int i = 0; i < len; i++) { + Entry currentEntry = super.get(i); + if (currentEntry.contains(keyword)) { + if (count == 1) { + output.append(ui.getFoundMatches()); + } + output.append(ui.getPrintEntry(currentEntry, count++)); + } + } + return output.toString(); + } + + /** + * Marks a given entry number as done. + * + * @param entryNumber The number of the entry to be marked. + * @throws LukeException Error thrown when no entry exists for the given entryNumber. + */ + public void markEntryAsDone(int entryNumber) throws LukeException { + if (entryNumber > 0 && entryNumber <= numberOfEntries) { + if (super.get(entryNumber - 1).setDone()) { + System.out.println("Nice! I've marked this entry as done:"); + System.out.println("\t" + super.get(entryNumber - 1)); + } else { + System.out.println("Entry is already marked as done!"); + } + } else { + throw new LukeException("There's no Entry corresponding to that Number!"); + } + } + + /** + * Marks a given entry number as done. + * + * @param entryNumber The number of the entry to be marked. + * @return String for marked entry. + * @throws LukeException Error thrown when no entry exists for the given entryNumber. + */ + public String getEntryAsDone(int entryNumber) throws LukeException { + StringBuilder output = new StringBuilder(); + if (entryNumber > 0 && entryNumber <= numberOfEntries) { + if (super.get(entryNumber - 1).setDone()) { + output.append("Nice! I've marked this entry as done:"); + output.append("\t").append(super.get(entryNumber - 1)); + } else { + output.append("Entry is already marked as done!"); + } + return output.toString(); + } else { + throw new LukeException("There's no Entry corresponding to that Number!"); + } + } + + /** + * Adds given Entry to the List when adding from memory. + * + * @param entry Entry to be added. + */ + public void addEntry(Entry entry) { + super.add(numberOfEntries++, entry); + } + + /** + * Adds given Entry to the List. + * Prints Success Message if Successful. + * + * @param entry The Entry to be added. + * @param command The command corresponding to the Entry. + * @param ui UI object to print Entry if added. + * @throws LukeException Error thrown if Entry is empty. + */ + public void addEntry(Entry entry, String command, Ui ui) throws LukeException { + if (!entry.isEmpty()){ + super.add(numberOfEntries++, entry); + ui.addEntry(entry, numberOfEntries); + } else { + throw new LukeException("The " + command + " description can't be empty!"); + } + } + + /** + * Adds given Entry to the List. + * Prints Success Message if Successful. + * + * @param entry The Entry to be added. + * @param command The command corresponding to the Entry. + * @return String to show added Entry. + * @throws LukeException Error thrown if Entry is empty. + */ + public String getAddEntry(Entry entry, String command, Ui ui) throws LukeException { + StringBuilder output = new StringBuilder(); + if (!entry.isEmpty()){ + super.add(numberOfEntries++, entry); + output.append(ui.getAddEntry(entry, numberOfEntries)); + } else { + throw new LukeException("The " + command + " description can't be empty!"); + } + return output.toString(); + } + + /** + * Deletes entry by index. + * + * @param index Index of Entry to be deleted. + * @param ui UI Object to print deleted Entry message. + * @throws LukeException Error thrown if no Entry corresponds to the index. + */ + public void deleteEntry(int index, Ui ui) throws LukeException { + if (super.isEmpty() || index < 1 || index > numberOfEntries) { + throw new LukeException("Luke can't find anything to delete!"); + } else { + Entry deletedEntry = super.remove(index - 1); + numberOfEntries--; + ui.showDeletedEntry(deletedEntry); + } + } + + /** + * Deletes entry by index. + * + * @param index Index of Entry to be deleted. + * @param ui UI Object to print deleted Entry message. + * @return String to show deleted entry. + * @throws LukeException Error thrown if no Entry corresponds to the index. + */ + public String getDeleteEntry(int index, Ui ui) throws LukeException { + if (super.isEmpty() || index < 1 || index > numberOfEntries) { + throw new LukeException("Duke can't find anything to delete!"); + } else { + Entry deletedEntry = super.remove(index - 1); + numberOfEntries--; + return ui.getDeletedEntry(deletedEntry); + } + } +} \ No newline at end of file diff --git a/src/main/java/luke/Event.java b/src/main/java/luke/Event.java new file mode 100644 index 0000000000..2b4b83a804 --- /dev/null +++ b/src/main/java/luke/Event.java @@ -0,0 +1,70 @@ +package luke; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +/** + * Class that inherits from Entry to encapsulate Events. + */ +public class Event extends Entry{ + + private LocalDate event; + + /** + * Constructor for Event. + */ + Event() { + super(); + this.event = LocalDate.now(); + } + + /** + * Constructor for Event. + * + * @param task Entry Task to be saved. + * @param event Event details. + * @throws LukeException Error thrown if event format is incorrect. + */ + Event(String task, String event) throws LukeException { + super(task); + try { + this.event = LocalDate.parse(event); + } catch (DateTimeParseException e) { + this.event = LocalDate.now(); + throw new LukeException("Sorry I can't read that! Enter dates in YYYY-MM-DD format"); + } + } + + /** + * Overrides Object's toString method. + * + * @return String representing Event. + */ + @Override + public String toString() { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy"); + return "[E]" + super.toString() + "(at: " + this.event.format(formatter) + ")"; + } + + /** + * Overrides Entry's saveString method. + * Returns string to be saved representing the Event. + * + * @return String to be saved representing the Event. + */ + @Override + public String saveString() { + return "E" + super.saveString() + "," + this.event; + } + + /** + * Returns true if Event is Empty. + * + * @return Boolean corresponding to Event's length. + */ + @Override + public boolean isEmpty() { + return super.isEmpty() || !event.isAfter(LocalDate.now()); + } +} \ No newline at end of file diff --git a/src/main/java/luke/EventTest.java b/src/main/java/luke/EventTest.java new file mode 100644 index 0000000000..8c600b2776 --- /dev/null +++ b/src/main/java/luke/EventTest.java @@ -0,0 +1,36 @@ +package luke; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class EventTest { + @Test + public void eventToStringTest() { + try { + Event event = new Event("testing-event", "2021-08-20"); + assertEquals("[E][ ] testing-event(at: Aug 20 2021)", event.toString()); + } catch (LukeException e) { + assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); + } + } + + @Test + public void eventSaveStringTest() { + try { + Event event = new Event("testing-event", "2021-08-20"); + assertEquals("E,0,testing-event,2021-08-20", event.saveString()); + } catch (LukeException e) { + assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); + } + } + + @Test + public void invalidDateTest() { + try { + Event event = new Event("testing-event", "20 Aug"); + } catch (LukeException e) { + assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/luke/Launcher.java b/src/main/java/luke/Launcher.java new file mode 100644 index 0000000000..af1af67312 --- /dev/null +++ b/src/main/java/luke/Launcher.java @@ -0,0 +1,9 @@ +package luke; + +import javafx.application.Application; + +public class Launcher { + public static void main(String[] args) { + Application.launch(Luke.class, args); + } +} \ No newline at end of file diff --git a/src/main/java/luke/Luke.java b/src/main/java/luke/Luke.java new file mode 100644 index 0000000000..b5e982c04a --- /dev/null +++ b/src/main/java/luke/Luke.java @@ -0,0 +1,274 @@ +package luke; + +import java.util.ArrayList; +import java.util.Objects; +import java.util.Scanner; +import java.util.List; + +import javafx.application.Application; +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.HBox; +import javafx.scene.layout.Region; +import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.stage.Stage; + +/** + * Class to encapsulate Duke Chatbot. + */ +public class Luke extends Application { + + private final Ui lukeUi; + private final Parser lukeParser; + private final Storage lukeStorage; + private EntryList entries; + + private final Image USER = new Image(Objects.requireNonNull(this.getClass().getResourceAsStream("/images/UserImage.jpg"))); + private final Image LUKE = new Image(Objects.requireNonNull(this.getClass().getResourceAsStream("/images/LukeImage.jpg"))); + + public static final String TERMINATION_COMMAND = "bye"; + public static final String LIST_ENTRIES_COMMAND = "list"; + public static final String MARK_ENTRY_DONE_COMMAND = "done"; + public static final String DELETE_ENTRY_COMMAND = "delete"; + public static final String TODO_COMMAND = "todo"; + public static final String EVENT_COMMAND = "event"; + public static final String DEADLINE_COMMAND = "deadline"; + public static final String FIND_COMMAND = "find"; + public static final String HELP_COMMAND = "help"; + public static final List commands = + List.of(TERMINATION_COMMAND, LIST_ENTRIES_COMMAND, + MARK_ENTRY_DONE_COMMAND, DELETE_ENTRY_COMMAND, + TODO_COMMAND, EVENT_COMMAND, DEADLINE_COMMAND, + FIND_COMMAND, HELP_COMMAND); + + /** + * Constructor for Luke Chatbot. + */ + + public Luke() { + this.lukeUi = new Ui(); + this.lukeParser = new Parser(); + this.lukeStorage = new Storage(); + try { + this.entries = this.lukeStorage.readData(); + } catch (LukeException e) { + this.lukeUi.handleLoadingError(e); + this.entries = new EntryList(); + } + } + + @Override + public void start(Stage stage) { + VBox lukeContainer = new VBox(); + TextField dukeInput = new TextField(); + ScrollPane scrollPane = configureScrollPane(lukeContainer); + Button sendButton = configureSendButton(lukeContainer, lukeInput, stage); + Label sideLabel = configureSideLabel(); + HBox topRow = configureTopRow(scrollPane, sideLabel); + AnchorPane container = configureAnchorPane(scrollPane, sendButton, lukeInput, topRow); + Scene scene = new Scene(container); + configureLukeContainerAndInput(lukeContainer, lukeInput, scrollPane, stage); + configureStage(scene, stage); + stage.show(); + } + + private void configureStage(Scene scene, Stage stage) { + stage.setTitle("Luke"); + stage.setResizable(false); + stage.setMinHeight(500.0); + stage.setMinWidth(700.0); + stage.setScene(scene); + } + + private Button configureSendButton(VBox lukeContainer, TextField lukeInput, Stage stage) { + Button sendButton = new Button(); + sendButton.setPrefWidth(200.0); + sendButton.setOnMouseClicked((event) -> { + handleUserInput(lukeContainer, lukeInput, stage); + }); + return sendButton; + } + + private AnchorPane configureAnchorPane(ScrollPane scrollPane, Button sendButton, TextField lukeInput, HBox topRow) { + AnchorPane anchor = new AnchorPane(); + AnchorPane.setTopAnchor(scrollPane, 1.0); + AnchorPane.setBottomAnchor(sendButton, 1.0); + AnchorPane.setRightAnchor(sendButton, 1.0); + AnchorPane.setLeftAnchor(lukeInput , 1.0); + AnchorPane.setBottomAnchor(lukeInput, 1.0); + anchor.getChildren().addAll(topRow, lukeInput, sendButton); + anchor.setPrefSize(700.0, 500.0); + anchor.setStyle("-fx-background-color: #13223b"); + return anchor; + } + + private void configureLukeContainerAndLukeInput( + VBox lukeContainer, TextField lukeInput, ScrollPane scrollPane, Stage stage) { + lukeContainer.setPrefHeight(Region.USE_COMPUTED_SIZE); + lukeContainer.heightProperty().addListener((observable -> scrollPane.setVvalue(1.0))); + + lukeInput.setPrefWidth(496.0); + lukeInput.setOnAction((event) -> { + handleUserInput(lukeContainer, lukeInput, stage); + }); + } + + /** + * 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(VBox dialogContainer, TextField userInput, Stage stage) { + Label userText = new Label(userInput.getText()); + Label lukeText = new Label(getResponse(userInput.getText(), stage)); + dialogContainer.getChildren().addAll( + DialogBox.getUserDialog(userText, new ImageView(USER)).padDialog(10), + DialogBox.getLukeDialog(dukeText, new ImageView(LUKE)).padDialog(10) + ); + userInput.clear(); + } + + /** + * Function to get response from Duke. + */ + private String getResponse(String input, Stage stage) { + if (input.equals(TERMINATION_COMMAND)) { + stage.close(); + return ""; + } else { + return run(input); + } + } + + private HBox configureTopRow(ScrollPane scrollPane, Label sideLabel) { + HBox topRow = new HBox(); + topRow.getChildren().addAll(scrollPane, sideLabel); + return topRow; + } + + private ScrollPane configureScrollPane(VBox lukeContainer) { + ScrollPane scrollPane = new ScrollPane(); + scrollPane.setContent(lukeContainer); + scrollPane.setPrefSize(500.0, 473.3); + scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); + scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS); + scrollPane.setVvalue(1.0); + scrollPane.setFitToWidth(true); + return scrollPane; + } + + private Label configureSideLabel() { + Label sideLabel = new Label("LUKE"); + sideLabel.setTextFill(Color.color(1,1,1)); + sideLabel.setFont(new Font("Arial", 45)); + sideLabel.setStyle("-fx-start-margin: 100"); + return sideLabel; + } + + /** + * Creates a label with the specified text and adds it to the dialog container. + * @param text String containing text to add + * @return a label with the specified text that has word wrap enabled. + */ + private Label getDialogLabel(String text) { + // You will need to import `javafx.scene.control.Label`. + Label textToAdd = new Label(text); + textToAdd.setWrapText(true); + + return textToAdd; + } + + /** + * Method containing Logic for processed Input. + * + * @param parsedTerms ArrayList containing the command, entry and timing (in that order). + * @throws LukeException If ProcessedInput is invalid/incoherent. + */ + private String processInput(ArrayList parsedTerms) throws LukeException { + if (parsedTerms.size() < 3) { + throw new LukeException("Luke Cannot Understand Your Entry!"); + } + String command = parsedTerms.get(0); + String entry = parsedTerms.get(1); + String timing = parsedTerms.get(2); + String output = ""; + + //Process Command + switch(command) { + case LIST_ENTRIES_COMMAND: + output = entries.getEntries(); + break; + + case MARK_ENTRY_DONE_COMMAND: + output = entries.getEntryAsDone(Integer.parseInt(entry)); + break; + + case TODO_COMMAND: + output = entries.getAddEntry(new Todo(entry), command, this.lukeUi); + break; + + case EVENT_COMMAND: + output = entries.getAddEntry(new Event(entry, timing), command, this.lukeUi); + break; + + case DEADLINE_COMMAND: + output = entries.getAddEntry(new Deadline(entry, timing), command, this.lukeUi); + break; + + case DELETE_ENTRY_COMMAND: + output = entries.getDeleteEntry(Integer.parseInt(entry), this.lukeUi); + break; + + case FIND_COMMAND: + output = entries.getFindEntry(entry, this.lukeUi); + break; + + case HELP_COMMAND: + output = this.lukeUi.getCommands(); + break; + + default: + throw new LukeException("Sorry! Luke can't understand what that means"); + } + return output; + } + + + public String run(String input) { + String output = ""; + if (input.equals("bye")) { + return this.lukeUi.getGoodByeUser(); + } + try { + ArrayList parsedTerms = this.lukeParser.parseInput(input); + output = this.processInput(parsedTerms); + this.lukeStorage.saveEntries(this.entries); + } catch (LukeException e) { + output = this.lukeUi.getParsingError(e); + } catch (AssertionError e) { + output = this.lukeUi.getAssertingError(e); + } + return output; + } + + /** + * Overrides the Object's toString method. + * + * @return String description of Luke. + */ + @Override + public String toString() { + return "Hello! I'm Luke, your slightly useful personal assistant!\n" + + "I can help you remember tasks and other things :D"; + } +} + + diff --git a/src/main/java/luke/LukeException.java b/src/main/java/luke/LukeException.java new file mode 100644 index 0000000000..8b59677267 --- /dev/null +++ b/src/main/java/luke/LukeException.java @@ -0,0 +1,28 @@ +package luke; + +public class LukeException extends Exception { + + /** + * Constructor for LukeException. + */ + LukeException() { + super(); + } + + /** + * Constructor for LukeException. + */ + LukeException(String argument) { + super(argument); + } + + /** + * Overrides Object's toString method. + * + * @return String representing Exception. + */ + @Override + public String toString() { + return super.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/luke/LukeTest.java b/src/main/java/luke/LukeTest.java new file mode 100644 index 0000000000..bf4b8217c8 --- /dev/null +++ b/src/main/java/luke/LukeTest.java @@ -0,0 +1,14 @@ +package luke; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class LukeTest { + @Test + public void lukeTest() { + Luke luke = new Duke(); + assertEquals("Hello! I'm Luke, your slightly useful personal assistant!\n" + + "I can help you remember tasks and other things :D", luke.toString()); + } +} \ No newline at end of file diff --git a/src/main/java/luke/Parser.java b/src/main/java/luke/Parser.java new file mode 100644 index 0000000000..0d38f629b8 --- /dev/null +++ b/src/main/java/luke/Parser.java @@ -0,0 +1,105 @@ +package luke; + +import java.util.ArrayList; +import java.util.Arrays; + +/** + * Class that implements method to parse user inputs. + */ +public class Parser { + + /** + * Constructor for Parser. + */ + Parser() {} + + /** + * Returns parsed input in an Arraylist. + * + * @param input String input from user. + * @return ArrayList of command, entry, timing (if present). + * @throws LukeException Error is thrown if Command is invalid. + */ + public ArrayList parseInput(String input) throws LukeException, AssertionError { + ArrayList terms = new ArrayList<>(); + this.parseString(input, terms); + String command = ""; + if (terms.isEmpty()) { + throw new LukeException("Luke can't find any commands :(("); + } else { + command = terms.remove(0); + } + assert isValidCommand(command) : "Invalid Command! Luke can't understand what you mean :(("; + this.parseEntry(terms); + String entry = terms.isEmpty() ? "" : terms.remove(0); + String timing = terms.isEmpty() ? "" : this.parseTiming(terms); + return new ArrayList<>(Arrays.asList(command, entry, timing)); + } + + private boolean isValidCommand(String command) { + boolean isValid = false; + for (String knownCommand : Luke.commands) { + if (knownCommand.equals(command)) { + isValid = true; + break; + } + } + return isValid; + } + + private void parseString(String input, ArrayList terms) throws AssertionError { + // Function to store all terms in input as separate Strings (separated by space in the input) + int length = input.length(); + assert length >= 1 : "Invalid String Input"; + StringBuilder currentWord = new StringBuilder(); + for (int i = 0; i < length; i++) { + char currentChar = input.charAt(i); + if (currentChar == ' ') { + terms.add(currentWord.toString()); + currentWord.setLength(0); + } else { + currentWord.append(currentChar); + } + } + terms.add(currentWord.toString()); + } + + private String parseTiming(ArrayList terms) { + if (terms.get(0).startsWith("/")) { + terms.remove(0); + StringBuilder timing = new StringBuilder(); + int len = terms.size(); + for (int i = 0; i < len; i++) { + if (i != len - 1){ + timing.append(terms.get(i)).append(" "); + } else { + timing.append(terms.get(i)); + } + } + return timing.toString(); + } else { + return ""; + } + } + + private void parseEntry(ArrayList terms) { + boolean isTermsNotEmpty = !terms.isEmpty(); + if (isTermsNotEmpty) { + StringBuilder entry = new StringBuilder(); + // Combine All Strings Until End of List or '/' character is found + ArrayList termsCopy = new ArrayList<>(terms); + for (String term : termsCopy) { + if (term.startsWith("/")) { + String entryDesc = entry.toString(); + terms.add(0, entryDesc.substring(0, entryDesc.length()-1)); + return; + } else { + entry.append(term).append(' '); + terms.remove(0); + } + } + String entryDesc = entry.toString(); + terms.add(0, entryDesc.substring(0, entryDesc.length()-1)); + } + } +} \ No newline at end of file diff --git a/src/main/java/luke/Storage.java b/src/main/java/luke/Storage.java new file mode 100644 index 0000000000..e7544deeaa --- /dev/null +++ b/src/main/java/luke/Storage.java @@ -0,0 +1,110 @@ +package luke; + +import java.io.BufferedWriter; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Scanner; + +/** + * Class that implements methods to store Entries. + */ +public class Storage { + + private final String PROJECT_ROOT = System.getProperty("user.dir"); + private final Path DATA_DIRECTORY_PATH = Paths.get(PROJECT_ROOT,"data"); + + private Path dataPath; + private File lukeData; + + /** + * Constructor for Storage. + */ + Storage() { + this.dataPath = DATA_DIRECTORY_PATH.resolve("duke.txt"); + this.lukeData = new File(dataPath.toString()); + } + + /** + * Saves all Entries from entries into memory. + * + * @param entries EntryList of all entries to be saved. + * @throws LukeException Error thrown if data file is corrupted/missing. + */ + public void saveEntries(EntryList entries) throws LukeException { + Path dataPath = DATA_DIRECTORY_PATH.resolve("luke.txt"); + File lukeData = new File(dataPath.toString()); + try { + FileWriter fw = new FileWriter(lukeData); + BufferedWriter lukeWriter = new BufferedWriter(fw); + for (Entry entry : entries){ + String nextEntry = entry.saveString(); + lukeWriter.write(nextEntry); + lukeWriter.write("\n"); + } + lukeWriter.close(); + fw.close(); + } catch (IOException e) { + throw new LukeException("Luke's data file is corrupted/missing! Can't be saved"); + } + } + + /** + * Returns EntryList with data from memory. + * + * @return EntryList containing all data from memory. + * @throws LukeException Error thrown if file is missing/corrupted. + */ + public EntryList readData() throws LukeException { + EntryList entries = new EntryList(); + try { + return addEntriesFromFile(entries); + } catch (FileNotFoundException e) { + try { + if (!(lukeData.createNewFile())) { + throw new LukeException("Uh-Oh! Your data can't be stored :/"); + } else { + return new EntryList(); + } + } catch (IOException err) { + throw new LukeException("Uh-Oh! Your data can't be stored :/"); + } + } + } + + private EntryList addEntriesFromFile(EntryList entries) throws LukeException, FileNotFoundException { + Scanner fileScanner = new Scanner(lukeData).useDelimiter("[,\n]"); + while (fileScanner.hasNext()) { + String entryType = fileScanner.next(); + boolean isDone = Integer.parseInt(fileScanner.next()) == 1; + String entryData = fileScanner.next(); + Entry nextEntry = new Todo(""); + boolean hasNextEntry = true; + switch (entryType) { + case "T": + nextEntry = new Todo(entryData); + break; + case "D": + nextEntry = new Deadline(entryData, fileScanner.next()); //fileScanner.next() will contain timing + break; + case "E": + nextEntry = new Event(entryData, fileScanner.next()); //fileScanner.next() will contain timing + break; + default: + //Corrupted Entry Case + hasNextEntry = false; + break; + } + if (hasNextEntry) { + if (isDone) { + nextEntry.setDone(); + } + entries.addEntry(nextEntry); + } + } + return entries; + } +} \ No newline at end of file diff --git a/src/main/java/luke/Todo.java b/src/main/java/luke/Todo.java new file mode 100644 index 0000000000..14128e1d08 --- /dev/null +++ b/src/main/java/luke/Todo.java @@ -0,0 +1,44 @@ +package luke; + +/** + * Class that inherits from Entry to encapsulate Todos. + */ +public class Todo extends Entry { + + /** + * Constructor for Todo. + */ + Todo() { + super(); + } + + /** + * Constructor for Todo. + * + * @param task The String that will be stored as a Todo. + */ + Todo(String task) { + super(task); + } + + /** + * Overrides Entry's toString method. + * + * @return String representation of Todo. + */ + @Override + public String toString() { + return "[T]" + super.toString(); + } + + /** + * Overrides Entry's saveString method. + * Returns string to be saved representing the Todo. + * + * @return String to be saved representing the Todo. + */ + @Override + public String saveString() { + return "T" + super.saveString(); + } +} \ No newline at end of file diff --git a/src/main/java/luke/Ui.java b/src/main/java/luke/Ui.java new file mode 100644 index 0000000000..ce7f3ca806 --- /dev/null +++ b/src/main/java/luke/Ui.java @@ -0,0 +1,203 @@ +package luke; + +import java.util.Objects; + +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.layout.AnchorPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.Scene; +import javafx.stage.Stage; + +/** + * Class that implements methods to present Luke. + */ +public class Ui { + + private final Image USER = new Image(Objects.requireNonNull(this.getClass().getResourceAsStream("/images/UserImage.jpg"))); + private final Image LUKE = new Image(Objects.requireNonNull(this.getClass().getResourceAsStream("/images/LukeImage.jpg"))); + + /** + * Constructor to create a UI object. + */ + Ui() { + } + + private final static String LOGO = " _ _ \n" + + "| | _ _| | _____ \n" + + "| | | | | | |/ / _ \\\n" + + "| |___| |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + + private final static String HORIZONTAL_DIVIDE = + "___________________________________________________________________"; + + /** + * Prints out a welcome message. + */ + public void welcomeUser() { + System.out.println("Hello from\n" + LOGO); + System.out.println("I'm Luke, your slightly useful personal assistant!" + + "What can Luke do for you today?"); + System.out.println(HORIZONTAL_DIVIDE); + } + + /** + * Prints out the added entry. + * + * @param entry THe newly-added entry. + * @param id The #id of the newly-added entry. + */ + public void addEntry(Entry entry, int id) { + System.out.println("I've added this entry to your list!"); + this.printEntry(entry, id); + System.out.println(HORIZONTAL_DIVIDE); + } + + /** + * Prints out the added entry. + * + * @param entry THe newly-added entry. + * @param id The #id of the newly-added entry. + */ + public String getAddEntry(Entry entry, int id) { + return "I've added this entry to your list!" + + this.getPrintEntry(entry, id); + } + + /** + * Prints out a horizontal line at the end of some operation. + */ + public void endCommand() { + System.out.println(HORIZONTAL_DIVIDE); + } + + public void listMatches() { + System.out.println("Looking for matching tasks in your list..."); + } + + public String getListMatches() { + return "Looking for matching tasks in your list..."; + } + + public void foundMatches() { + System.out.println("Here are the matching tasks in your list: "); + } + + public String getFoundMatches() { + return "Here are the matching tasks in your list: "; + } + + /** + * Prints out given entry. + * + * @param entry Entry to be printed. + * @param id ID of entry to be printed. + */ + public void printEntry(Entry entry, int id) { + System.out.println("\t" + id + "." + entry); + } + + /** + * Returns given entry. + * + * @param entry Entry to be printed. + * @param id ID of entry to be printed. + * @return String for given entry. + */ + public String getPrintEntry(Entry entry, int id) { + return "\t" + id + "." + entry; + } + + /** + * Prints out farewell message. + */ + public void printGoodByeUser() { + System.out.println("Bye! Hope to see you again soon :D"); + System.out.println(HORIZONTAL_DIVIDE); + } + + /** + * Prints out farewell message. + * + * @return String to say farewell to USER. + */ + public String getGoodByeUser() { + return "Bye! Hope to see you again soon :D"; + } + + /** + * Prints out the Error Message received when Parsing. + * + * @param parsingError Error encountered while parsing input. + */ + public void handleParsingError(LukeException parsingError) { + System.out.println(parsingError.getMessage()); + System.out.println(HORIZONTAL_DIVIDE); + } + + /** + * Prints out the Error Message received when Parsing. + * + * @param parsingError Error encountered while parsing input. + */ + public String getParsingError(LukeException parsingError) { + return parsingError.getMessage(); + } + + /** + * Prints out the Error Message received in Assertions when Parsing. + * + * @param assertError Error encountered while parsing input. + */ + public String getAssertingError(AssertionError assertError) { + return assertError.getMessage(); + } + + /** + * Returns all the commands in one large String. + * + * @return String containing all commands Duke uses. + */ + public String getCommands() { + StringBuilder helpPage = new StringBuilder("These are the available commands:\n"); + for (String command : Luke.commands) { + helpPage.append(command).append("\n"); + } + return helpPage.toString(); + } + + + /** + * Prints out the Error Message received when loading data from memory. + * + * @param loadingError Error encountered while loading data from memory. + */ + public void handleLoadingError(LukeException loadingError) { + System.out.println(loadingError.getMessage()); + System.out.println(HORIZONTAL_DIVIDE); + } + + /** + * Prints out entry just after deletion. + * + * @param deletedEntry Entry that has just been deleted. + */ + public void showDeletedEntry(Entry deletedEntry) { + System.out.println("Removed entry\n" + deletedEntry); + System.out.println(HORIZONTAL_DIVIDE); + } + + /** + * Prints out entry just after deletion. + * + * @param deletedEntry Entry that has just been deleted. + */ + public String getDeletedEntry(Entry deletedEntry) { + return "Removed entry\n" + deletedEntry; + } +} \ No newline at end of file diff --git a/src/main/resources/images/LukeImage.jpg b/src/main/resources/images/LukeImage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18b37c0b2b342dc210c96d9879276ddbc53f4d61 GIT binary patch literal 55449 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
L(YTq{kYk0^%nM8gT|?j#PPDL99o| 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 F{{dFTRvrKV literal 0 HcmV?d00001 diff --git a/src/main/resources/images/UserImage.jpg b/src/main/resources/images/UserImage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d5c15ada7ec8a857b1943ff10f31aa7f3d89b0d GIT binary patch literal 58263 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 literal 0 HcmV?d00001 From e19cd3e1b31a5893ee5afcbb89400eb4a2ec2fde Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Mon, 20 Sep 2021 23:52:29 +0800 Subject: [PATCH 25/28] import junit dependencies and improve code quality --- .project | 34 ++ .settings/org.eclipse.buildship.core.prefs | 13 + build.gradle | 22 +- config/checkstyle/checkstyle.xml | 398 +++++++++++++++++++++ data/duke.txt | 0 data/luke.txt | 1 + docs/README.md | 4 + src/main/java/Dates.java | 16 - src/main/java/luke/Deadline.java | 71 ++++ src/main/java/luke/DeadlineTest.java | 13 +- src/main/java/luke/DialogBox.java | 52 +++ src/main/java/luke/Event.java | 2 +- src/main/java/luke/EventTest.java | 13 +- src/main/java/luke/Luke.java | 19 +- src/main/java/luke/LukeException.java | 3 + src/main/java/luke/LukeTest.java | 2 +- src/main/java/luke/Ui.java | 8 +- 17 files changed, 616 insertions(+), 55 deletions(-) create mode 100644 .project create mode 100644 .settings/org.eclipse.buildship.core.prefs create mode 100644 config/checkstyle/checkstyle.xml create mode 100644 data/duke.txt create mode 100644 data/luke.txt delete mode 100644 src/main/java/Dates.java create mode 100644 src/main/java/luke/Deadline.java create mode 100644 src/main/java/luke/DialogBox.java diff --git a/.project b/.project new file mode 100644 index 0000000000..3aaffc18f5 --- /dev/null +++ b/.project @@ -0,0 +1,34 @@ +z + + ip + Project ip created by Buildship. + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + + + 1632124959946 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000000..ac31e3c7b5 --- /dev/null +++ b/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home=C\:/Program Files/Java/jdk-11.0.9 +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/build.gradle b/build.gradle index 20c0521cc7..18349e5184 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,7 @@ plugins { id 'application' id 'checkstyle' id 'com.github.johnrengelman.shadow' version '5.1.0' + id "org.openjfx.javafxplugin" version "0.0.10" } repositories { @@ -10,8 +11,24 @@ repositories { } dependencies { + implementation 'org.junit.jupiter:junit-jupiter:5.4.2' 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' + + 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' } test { @@ -29,11 +46,11 @@ test { } application { - mainClassName = "seedu.duke.Duke" + mainClassName = "luke.Luke" } shadowJar { - archiveBaseName = "duke" + archiveBaseName = "luke" archiveClassifier = null } @@ -43,4 +60,5 @@ checkstyle { run{ standardInput = System.in + enableAssertions = true } diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml new file mode 100644 index 0000000000..6d69fcf10b --- /dev/null +++ b/config/checkstyle/checkstyle.xml @@ -0,0 +1,398 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/duke.txt b/data/duke.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/data/luke.txt b/data/luke.txt new file mode 100644 index 0000000000..11f9d2c16e --- /dev/null +++ b/data/luke.txt @@ -0,0 +1 @@ +T,0,Get help diff --git a/docs/README.md b/docs/README.md index 718e1076be..7fe42f1415 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,3 +27,7 @@ Description of the outcome. ``` expected output ``` + +###Credits + +Photos by Generated Photos diff --git a/src/main/java/Dates.java b/src/main/java/Dates.java deleted file mode 100644 index 94dee41066..0000000000 --- a/src/main/java/Dates.java +++ /dev/null @@ -1,16 +0,0 @@ -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; - -public class Event { - - private Event event; - private LocalDate eventDate; - - public Event(String input) { - //create dates from strings - this.eventDate = LocalDate.parse(input); - this.eventDate.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); - - } -} \ No newline at end of file diff --git a/src/main/java/luke/Deadline.java b/src/main/java/luke/Deadline.java new file mode 100644 index 0000000000..2217c1d892 --- /dev/null +++ b/src/main/java/luke/Deadline.java @@ -0,0 +1,71 @@ +package luke; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +/** + * Class that inherits from Entry to encapsulate Deadlines. + */ +public class Deadline extends Entry { + + private LocalDate deadline; + + /** + * Constructor for Deadline. + */ + public Deadline() { + super(); + this.deadline = LocalDate.now(); + } + + /** + * Constructor for Deadline. + * + * @param task Entry to be saved. + * @param deadline Deadline of entry. + * @throws LukeException Error thrown if deadline is in wrong format. + */ + public Deadline(String task, String deadline) throws LukeException { + super(task); + try { + this.deadline = LocalDate.parse(deadline); + } catch (DateTimeParseException e) { + this.deadline = LocalDate.now(); + throw LukeException.INVALID_DATE_FORMAT_EXCEPTION; + } + } + + /** + * Overrides Entry's saveString method. + * Returns string to be saved representing the Deadline. + * + * @return String to be saved representing the Deadline. + */ + @Override + public String saveString() { + return "D" + super.saveString() + "," + this.deadline; + } + + /** + * Overrides Entry's toString method. + * Returns String description of deadline. + * + * @return String representing Deadline. + */ + @Override + public String toString() { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy"); + return "[D]" + super.toString() + "(by: " + this.deadline.format(formatter) + ")"; + } + + /** + * Returns true if Deadline is Empty. + * + * @return Boolean corresponding to Deadline's length. + */ + @Override + public boolean isEmpty() { + return super.isEmpty() && !deadline.isAfter(LocalDate.now()); + } +} \ No newline at end of file diff --git a/src/main/java/luke/DeadlineTest.java b/src/main/java/luke/DeadlineTest.java index 7bed50479e..d87f6f7ccf 100644 --- a/src/main/java/luke/DeadlineTest.java +++ b/src/main/java/luke/DeadlineTest.java @@ -11,7 +11,7 @@ public void deadlineToStringTest() { Deadline deadline = new Deadline("testing-deadline", "2021-08-20"); assertEquals("[D][ ] testing-deadline(by: Aug 20 2021)", deadline.toString()); } catch (LukeException e) { - assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); + assertEquals(LukeException.INVALID_DATE_FORMAT_EXCEPTION.getMessage(), e.getMessage()); } } @@ -21,16 +21,7 @@ public void deadlineSaveStringTest() { Deadline deadline = new Deadline("testing-deadline", "2021-08-20"); assertEquals("D,0,testing-deadline,2021-08-20", deadline.saveString()); } catch (LukeException e) { - assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); - } - } - - @Test - public void invalidDateTest() { - try { - Deadline deadline = new Deadline("testing-deadline", "20th Aug"); - } catch (LukeException e) { - assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); + assertEquals(LukeException.INVALID_DATE_FORMAT_EXCEPTION.getMessage(), e.getMessage()); } } } \ No newline at end of file diff --git a/src/main/java/luke/DialogBox.java b/src/main/java/luke/DialogBox.java new file mode 100644 index 0000000000..241bb09f0a --- /dev/null +++ b/src/main/java/luke/DialogBox.java @@ -0,0 +1,52 @@ +package luke; + +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; + +public class DialogBox extends HBox { + + private Label text; + private final ImageView DISPLAY_PICTURE; + + public DialogBox(Label l, ImageView iv) { + text = l; + DISPLAY_PICTURE = iv; + + text.setWrapText(true); + DISPLAY_PICTURE.setFitWidth(100.0); + DISPLAY_PICTURE.setFitHeight(100.0); + + this.setAlignment(Pos.TOP_RIGHT); + this.getChildren().addAll(text, DISPLAY_PICTURE); + } + + /** + * 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 getLukeDialog(Label l, ImageView iv) { + var db = new DialogBox(l, iv); + db.flip(); + return db; + } + + public DialogBox padDialog(int padding) { + text.setAlignment(Pos.BASELINE_RIGHT); + return this; + } +} \ No newline at end of file diff --git a/src/main/java/luke/Event.java b/src/main/java/luke/Event.java index 2b4b83a804..2255a4b1c2 100644 --- a/src/main/java/luke/Event.java +++ b/src/main/java/luke/Event.java @@ -32,7 +32,7 @@ public class Event extends Entry{ this.event = LocalDate.parse(event); } catch (DateTimeParseException e) { this.event = LocalDate.now(); - throw new LukeException("Sorry I can't read that! Enter dates in YYYY-MM-DD format"); + throw LukeException.INVALID_DATE_FORMAT_EXCEPTION; } } diff --git a/src/main/java/luke/EventTest.java b/src/main/java/luke/EventTest.java index 8c600b2776..1eb2a7bc8f 100644 --- a/src/main/java/luke/EventTest.java +++ b/src/main/java/luke/EventTest.java @@ -11,7 +11,7 @@ public void eventToStringTest() { Event event = new Event("testing-event", "2021-08-20"); assertEquals("[E][ ] testing-event(at: Aug 20 2021)", event.toString()); } catch (LukeException e) { - assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); + assertEquals(LukeException.INVALID_DATE_FORMAT_EXCEPTION.getMessage(), e.getMessage()); } } @@ -21,16 +21,7 @@ public void eventSaveStringTest() { Event event = new Event("testing-event", "2021-08-20"); assertEquals("E,0,testing-event,2021-08-20", event.saveString()); } catch (LukeException e) { - assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); - } - } - - @Test - public void invalidDateTest() { - try { - Event event = new Event("testing-event", "20 Aug"); - } catch (LukeException e) { - assertEquals(new LukeException("Invalid timing format! Enter dates in yyyy-mm-dd format").getMessage(), e.getMessage()); + assertEquals(LukeException.INVALID_DATE_FORMAT_EXCEPTION.getMessage(), e.getMessage()); } } } \ No newline at end of file diff --git a/src/main/java/luke/Luke.java b/src/main/java/luke/Luke.java index b5e982c04a..0311113ad4 100644 --- a/src/main/java/luke/Luke.java +++ b/src/main/java/luke/Luke.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.Objects; -import java.util.Scanner; import java.util.List; import javafx.application.Application; @@ -22,10 +21,10 @@ import javafx.stage.Stage; /** - * Class to encapsulate Duke Chatbot. + * Class to encapsulate Luke Chatbot. */ public class Luke extends Application { - + private final Ui lukeUi; private final Parser lukeParser; private final Storage lukeStorage; @@ -68,14 +67,14 @@ public Luke() { @Override public void start(Stage stage) { VBox lukeContainer = new VBox(); - TextField dukeInput = new TextField(); + TextField lukeInput = new TextField(); ScrollPane scrollPane = configureScrollPane(lukeContainer); Button sendButton = configureSendButton(lukeContainer, lukeInput, stage); Label sideLabel = configureSideLabel(); HBox topRow = configureTopRow(scrollPane, sideLabel); AnchorPane container = configureAnchorPane(scrollPane, sendButton, lukeInput, topRow); Scene scene = new Scene(container); - configureLukeContainerAndInput(lukeContainer, lukeInput, scrollPane, stage); + configureLukeContainerAndLukeInput(lukeContainer, lukeInput, scrollPane, stage); configureStage(scene, stage); stage.show(); } @@ -123,7 +122,7 @@ private void configureLukeContainerAndLukeInput( /** * Iteration 2: - * Creates two dialog boxes, one echoing USER input and the other containing Duke's reply and then appends them to + * Creates two dialog boxes, one echoing USER input and the other containing Luke's reply and then appends them to * the dialog container. Clears the USER input after processing. */ private void handleUserInput(VBox dialogContainer, TextField userInput, Stage stage) { @@ -131,13 +130,13 @@ private void handleUserInput(VBox dialogContainer, TextField userInput, Stage st Label lukeText = new Label(getResponse(userInput.getText(), stage)); dialogContainer.getChildren().addAll( DialogBox.getUserDialog(userText, new ImageView(USER)).padDialog(10), - DialogBox.getLukeDialog(dukeText, new ImageView(LUKE)).padDialog(10) + DialogBox.getLukeDialog(lukeText, new ImageView(LUKE)).padDialog(10) ); userInput.clear(); } /** - * Function to get response from Duke. + * Function to get response from Luke. */ private String getResponse(String input, Stage stage) { if (input.equals(TERMINATION_COMMAND)) { @@ -194,7 +193,7 @@ private Label getDialogLabel(String text) { */ private String processInput(ArrayList parsedTerms) throws LukeException { if (parsedTerms.size() < 3) { - throw new LukeException("Luke Cannot Understand Your Entry!"); + throw new LukeException("Luke cannot understand your entry :/\nType 'help' for assistance"); } String command = parsedTerms.get(0); String entry = parsedTerms.get(1); @@ -236,7 +235,7 @@ private String processInput(ArrayList parsedTerms) throws LukeException break; default: - throw new LukeException("Sorry! Luke can't understand what that means"); + throw new LukeException("Sorry! Luke can't understand that\nType 'help' for assistance"); } return output; } diff --git a/src/main/java/luke/LukeException.java b/src/main/java/luke/LukeException.java index 8b59677267..71f9884d51 100644 --- a/src/main/java/luke/LukeException.java +++ b/src/main/java/luke/LukeException.java @@ -2,6 +2,9 @@ public class LukeException extends Exception { + public static final LukeException INVALID_DATE_FORMAT_EXCEPTION = + new LukeException("Sorry I can't read that! Enter dates in YYYY-MM-DD format"); + /** * Constructor for LukeException. */ diff --git a/src/main/java/luke/LukeTest.java b/src/main/java/luke/LukeTest.java index bf4b8217c8..73e5e63a48 100644 --- a/src/main/java/luke/LukeTest.java +++ b/src/main/java/luke/LukeTest.java @@ -7,7 +7,7 @@ public class LukeTest { @Test public void lukeTest() { - Luke luke = new Duke(); + Luke luke = new Luke(); assertEquals("Hello! I'm Luke, your slightly useful personal assistant!\n" + "I can help you remember tasks and other things :D", luke.toString()); } diff --git a/src/main/java/luke/Ui.java b/src/main/java/luke/Ui.java index ce7f3ca806..582914115e 100644 --- a/src/main/java/luke/Ui.java +++ b/src/main/java/luke/Ui.java @@ -18,8 +18,10 @@ */ public class Ui { - private final Image USER = new Image(Objects.requireNonNull(this.getClass().getResourceAsStream("/images/UserImage.jpg"))); - private final Image LUKE = new Image(Objects.requireNonNull(this.getClass().getResourceAsStream("/images/LukeImage.jpg"))); + private final Image USER = + new Image(Objects.requireNonNull(this.getClass().getResourceAsStream("/images/UserImage.jpg"))); + private final Image LUKE = + new Image(Objects.requireNonNull(this.getClass().getResourceAsStream("/images/LukeImage.jpg"))); /** * Constructor to create a UI object. @@ -61,7 +63,7 @@ public void addEntry(Entry entry, int id) { /** * Prints out the added entry. * - * @param entry THe newly-added entry. + * @param entry The newly-added entry. * @param id The #id of the newly-added entry. */ public String getAddEntry(Entry entry, int id) { From 4b8fc0ff7dec950be04ba38aeb557565847d8af7 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Wed, 22 Sep 2021 20:54:12 +0800 Subject: [PATCH 26/28] add README and Ui screenshot --- data/luke.txt | 3 +- docs/README.md | 66 ++++++++++++++++++----- docs/Ui.png | Bin 0 -> 221886 bytes src/main/java/luke/Entry.java | 8 --- src/main/java/luke/EntryList.java | 87 ------------------------------ src/main/java/luke/Luke.java | 40 +++++++------- src/main/java/luke/Ui.java | 55 ------------------- 7 files changed, 74 insertions(+), 185 deletions(-) create mode 100644 docs/Ui.png diff --git a/data/luke.txt b/data/luke.txt index 11f9d2c16e..6e478fda09 100644 --- a/data/luke.txt +++ b/data/luke.txt @@ -1 +1,2 @@ -T,0,Get help +T,0,Study CS +D,1,CS2100 Assignment 1,2021-10-21 diff --git a/docs/README.md b/docs/README.md index 7fe42f1415..14c6b468fc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,31 +2,71 @@ ## Features -### Feature-ABC +### Add Tasks -Description of the feature. +Add tasks that needs to be done in no set time. -### Feature-XYZ +### Add Deadlines -Description of the feature. +Add deadlines that need to be completed by a certain date. + +### Add Events + +Add events that will take place at a certain date. ## Usage -### `Keyword` - Describe action +### `help` - Get Help + +Returns a list of command keywords. + +### `list` - List Entries + +Returns the list of entries. + +### `todo` - Add Tasks + +Adds a task entry. + +Example of usage: + +`todo Service the car` + +`todo Take the snake for a walk` + +### `deadline` - Add Deadlines + +Adds a deadline entry. + +Example of usage: + +`deadline Get an internship / 2022-02-21` + +`deadline Get a job / 2023-03-14` + +### `done` - Finish Tasks/Deadlines/Events + +Marks an entry as done. + +Example of usage: + +`done 3` + +Marks the third entry as done. + +### `delete` - Delete Entry -Describe the action and its outcome. +Deletes an entry. -Example of usage: +Example of usage: -`keyword (optional arguments)` +`done 2` -Expected outcome: +Removes the second entry in the entry list. -Description of the outcome. +### `bye` - Say Bye to Luke -``` -expected output -``` +Closes the application. ###Credits diff --git a/docs/Ui.png b/docs/Ui.png new file mode 100644 index 0000000000000000000000000000000000000000..cd6421fde3913cd40cacf54a90a46198eaadca92 GIT binary patch literal 221886 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 XZV(qyWb67rz`twyxAcm1Y=ZwEigYa` literal 0 HcmV?d00001 diff --git a/src/main/java/luke/Entry.java b/src/main/java/luke/Entry.java index 00e6ee8384..72352a207f 100644 --- a/src/main/java/luke/Entry.java +++ b/src/main/java/luke/Entry.java @@ -26,14 +26,6 @@ public abstract class Entry { this.isDone = false; } - /** - * Method to revert the isDone status of the Entry. - */ - public void revertDone() { - this.isDone = !this.isDone; - } - - /** * Method to set the isDone status to true of an Entry. * diff --git a/src/main/java/luke/EntryList.java b/src/main/java/luke/EntryList.java index 6638eea5f2..f202a12765 100644 --- a/src/main/java/luke/EntryList.java +++ b/src/main/java/luke/EntryList.java @@ -17,23 +17,6 @@ public class EntryList extends ArrayList { this.numberOfEntries = super.size(); } - /** - * Prints all the Entries stored currently. - * - * @param ui The UI object for the current Duke execution. - * @throws LukeException Exception if no entries are to be displayed. - */ - public void displayEntries(Ui ui) throws LukeException { - if (numberOfEntries > 0) { - for (int i = 0; i < numberOfEntries; i++) { - ui.printEntry(super.get(i), i + 1); - } - ui.endCommand(); - } else { - throw new LukeException("No entries to display!"); - } - } - /** * Prints all the Entries stored currently. * @@ -51,22 +34,6 @@ public String getEntries() throws LukeException { } } - public void findEntry(String keyword, Ui ui) { - int len = super.size(); - int count = 1; - ui.listMatches(); - for (int i = 0; i < len; i++) { - Entry currentEntry = super.get(i); - if (currentEntry.contains(keyword)) { - if (count == 1) { - ui.foundMatches(); - } - ui.printEntry(currentEntry, count++); - } - } - ui.endCommand(); - } - /** * Finds entries with given keyword. * Searches for partial entries as well. @@ -91,25 +58,6 @@ public String getFindEntry(String keyword, Ui ui) { return output.toString(); } - /** - * Marks a given entry number as done. - * - * @param entryNumber The number of the entry to be marked. - * @throws LukeException Error thrown when no entry exists for the given entryNumber. - */ - public void markEntryAsDone(int entryNumber) throws LukeException { - if (entryNumber > 0 && entryNumber <= numberOfEntries) { - if (super.get(entryNumber - 1).setDone()) { - System.out.println("Nice! I've marked this entry as done:"); - System.out.println("\t" + super.get(entryNumber - 1)); - } else { - System.out.println("Entry is already marked as done!"); - } - } else { - throw new LukeException("There's no Entry corresponding to that Number!"); - } - } - /** * Marks a given entry number as done. * @@ -141,24 +89,6 @@ public void addEntry(Entry entry) { super.add(numberOfEntries++, entry); } - /** - * Adds given Entry to the List. - * Prints Success Message if Successful. - * - * @param entry The Entry to be added. - * @param command The command corresponding to the Entry. - * @param ui UI object to print Entry if added. - * @throws LukeException Error thrown if Entry is empty. - */ - public void addEntry(Entry entry, String command, Ui ui) throws LukeException { - if (!entry.isEmpty()){ - super.add(numberOfEntries++, entry); - ui.addEntry(entry, numberOfEntries); - } else { - throw new LukeException("The " + command + " description can't be empty!"); - } - } - /** * Adds given Entry to the List. * Prints Success Message if Successful. @@ -179,23 +109,6 @@ public String getAddEntry(Entry entry, String command, Ui ui) throws LukeExcepti return output.toString(); } - /** - * Deletes entry by index. - * - * @param index Index of Entry to be deleted. - * @param ui UI Object to print deleted Entry message. - * @throws LukeException Error thrown if no Entry corresponds to the index. - */ - public void deleteEntry(int index, Ui ui) throws LukeException { - if (super.isEmpty() || index < 1 || index > numberOfEntries) { - throw new LukeException("Luke can't find anything to delete!"); - } else { - Entry deletedEntry = super.remove(index - 1); - numberOfEntries--; - ui.showDeletedEntry(deletedEntry); - } - } - /** * Deletes entry by index. * diff --git a/src/main/java/luke/Luke.java b/src/main/java/luke/Luke.java index 0311113ad4..c1329e4bf1 100644 --- a/src/main/java/luke/Luke.java +++ b/src/main/java/luke/Luke.java @@ -70,7 +70,7 @@ public void start(Stage stage) { TextField lukeInput = new TextField(); ScrollPane scrollPane = configureScrollPane(lukeContainer); Button sendButton = configureSendButton(lukeContainer, lukeInput, stage); - Label sideLabel = configureSideLabel(); + VBox sideLabel = configureSideLabel(); HBox topRow = configureTopRow(scrollPane, sideLabel); AnchorPane container = configureAnchorPane(scrollPane, sendButton, lukeInput, topRow); Scene scene = new Scene(container); @@ -147,7 +147,7 @@ private String getResponse(String input, Stage stage) { } } - private HBox configureTopRow(ScrollPane scrollPane, Label sideLabel) { + private HBox configureTopRow(ScrollPane scrollPane, VBox sideLabel) { HBox topRow = new HBox(); topRow.getChildren().addAll(scrollPane, sideLabel); return topRow; @@ -164,25 +164,20 @@ private ScrollPane configureScrollPane(VBox lukeContainer) { return scrollPane; } - private Label configureSideLabel() { - Label sideLabel = new Label("LUKE"); - sideLabel.setTextFill(Color.color(1,1,1)); - sideLabel.setFont(new Font("Arial", 45)); - sideLabel.setStyle("-fx-start-margin: 100"); - return sideLabel; - } + private VBox configureSideLabel() { + Label title = new Label(" LUKE "); + title.setTextFill(Color.color(1,1,1)); + title.setFont(new Font("Georgia", 45)); + title.setStyle("-fx-start-margin: 100"); - /** - * Creates a label with the specified text and adds it to the dialog container. - * @param text String containing text to add - * @return a label with the specified text that has word wrap enabled. - */ - private Label getDialogLabel(String text) { - // You will need to import `javafx.scene.control.Label`. - Label textToAdd = new Label(text); - textToAdd.setWrapText(true); + Label description = new Label(this.toString()); + description.setTextFill(Color.color(1,1,1)); + description.setFont(new Font("Georgia", 24)); + description.setStyle("-fx-start-margin: 100"); - return textToAdd; + VBox sideLabel = new VBox(); + sideLabel.getChildren().addAll(title, description); + return sideLabel; } /** @@ -265,8 +260,11 @@ public String run(String input) { */ @Override public String toString() { - return "Hello! I'm Luke, your slightly useful personal assistant!\n" - + "I can help you remember tasks and other things :D"; + return " Hello! I'm Luke, \n" + + " your slightly useful \n" + + " personal assistant! \n" + + " I can help you remember \n" + + " tasks and other things :D "; } } diff --git a/src/main/java/luke/Ui.java b/src/main/java/luke/Ui.java index 582914115e..d95a8237ef 100644 --- a/src/main/java/luke/Ui.java +++ b/src/main/java/luke/Ui.java @@ -48,18 +48,6 @@ public void welcomeUser() { System.out.println(HORIZONTAL_DIVIDE); } - /** - * Prints out the added entry. - * - * @param entry THe newly-added entry. - * @param id The #id of the newly-added entry. - */ - public void addEntry(Entry entry, int id) { - System.out.println("I've added this entry to your list!"); - this.printEntry(entry, id); - System.out.println(HORIZONTAL_DIVIDE); - } - /** * Prints out the added entry. * @@ -71,25 +59,10 @@ public String getAddEntry(Entry entry, int id) { this.getPrintEntry(entry, id); } - /** - * Prints out a horizontal line at the end of some operation. - */ - public void endCommand() { - System.out.println(HORIZONTAL_DIVIDE); - } - - public void listMatches() { - System.out.println("Looking for matching tasks in your list..."); - } - public String getListMatches() { return "Looking for matching tasks in your list..."; } - public void foundMatches() { - System.out.println("Here are the matching tasks in your list: "); - } - public String getFoundMatches() { return "Here are the matching tasks in your list: "; } @@ -115,14 +88,6 @@ public String getPrintEntry(Entry entry, int id) { return "\t" + id + "." + entry; } - /** - * Prints out farewell message. - */ - public void printGoodByeUser() { - System.out.println("Bye! Hope to see you again soon :D"); - System.out.println(HORIZONTAL_DIVIDE); - } - /** * Prints out farewell message. * @@ -132,16 +97,6 @@ public String getGoodByeUser() { return "Bye! Hope to see you again soon :D"; } - /** - * Prints out the Error Message received when Parsing. - * - * @param parsingError Error encountered while parsing input. - */ - public void handleParsingError(LukeException parsingError) { - System.out.println(parsingError.getMessage()); - System.out.println(HORIZONTAL_DIVIDE); - } - /** * Prints out the Error Message received when Parsing. * @@ -184,16 +139,6 @@ public void handleLoadingError(LukeException loadingError) { System.out.println(HORIZONTAL_DIVIDE); } - /** - * Prints out entry just after deletion. - * - * @param deletedEntry Entry that has just been deleted. - */ - public void showDeletedEntry(Entry deletedEntry) { - System.out.println("Removed entry\n" + deletedEntry); - System.out.println(HORIZONTAL_DIVIDE); - } - /** * Prints out entry just after deletion. * From f043b50cf2e49863cb123f3d1077f3685038bdbe Mon Sep 17 00:00:00 2001 From: GabrielWLM <77065071+GabrielWLM@users.noreply.github.com> Date: Wed, 22 Sep 2021 20:56:21 +0800 Subject: [PATCH 27/28] Set theme jekyll-theme-modernist --- 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..cc35c1df2c --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-modernist \ No newline at end of file From 8000bc1a6085034d0e49a5196549ba39deb6e073 Mon Sep 17 00:00:00 2001 From: GabrielWLM Date: Mon, 27 Sep 2021 20:47:06 +0800 Subject: [PATCH 28/28] fix folder creation and jar execution --- build.gradle | 2 +- data/duke.txt | 0 data/luke.txt | 3 +-- src/main/java/luke/Storage.java | 12 ++++++------ 4 files changed, 8 insertions(+), 9 deletions(-) delete mode 100644 data/duke.txt diff --git a/build.gradle b/build.gradle index 18349e5184..6209a3a9d1 100644 --- a/build.gradle +++ b/build.gradle @@ -46,7 +46,7 @@ test { } application { - mainClassName = "luke.Luke" + mainClassName = "luke.Launcher" } shadowJar { diff --git a/data/duke.txt b/data/duke.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/data/luke.txt b/data/luke.txt index 6e478fda09..a94d9cc3d0 100644 --- a/data/luke.txt +++ b/data/luke.txt @@ -1,2 +1 @@ -T,0,Study CS -D,1,CS2100 Assignment 1,2021-10-21 +T,0,study diff --git a/src/main/java/luke/Storage.java b/src/main/java/luke/Storage.java index e7544deeaa..f75f9cedf1 100644 --- a/src/main/java/luke/Storage.java +++ b/src/main/java/luke/Storage.java @@ -1,9 +1,9 @@ package luke; import java.io.BufferedWriter; +import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; -import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; @@ -15,7 +15,7 @@ public class Storage { private final String PROJECT_ROOT = System.getProperty("user.dir"); - private final Path DATA_DIRECTORY_PATH = Paths.get(PROJECT_ROOT,"data"); + private final Path DATA_DIRECTORY_PATH = Paths.get(PROJECT_ROOT, "data"); private Path dataPath; private File lukeData; @@ -24,7 +24,7 @@ public class Storage { * Constructor for Storage. */ Storage() { - this.dataPath = DATA_DIRECTORY_PATH.resolve("duke.txt"); + this.dataPath = DATA_DIRECTORY_PATH.resolve("luke.txt"); this.lukeData = new File(dataPath.toString()); } @@ -64,13 +64,13 @@ public EntryList readData() throws LukeException { return addEntriesFromFile(entries); } catch (FileNotFoundException e) { try { - if (!(lukeData.createNewFile())) { - throw new LukeException("Uh-Oh! Your data can't be stored :/"); + if (!(lukeData.getParentFile().mkdir()) && !(lukeData.createNewFile())) { + throw new LukeException("Uh-Oh! Your data can't be stored (I can't create a directory) :/"); } else { return new EntryList(); } } catch (IOException err) { - throw new LukeException("Uh-Oh! Your data can't be stored :/"); + throw new LukeException("Uh-Oh! Your data can't be stored (IO Error) :/"); } } }