From 68c58c12c1d631736a4b25500248a2956171496f Mon Sep 17 00:00:00 2001 From: damithc Date: Mon, 25 May 2020 00:58:18 +0800 Subject: [PATCH 01/55] Add Gradle support --- build.gradle | 41 +++++ 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, 332 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..885198fcfa --- /dev/null +++ b/build.gradle @@ -0,0 +1,41 @@ +plugins { + id 'java' + id 'application' + 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 +} + +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 03523ec89e823ff5457b647df22a4e395641da7a Mon Sep 17 00:00:00 2001 From: lzq Date: Sat, 5 Aug 2023 15:24:02 +0800 Subject: [PATCH 02/55] Bump gradle and lib version --- build.gradle | 9 +- gradle/wrapper/gradle-wrapper.jar | Bin 58695 -> 63375 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 281 ++++++++++++++--------- gradlew.bat | 195 ++++++++-------- 5 files changed, 273 insertions(+), 216 deletions(-) diff --git a/build.gradle b/build.gradle index 885198fcfa..a388517ae1 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' id 'application' - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '7.1.2' } repositories { @@ -9,8 +9,8 @@ repositories { } 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' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.0' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.0' } test { @@ -28,12 +28,13 @@ test { } application { - mainClassName = "seedu.duke.Duke" + mainClass.set("seedu.duke.Duke") } shadowJar { archiveBaseName = "duke" archiveClassifier = null + dependsOn("distZip", "distTar") } run{ diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f3d88b1c2faf2fc91d853cd5d4242b5547257070..033e24c4cdf41af1ab109bc7f253b2b887023340 100644 GIT binary patch delta 43723 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 delta 38942 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b7c8c5dbf5..66c01cfeba 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 2fe81a7d95..fcb6fca147 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,110 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # 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 +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac 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"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # 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 - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | 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" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,87 +129,120 @@ 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. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + 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 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 +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac 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 +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # 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 +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # 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\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg 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" +# 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"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 62bd9b9cce..6689b85bee 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,103 +1,92 @@ -@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 +@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=. +@rem This is normally unused +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% equ 0 goto execute + +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 execute + +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 + +: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 %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 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! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega From 81a9c537afe8492675eb253968939364d65db091 Mon Sep 17 00:00:00 2001 From: aureliony <39163684+aureliony@users.noreply.github.com> Date: Tue, 16 Jul 2024 23:35:06 +0800 Subject: [PATCH 03/55] build.gradle: Prevent generating a second JAR file In build.gradle, the dependencies on distZip and/or distTar causes the shadowJar task to generate a second JAR file for which the mainClass.set("seedu.duke.Duke") does not take effect. Hence, this additional JAR file cannot be run. For this product, there is no need to generate a second JAR file to begin with. Let's remove this dependency from the build.gradle to prevent the shadowJar task from generating the extra JAR file. --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index a388517ae1..c361f9811e 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,6 @@ application { shadowJar { archiveBaseName = "duke" archiveClassifier = null - dependsOn("distZip", "distTar") } run{ From 882801ad7c80e6d3eb08e0d8bb983df536903a0e Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Sat, 31 Aug 2024 23:42:56 +0800 Subject: [PATCH 04/55] Change name --- src/main/java/Duke.java | 10 ---------- src/main/java/JohnCena.java | 10 ++++++++++ 2 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 src/main/java/Duke.java create mode 100644 src/main/java/JohnCena.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java deleted file mode 100644 index 5d313334cc..0000000000 --- a/src/main/java/Duke.java +++ /dev/null @@ -1,10 +0,0 @@ -public class Duke { - public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - } -} diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java new file mode 100644 index 0000000000..ff15b50035 --- /dev/null +++ b/src/main/java/JohnCena.java @@ -0,0 +1,10 @@ +public class JohnCena { + public static void main(String[] args) { + System.out.println("____________________________________________________________"); + System.out.println(" Hello! I'm John Cena"); + System.out.println(" What can I do for you?"); + System.out.println("____________________________________________________________"); + System.out.println(" Bye. Hope to see you again soon!"); + System.out.println("____________________________________________________________"); + } +} \ No newline at end of file From e2685099b31e19824ec64a74ce34ef36a456efba Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Sat, 31 Aug 2024 23:50:41 +0800 Subject: [PATCH 05/55] Add echo and exit --- src/main/java/JohnCena.java | 54 +++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index ff15b50035..f18ac8d47b 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -1,10 +1,60 @@ +// import java.util.Scanner; + +// public class JohnCena { +// public static void main(String[] args) { +// Scanner scanner = new Scanner(System.in); + +// System.out.println("____________________________________________________________"); +// System.out.println(" Hello! I'm John Cena"); +// System.out.println(" What can I do for you?"); +// System.out.println("____________________________________________________________"); +// System.out.println(" Bye. Hope to see you again soon!"); +// System.out.println("____________________________________________________________"); + +// while (true) { +// String input = scanner.nextLine(); +// if (input.equals("bye")) { +// System.out.println("____________________________________________________________"); +// System.out.println(" Bye. Hope to see you again soon!"); +// System.out.println("____________________________________________________________"); +// break; +// } else { +// System.out.println("____________________________________________________________"); +// System.out.println(" " + input); +// System.out.println("____________________________________________________________"); +// } + +// } + +// scanner.close(); +// } +// } + +import java.util.Scanner; + public class JohnCena { public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.println("____________________________________________________________"); System.out.println(" Hello! I'm John Cena"); System.out.println(" What can I do for you?"); System.out.println("____________________________________________________________"); - System.out.println(" Bye. Hope to see you again soon!"); - System.out.println("____________________________________________________________"); + + while (true) { + String input = scanner.nextLine(); + if (input.equals("bye")) { + System.out.println("____________________________________________________________"); + System.out.println(" Bye. Hope to see you again soon!"); + System.out.println("____________________________________________________________"); + break; + } else { + System.out.println("____________________________________________________________"); + System.out.println(" " + input); + System.out.println("____________________________________________________________"); + } + } + + scanner.close(); } } \ No newline at end of file From 9f94590d951434d3f1b91fd0c861224f924cab37 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Sun, 1 Sep 2024 00:03:56 +0800 Subject: [PATCH 06/55] Add ability to store and list tasks --- src/main/java/JohnCena.java | 50 +++++++++++-------------------------- 1 file changed, 15 insertions(+), 35 deletions(-) diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index f18ac8d47b..6350230d7c 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -1,60 +1,40 @@ -// import java.util.Scanner; - -// public class JohnCena { -// public static void main(String[] args) { -// Scanner scanner = new Scanner(System.in); - -// System.out.println("____________________________________________________________"); -// System.out.println(" Hello! I'm John Cena"); -// System.out.println(" What can I do for you?"); -// System.out.println("____________________________________________________________"); -// System.out.println(" Bye. Hope to see you again soon!"); -// System.out.println("____________________________________________________________"); - -// while (true) { -// String input = scanner.nextLine(); -// if (input.equals("bye")) { -// System.out.println("____________________________________________________________"); -// System.out.println(" Bye. Hope to see you again soon!"); -// System.out.println("____________________________________________________________"); -// break; -// } else { -// System.out.println("____________________________________________________________"); -// System.out.println(" " + input); -// System.out.println("____________________________________________________________"); -// } - -// } - -// scanner.close(); -// } -// } import java.util.Scanner; public class JohnCena { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); + String[] tasks = new String[100]; + int taskCount = 0; System.out.println("____________________________________________________________"); - System.out.println(" Hello! I'm John Cena"); + System.out.println(" Hello! I'm [YOUR CHATBOT NAME]"); System.out.println(" What can I do for you?"); System.out.println("____________________________________________________________"); while (true) { String input = scanner.nextLine(); + if (input.equals("bye")) { - System.out.println("____________________________________________________________"); System.out.println(" Bye. Hope to see you again soon!"); System.out.println("____________________________________________________________"); break; + } else if (input.equals("list")) { + System.out.println("____________________________________________________________"); + for (int i = 0; i < taskCount; i++) { + System.out.println(" " + (i + 1) + ". " + tasks[i]); + } + System.out.println("____________________________________________________________"); } else { + tasks[taskCount] = input; + taskCount++; System.out.println("____________________________________________________________"); - System.out.println(" " + input); + System.out.println(" added: " + input); System.out.println("____________________________________________________________"); } } scanner.close(); } -} \ No newline at end of file +} + From c5393ea902b244512f56a43e2513d4c1d3282e3a Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Sun, 1 Sep 2024 00:12:04 +0800 Subject: [PATCH 07/55] Add ability to mark tasks as done and not done --- src/main/java/JohnCena.java | 37 +++++++++++++++++++++++++------------ src/main/java/Task.java | 30 ++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 12 deletions(-) create mode 100644 src/main/java/Task.java diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index 6350230d7c..73cf82b5cb 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -1,33 +1,47 @@ - +import java.util.ArrayList; import java.util.Scanner; public class JohnCena { + private static ArrayList tasks = new ArrayList<>(); + public static void main(String[] args) { Scanner scanner = new Scanner(System.in); - String[] tasks = new String[100]; - int taskCount = 0; - + System.out.println("____________________________________________________________"); - System.out.println(" Hello! I'm [YOUR CHATBOT NAME]"); + System.out.println(" Hello! I'm John Cena"); System.out.println(" What can I do for you?"); System.out.println("____________________________________________________________"); while (true) { String input = scanner.nextLine(); - if (input.equals("bye")) { + System.out.println("____________________________________________________________"); System.out.println(" Bye. Hope to see you again soon!"); System.out.println("____________________________________________________________"); break; } else if (input.equals("list")) { System.out.println("____________________________________________________________"); - for (int i = 0; i < taskCount; i++) { - System.out.println(" " + (i + 1) + ". " + tasks[i]); + System.out.println(" Here are the tasks in your list:"); + for (int i = 0; i < tasks.size(); i++) { + System.out.println(" " + (i + 1) + "." + tasks.get(i)); } System.out.println("____________________________________________________________"); + } else if (input.startsWith("mark ")) { + int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; + tasks.get(taskIndex).markAsDone(); + System.out.println("____________________________________________________________"); + System.out.println(" Nice! I've marked this task as done:"); + System.out.println(" " + tasks.get(taskIndex)); + System.out.println("____________________________________________________________"); + } else if (input.startsWith("unmark ")) { + int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; + tasks.get(taskIndex).markAsNotDone(); + System.out.println("____________________________________________________________"); + System.out.println(" OK, I've marked this task as not done yet:"); + System.out.println(" " + tasks.get(taskIndex)); + System.out.println("____________________________________________________________"); } else { - tasks[taskCount] = input; - taskCount++; + tasks.add(new Task(input)); System.out.println("____________________________________________________________"); System.out.println(" added: " + input); System.out.println("____________________________________________________________"); @@ -36,5 +50,4 @@ public static void main(String[] args) { scanner.close(); } -} - +} \ No newline at end of file diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 0000000000..c5e53728ae --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,30 @@ +public class Task { + private String description; + private boolean isDone; + + public Task(String description) { + this.description = description; + this.isDone = false; + } + + public void markAsDone() { + this.isDone = true; + } + + public void markAsNotDone() { + this.isDone = false; + } + + public String getStatusIcon() { + return (isDone ? "X" : " "); // mark done task with X + } + + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return "[" + this.getStatusIcon() + "] " + this.description; + } +} From c8b4a8175fbbfcbb7bb215e76b59edd789bd26d5 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Sun, 1 Sep 2024 00:29:05 +0800 Subject: [PATCH 08/55] Add support for ToDos, Deadlines, and Events --- src/main/java/Deadline.java | 13 +++++++++++++ src/main/java/Event.java | 15 +++++++++++++++ src/main/java/JohnCena.java | 30 ++++++++++++++++++++++++++++-- src/main/java/Todo.java | 10 ++++++++++ 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 src/main/java/Deadline.java create mode 100644 src/main/java/Event.java create mode 100644 src/main/java/Todo.java diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java new file mode 100644 index 0000000000..95928fb5fb --- /dev/null +++ b/src/main/java/Deadline.java @@ -0,0 +1,13 @@ +public class Deadline extends Task { + protected String by; + + public Deadline(String description, String by) { + super(description); + this.by = by; + } + + @Override + public String toString() { + return "[D]" + super.toString() + " (by: " + by + ")"; + } +} \ No newline at end of file diff --git a/src/main/java/Event.java b/src/main/java/Event.java new file mode 100644 index 0000000000..6f589acab8 --- /dev/null +++ b/src/main/java/Event.java @@ -0,0 +1,15 @@ +public class Event extends Task { + protected String from; + protected String to; + + public Event(String description, String from, String to) { + super(description); + this.from = from; + this.to = to; + } + + @Override + public String toString() { + return "[E]" + super.toString() + " (from: " + from + " to: " + to + ")"; + } +} \ No newline at end of file diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index 73cf82b5cb..0764cadc33 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -40,10 +40,36 @@ public static void main(String[] args) { System.out.println(" OK, I've marked this task as not done yet:"); System.out.println(" " + tasks.get(taskIndex)); System.out.println("____________________________________________________________"); + } else if (input.startsWith("todo ")) { + String description = input.substring(5); + Task task = new Todo(description); + tasks.add(task); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } else if (input.startsWith("deadline ")) { + String[] parts = input.substring(9).split(" /by "); + Task task = new Deadline(parts[0], parts[1]); + tasks.add(task); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } else if (input.startsWith("event ")) { + String[] parts = input.substring(6).split(" /from | /to "); + Task task = new Event(parts[0], parts[1], parts[2]); + tasks.add(task); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); } else { - tasks.add(new Task(input)); System.out.println("____________________________________________________________"); - System.out.println(" added: " + input); + System.out.println(" Invalid command."); System.out.println("____________________________________________________________"); } } diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java new file mode 100644 index 0000000000..eabef3ab8f --- /dev/null +++ b/src/main/java/Todo.java @@ -0,0 +1,10 @@ +public class Todo extends Task { + public Todo(String description) { + super(description); + } + + @Override + public String toString() { + return "[T]" + super.toString(); + } +} From 4b701d5cdc07cdcf452f06857828988b398bcde8 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Sun, 1 Sep 2024 00:46:22 +0800 Subject: [PATCH 09/55] Set up automated text UI testing using I/O redirection --- text-ui-test/EXPECTED.TXT | 43 ++++++++++++++++++++++++++++++++------- text-ui-test/input.txt | 7 +++++++ text-ui-test/runtest.sh | 2 +- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 657e74f6e7..5a610cf9f9 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,7 +1,36 @@ -Hello from - ____ _ -| _ \ _ _| | _____ -| | | | | | | |/ / _ \ -| |_| | |_| | < __/ -|____/ \__,_|_|\_\___| - +____________________________________________________________ + Hello! I'm John Cena + What can I do for you? +____________________________________________________________ +____________________________________________________________ + Got it. I've added this task: + [T][ ] read 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 (from: Mon 2pm to: 4pm) + Now you have 3 tasks in the list. +____________________________________________________________ +____________________________________________________________ + Here are the tasks in your list: + 1.[T][ ] read book + 2.[D][ ] return book (by: Sunday) + 3.[E][ ] project meeting (from: Mon 2pm to: 4pm) +____________________________________________________________ +____________________________________________________________ + Nice! I've marked this task as done: + [T][X] read book +____________________________________________________________ +____________________________________________________________ + OK, I've marked this task as not done yet: + [D][ ] return book (by: Sunday) +____________________________________________________________ +____________________________________________________________ + Bye. Hope to see you again soon! +____________________________________________________________ diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index e69de29bb2..ca608325ea 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -0,0 +1,7 @@ +todo read book +deadline return book /by Sunday +event project meeting /from Mon 2pm /to 4pm +list +mark 1 +unmark 2 +bye \ No newline at end of file diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh index c9ec870033..b130982cc1 100644 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -20,7 +20,7 @@ then 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 +java -classpath ../bin JohnCena < input.txt > ACTUAL.TXT # convert to UNIX format cp EXPECTED.TXT EXPECTED-UNIX.TXT From 86b1af6f8f0f6d4af79c15717ceda016f13facc7 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Sun, 1 Sep 2024 01:04:46 +0800 Subject: [PATCH 10/55] Add exception classes for invalid descriptions --- src/main/java/CenaEmptyDescriptionException.java | 6 ++++++ src/main/java/CenaException.java | 6 ++++++ src/main/java/CenaInvalidDeadlineException.java | 5 +++++ src/main/java/CenaInvalidEventException.java | 6 ++++++ src/main/java/CenaInvalidTaskIndexException.java | 5 +++++ src/main/java/CenaInvalidTodoException.java | 6 ++++++ src/main/java/CenaUnknownCommandException.java | 5 +++++ 7 files changed, 39 insertions(+) create mode 100644 src/main/java/CenaEmptyDescriptionException.java create mode 100644 src/main/java/CenaException.java create mode 100644 src/main/java/CenaInvalidDeadlineException.java create mode 100644 src/main/java/CenaInvalidEventException.java create mode 100644 src/main/java/CenaInvalidTaskIndexException.java create mode 100644 src/main/java/CenaInvalidTodoException.java create mode 100644 src/main/java/CenaUnknownCommandException.java diff --git a/src/main/java/CenaEmptyDescriptionException.java b/src/main/java/CenaEmptyDescriptionException.java new file mode 100644 index 0000000000..516baeb42c --- /dev/null +++ b/src/main/java/CenaEmptyDescriptionException.java @@ -0,0 +1,6 @@ +public class CenaEmptyDescriptionException extends CenaException { + public CenaEmptyDescriptionException(String message) { + super(message); + } + +} diff --git a/src/main/java/CenaException.java b/src/main/java/CenaException.java new file mode 100644 index 0000000000..9d42cf955c --- /dev/null +++ b/src/main/java/CenaException.java @@ -0,0 +1,6 @@ +public class CenaException extends Exception { + public CenaException(String message) { + super(message); + } + +} \ No newline at end of file diff --git a/src/main/java/CenaInvalidDeadlineException.java b/src/main/java/CenaInvalidDeadlineException.java new file mode 100644 index 0000000000..a98aa215d7 --- /dev/null +++ b/src/main/java/CenaInvalidDeadlineException.java @@ -0,0 +1,5 @@ +public class CenaInvalidDeadlineException extends CenaException { + public CenaInvalidDeadlineException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/java/CenaInvalidEventException.java b/src/main/java/CenaInvalidEventException.java new file mode 100644 index 0000000000..a9af3eda24 --- /dev/null +++ b/src/main/java/CenaInvalidEventException.java @@ -0,0 +1,6 @@ +public class CenaInvalidEventException extends CenaException { + public CenaInvalidEventException(String message) { + super(message); + } + +} diff --git a/src/main/java/CenaInvalidTaskIndexException.java b/src/main/java/CenaInvalidTaskIndexException.java new file mode 100644 index 0000000000..a169e2add4 --- /dev/null +++ b/src/main/java/CenaInvalidTaskIndexException.java @@ -0,0 +1,5 @@ +public class CenaInvalidTaskIndexException extends CenaException { + public CenaInvalidTaskIndexException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/java/CenaInvalidTodoException.java b/src/main/java/CenaInvalidTodoException.java new file mode 100644 index 0000000000..344fd95ba5 --- /dev/null +++ b/src/main/java/CenaInvalidTodoException.java @@ -0,0 +1,6 @@ +public class CenaInvalidTodoException extends CenaException { + public CenaInvalidTodoException(String message) { + super(message); + } + +} diff --git a/src/main/java/CenaUnknownCommandException.java b/src/main/java/CenaUnknownCommandException.java new file mode 100644 index 0000000000..f125c57717 --- /dev/null +++ b/src/main/java/CenaUnknownCommandException.java @@ -0,0 +1,5 @@ +public class CenaUnknownCommandException extends CenaException { + public CenaUnknownCommandException(String message) { + super(message); + } +} \ No newline at end of file From d0f61dc16db74781bca18167f02f8a3dad9c02d3 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Sun, 1 Sep 2024 01:17:31 +0800 Subject: [PATCH 11/55] Implement comprehensive error handling for John Cena --- src/main/java/JohnCena.java | 141 ++++++++++++++++++++++++------------ 1 file changed, 94 insertions(+), 47 deletions(-) diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index 0764cadc33..7d7f48c65e 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -1,3 +1,5 @@ +import java.io.File; +import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; @@ -5,75 +7,120 @@ public class JohnCena { private static ArrayList tasks = new ArrayList<>(); public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); + Scanner scanner; + if (args.length > 0) { + try { + scanner = new Scanner(new File(args[0])); + } catch (FileNotFoundException e) { + System.out.println("File not found"); + return; + } + } else { + scanner = new Scanner(System.in); + } System.out.println("____________________________________________________________"); System.out.println(" Hello! I'm John Cena"); System.out.println(" What can I do for you?"); System.out.println("____________________________________________________________"); - while (true) { + while (scanner.hasNextLine()) { String input = scanner.nextLine(); - if (input.equals("bye")) { - System.out.println("____________________________________________________________"); - System.out.println(" Bye. Hope to see you again soon!"); - System.out.println("____________________________________________________________"); - break; - } else if (input.equals("list")) { + try { + handleInput(input); + } catch (CenaException e) { System.out.println("____________________________________________________________"); - System.out.println(" Here are the tasks in your list:"); - for (int i = 0; i < tasks.size(); i++) { - System.out.println(" " + (i + 1) + "." + tasks.get(i)); - } + System.out.println(" OOPS!!! " + e.getMessage()); System.out.println("____________________________________________________________"); - } else if (input.startsWith("mark ")) { + } + } + + scanner.close(); + } + + + private static void handleInput(String input) throws CenaException { + if (input.equals("bye")) { + System.out.println("____________________________________________________________"); + System.out.println(" Bye. Hope to see you again soon!"); + System.out.println("____________________________________________________________"); + System.exit(0); + } else if (input.equals("list")) { + System.out.println("____________________________________________________________"); + System.out.println(" Here are the tasks in your list:"); + for (int i = 0; i < tasks.size(); i++) { + System.out.println(" " + (i + 1) + "." + tasks.get(i)); + } + System.out.println("____________________________________________________________"); + } else if (input.startsWith("mark ")) { + try { int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; + if (taskIndex < 0 || taskIndex >= tasks.size()) { + throw new CenaInvalidTaskIndexException("The task index is invalid."); + } tasks.get(taskIndex).markAsDone(); System.out.println("____________________________________________________________"); System.out.println(" Nice! I've marked this task as done:"); System.out.println(" " + tasks.get(taskIndex)); System.out.println("____________________________________________________________"); - } else if (input.startsWith("unmark ")) { + } catch (NumberFormatException e) { + throw new CenaInvalidTaskIndexException("The task index must be a number."); + } + } else if (input.startsWith("unmark ")) { + try { int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; + if (taskIndex < 0 || taskIndex >= tasks.size()) { + throw new CenaInvalidTaskIndexException("The task index is invalid."); + } tasks.get(taskIndex).markAsNotDone(); System.out.println("____________________________________________________________"); System.out.println(" OK, I've marked this task as not done yet:"); System.out.println(" " + tasks.get(taskIndex)); System.out.println("____________________________________________________________"); - } else if (input.startsWith("todo ")) { - String description = input.substring(5); - Task task = new Todo(description); - tasks.add(task); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } else if (input.startsWith("deadline ")) { - String[] parts = input.substring(9).split(" /by "); - Task task = new Deadline(parts[0], parts[1]); - tasks.add(task); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } else if (input.startsWith("event ")) { - String[] parts = input.substring(6).split(" /from | /to "); - Task task = new Event(parts[0], parts[1], parts[2]); - tasks.add(task); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } else { - System.out.println("____________________________________________________________"); - System.out.println(" Invalid command."); - System.out.println("____________________________________________________________"); + } catch (NumberFormatException e) { + throw new CenaInvalidTaskIndexException("The task index must be a number."); + } + } else if (input.startsWith("todo ")) { + String description = input.substring(5).trim(); + if (description.isEmpty()) { + throw new CenaEmptyDescriptionException("The description of a todo cannot be empty."); + } + if (description.contains("/by") || description.contains("/from") || description.contains("/to")) { + throw new CenaInvalidTodoException("A todo should not contain /by, /from, or /to."); + } + Task task = new Todo(description); + tasks.add(task); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } else if (input.startsWith("deadline ")) { + String[] parts = input.substring(9).split(" /by "); + if (parts.length < 2 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty()) { + throw new CenaInvalidDeadlineException("Incorrect description for deadline. It should contain only /by."); } + Task task = new Deadline(parts[0], parts[1]); + tasks.add(task); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } else if (input.startsWith("event ")) { + String[] parts = input.substring(6).split(" /from | /to "); + if (parts.length < 3 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty() || parts[2].trim().isEmpty()) { + throw new CenaInvalidEventException("Incorrect description for event. It should contain /from and /to."); + } + Task task = new Event(parts[0], parts[1], parts[2]); + tasks.add(task); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } else { + throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-(\n Please use a valid command (todo, deadline or event)"); } - - scanner.close(); } } \ No newline at end of file From 5f45409c7c89e1a7d19d82f1e85fecdfd2989dcc Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Sun, 1 Sep 2024 01:25:06 +0800 Subject: [PATCH 12/55] Add support for deleting tasks --- src/main/java/JohnCena.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index 7d7f48c65e..2be16a9d91 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -119,6 +119,21 @@ private static void handleInput(String input) throws CenaException { System.out.println(" " + task); System.out.println(" Now you have " + tasks.size() + " tasks in the list."); System.out.println("____________________________________________________________"); + } else if (input.startsWith("delete ")) { + try { + int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; + if (taskIndex < 0 || taskIndex >= tasks.size()) { + throw new CenaInvalidTaskIndexException("The task index is invalid."); + } + Task removedTask = tasks.remove(taskIndex); + System.out.println("____________________________________________________________"); + System.out.println(" Noted. I've removed this task:"); + System.out.println(" " + removedTask); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } catch (NumberFormatException e) { + throw new CenaInvalidTaskIndexException("The task index must be a number."); + } } else { throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-(\n Please use a valid command (todo, deadline or event)"); } From 99473b0c5d943f402487ff86553dd4bc19e7d9ec Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Wed, 4 Sep 2024 11:04:24 +0800 Subject: [PATCH 13/55] Add Ascii logo --- .gitignore | 4 ++++ src/main/java/JohnCena.java | 25 ++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2873e189e1..2b2f935869 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,7 @@ bin/ /text-ui-test/ACTUAL.TXT text-ui-test/EXPECTED-UNIX.TXT + +# Temp files +src/main/java/temp.java + diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index 2be16a9d91..9df8130a7c 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -6,6 +6,25 @@ public class JohnCena { private static ArrayList tasks = new ArrayList<>(); + private static final String logo = + " JJJJJJJJJJJ hhhhhhh CCCCCCCCCCCCC \n" + + " J:::::::::J h:::::h CCC::::::::::::C \n" + + " J:::::::::J h:::::h CC:::::::::::::::C \n" + + " JJ:::::::JJ h:::::h C:::::CCCCCCCC::::C \n" + + " J:::::J ooooooooooo h::::h hhhhh nnnn nnnnnnnn C:::::C CCCCCC eeeeeeeeeeee nnnn nnnnnnnn aaaaaaaaaaaaa \n" + + " J:::::J oo:::::::::::oo h::::hh:::::hhh n:::nn::::::::nn C:::::C ee::::::::::::ee n:::nn::::::::nn a::::::::::::a \n" + + " J:::::Jo:::::::::::::::oh::::::::::::::hh n::::::::::::::nn C:::::C e::::::eeeee:::::een::::::::::::::nn aaaaaaaaa:::::a \n" + + " J:::::jo:::::ooooo:::::oh:::::::hhh::::::hnn:::::::::::::::n C:::::C e::::::e e:::::enn:::::::::::::::n a::::a \n" + + " J:::::Jo::::o o::::oh::::::h h::::::h n:::::nnnn:::::n C:::::C e:::::::eeeee::::::e n:::::nnnn:::::n aaaaaaa:::::a \n" + + "JJJJJJJ J:::::Jo::::o o::::oh:::::h h:::::h n::::n n::::n C:::::C e:::::::::::::::::e n::::n n::::n aa::::::::::::a \n" + + "J:::::J J:::::Jo::::o o::::oh:::::h h:::::h n::::n n::::n C:::::C e::::::eeeeeeeeeee n::::n n::::n a::::aaaa::::::a \n" + + "J::::::J J::::::Jo::::o o::::oh:::::h h:::::h n::::n n::::n C:::::C CCCCCCe:::::::e n::::n n::::na::::a a:::::a \n" + + "J:::::::JJJ:::::::Jo:::::ooooo:::::oh:::::h h:::::h n::::n n::::n C:::::CCCCCCCC::::Ce::::::::e n::::n n::::na::::a a:::::a \n" + + " JJ:::::::::::::JJ o:::::::::::::::oh:::::h h:::::h n::::n n::::n CC:::::::::::::::C e::::::::eeeeeeee n::::n n::::na:::::aaaa::::::a \n" + + " JJ:::::::::JJ oo:::::::::::oo h:::::h h:::::h n::::n n::::n CCC::::::::::::C ee:::::::::::::e n::::n n::::n a::::::::::aa:::a\n" + + " JJJJJJJJJ ooooooooooo hhhhhhh hhhhhhh nnnnnn nnnnnn CCCCCCCCCCCCC eeeeeeeeeeeeee nnnnnn nnnnnn aaaaaaaaaa aaaa\n"; + + public static void main(String[] args) { Scanner scanner; if (args.length > 0) { @@ -20,7 +39,8 @@ public static void main(String[] args) { } System.out.println("____________________________________________________________"); - System.out.println(" Hello! I'm John Cena"); + System.out.println("Hello from\n" + logo); + //System.out.println(" Hello! I'm John Cena"); System.out.println(" What can I do for you?"); System.out.println("____________________________________________________________"); @@ -43,6 +63,9 @@ private static void handleInput(String input) throws CenaException { if (input.equals("bye")) { System.out.println("____________________________________________________________"); System.out.println(" Bye. Hope to see you again soon!"); + System.out.println("This was"); + System.out.println(logo); + System.out.println("signing off!"); System.out.println("____________________________________________________________"); System.exit(0); } else if (input.equals("list")) { From 7f338a836acd5bdcd4bf3980eb60539282ce6ba1 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 13 Sep 2024 11:53:55 +0800 Subject: [PATCH 14/55] Add JavaDocs comments --- .../java/CenaEmptyDescriptionException.java | 13 +++++- src/main/java/CenaException.java | 11 ++++- .../java/CenaInvalidDeadlineException.java | 9 ++++ src/main/java/CenaInvalidEventException.java | 12 +++++- .../java/CenaInvalidTaskIndexException.java | 9 ++++ src/main/java/CenaInvalidTodoException.java | 12 +++++- .../java/CenaUnknownCommandException.java | 10 +++++ src/main/java/Deadline.java | 25 +++++++++++ src/main/java/Event.java | 35 ++++++++++++++++ src/main/java/JohnCena.java | 29 ++++++++++--- src/main/java/Task.java | 41 ++++++++++++++++++- src/main/java/Todo.java | 18 +++++++- 12 files changed, 210 insertions(+), 14 deletions(-) diff --git a/src/main/java/CenaEmptyDescriptionException.java b/src/main/java/CenaEmptyDescriptionException.java index 516baeb42c..6d5a43ac8a 100644 --- a/src/main/java/CenaEmptyDescriptionException.java +++ b/src/main/java/CenaEmptyDescriptionException.java @@ -1,6 +1,15 @@ + +/** + * This class represents an exception that is thrown when an empty description is encountered. + */ public class CenaEmptyDescriptionException extends CenaException { + + /** + * Constructs a new CenaEmptyDescriptionException with the specified detail message. + * + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + */ public CenaEmptyDescriptionException(String message) { super(message); } - -} +} \ No newline at end of file diff --git a/src/main/java/CenaException.java b/src/main/java/CenaException.java index 9d42cf955c..640f81004e 100644 --- a/src/main/java/CenaException.java +++ b/src/main/java/CenaException.java @@ -1,6 +1,15 @@ + +/** + * This class represents a general exception for the Cena application. + */ public class CenaException extends Exception { + + /** + * Constructs a new CenaException with the specified detail message. + * + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + */ public CenaException(String message) { super(message); } - } \ No newline at end of file diff --git a/src/main/java/CenaInvalidDeadlineException.java b/src/main/java/CenaInvalidDeadlineException.java index a98aa215d7..be773e69d7 100644 --- a/src/main/java/CenaInvalidDeadlineException.java +++ b/src/main/java/CenaInvalidDeadlineException.java @@ -1,4 +1,13 @@ +/** + * This class represents an exception that is thrown when an invalid deadline is encountered. + */ public class CenaInvalidDeadlineException extends CenaException { + + /** + * Constructs a new CenaInvalidDeadlineException with the specified detail message. + * + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + */ public CenaInvalidDeadlineException(String message) { super(message); } diff --git a/src/main/java/CenaInvalidEventException.java b/src/main/java/CenaInvalidEventException.java index a9af3eda24..5a43ca3fb9 100644 --- a/src/main/java/CenaInvalidEventException.java +++ b/src/main/java/CenaInvalidEventException.java @@ -1,6 +1,14 @@ +/** + * This class represents an exception that is thrown when an invalid event is encountered. + */ public class CenaInvalidEventException extends CenaException { + + /** + * Constructs a new CenaInvalidEventException with the specified detail message. + * + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + */ public CenaInvalidEventException(String message) { super(message); } - -} +} \ No newline at end of file diff --git a/src/main/java/CenaInvalidTaskIndexException.java b/src/main/java/CenaInvalidTaskIndexException.java index a169e2add4..319f16794c 100644 --- a/src/main/java/CenaInvalidTaskIndexException.java +++ b/src/main/java/CenaInvalidTaskIndexException.java @@ -1,4 +1,13 @@ +/** + * This class represents an exception that is thrown when an invalid task index is encountered. + */ public class CenaInvalidTaskIndexException extends CenaException { + + /** + * Constructs a new CenaInvalidTaskIndexException with the specified detail message. + * + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + */ public CenaInvalidTaskIndexException(String message) { super(message); } diff --git a/src/main/java/CenaInvalidTodoException.java b/src/main/java/CenaInvalidTodoException.java index 344fd95ba5..26d30ddab0 100644 --- a/src/main/java/CenaInvalidTodoException.java +++ b/src/main/java/CenaInvalidTodoException.java @@ -1,6 +1,14 @@ +/** + * This class represents an exception that is thrown when an invalid todo is encountered. + */ public class CenaInvalidTodoException extends CenaException { + + /** + * Constructs a new CenaInvalidTodoException with the specified detail message. + * + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + */ public CenaInvalidTodoException(String message) { super(message); } - -} +} \ No newline at end of file diff --git a/src/main/java/CenaUnknownCommandException.java b/src/main/java/CenaUnknownCommandException.java index f125c57717..57ab69fcd7 100644 --- a/src/main/java/CenaUnknownCommandException.java +++ b/src/main/java/CenaUnknownCommandException.java @@ -1,4 +1,14 @@ + +/** + * This class represents an exception that is thrown when an unknown command is encountered. + */ public class CenaUnknownCommandException extends CenaException { + + /** + * Constructs a new CenaUnknownCommandException with the specified detail message. + * + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + */ public CenaUnknownCommandException(String message) { super(message); } diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index 95928fb5fb..231f105b7e 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -1,11 +1,36 @@ + +/** + * Represents a deadline task. + * A Deadline object corresponds to a task represented by a description and a deadline date. + */ public class Deadline extends Task { protected String by; + /** + * Constructor for Deadline class. + * + * @param description The description of the task. + * @param by The deadline of the task. + */ public Deadline(String description, String by) { super(description); this.by = by; } + /** + * Returns the deadline of the task. + * + * @return Deadline of the task. + */ + public String getBy() { + return this.by; + } + + /** + * Returns a string representation of the task. + * + * @return String representation of the task. + */ @Override public String toString() { return "[D]" + super.toString() + " (by: " + by + ")"; diff --git a/src/main/java/Event.java b/src/main/java/Event.java index 6f589acab8..ffe29433cd 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -1,13 +1,48 @@ + +/** + * Represents an event task. + * An Event object corresponds to a task represented by a description, a start time, and an end time. + */ public class Event extends Task { protected String from; protected String to; + /** + * Constructor for Event class. + * + * @param description The description of the task. + * @param from The start time of the event. + * @param to The end time of the event. + */ public Event(String description, String from, String to) { super(description); this.from = from; this.to = to; } + /** + * Returns the start time of the event. + * + * @return Start time of the event. + */ + public String getFrom() { + return this.from; + } + + /** + * Returns the end time of the event. + * + * @return End time of the event. + */ + public String getTo() { + return this.to; + } + + /** + * Returns a string representation of the task. + * + * @return String representation of the task. + */ @Override public String toString() { return "[E]" + super.toString() + " (from: " + from + " to: " + to + ")"; diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index 9df8130a7c..c07871e628 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -26,6 +26,9 @@ public class JohnCena { public static void main(String[] args) { + + tasks = Storage.loadTasks(); + //hello(); Scanner scanner; if (args.length > 0) { try { @@ -38,11 +41,13 @@ public static void main(String[] args) { scanner = new Scanner(System.in); } - System.out.println("____________________________________________________________"); - System.out.println("Hello from\n" + logo); - //System.out.println(" Hello! I'm John Cena"); - System.out.println(" What can I do for you?"); - System.out.println("____________________________________________________________"); + hello(); +// +// System.out.println("____________________________________________________________"); +// System.out.println("Hello from\n" + logo); +// //System.out.println(" Hello! I'm John Cena"); +// System.out.println(" What can I do for you?"); +// System.out.println("____________________________________________________________"); while (scanner.hasNextLine()) { String input = scanner.nextLine(); @@ -82,6 +87,7 @@ private static void handleInput(String input) throws CenaException { throw new CenaInvalidTaskIndexException("The task index is invalid."); } tasks.get(taskIndex).markAsDone(); + Storage.saveTasks(tasks); System.out.println("____________________________________________________________"); System.out.println(" Nice! I've marked this task as done:"); System.out.println(" " + tasks.get(taskIndex)); @@ -96,6 +102,7 @@ private static void handleInput(String input) throws CenaException { throw new CenaInvalidTaskIndexException("The task index is invalid."); } tasks.get(taskIndex).markAsNotDone(); + Storage.saveTasks(tasks); System.out.println("____________________________________________________________"); System.out.println(" OK, I've marked this task as not done yet:"); System.out.println(" " + tasks.get(taskIndex)); @@ -113,6 +120,7 @@ private static void handleInput(String input) throws CenaException { } Task task = new Todo(description); tasks.add(task); + Storage.saveTasks(tasks); System.out.println("____________________________________________________________"); System.out.println(" Got it. I've added this task:"); System.out.println(" " + task); @@ -125,6 +133,7 @@ private static void handleInput(String input) throws CenaException { } Task task = new Deadline(parts[0], parts[1]); tasks.add(task); + Storage.saveTasks(tasks); System.out.println("____________________________________________________________"); System.out.println(" Got it. I've added this task:"); System.out.println(" " + task); @@ -137,6 +146,7 @@ private static void handleInput(String input) throws CenaException { } Task task = new Event(parts[0], parts[1], parts[2]); tasks.add(task); + Storage.saveTasks(tasks); System.out.println("____________________________________________________________"); System.out.println(" Got it. I've added this task:"); System.out.println(" " + task); @@ -149,6 +159,7 @@ private static void handleInput(String input) throws CenaException { throw new CenaInvalidTaskIndexException("The task index is invalid."); } Task removedTask = tasks.remove(taskIndex); + Storage.saveTasks(tasks); System.out.println("____________________________________________________________"); System.out.println(" Noted. I've removed this task:"); System.out.println(" " + removedTask); @@ -161,4 +172,12 @@ private static void handleInput(String input) throws CenaException { throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-(\n Please use a valid command (todo, deadline or event)"); } } + + private static void hello() { + System.out.println("____________________________________________________________"); + System.out.println("Hello from\n" + logo); + //System.out.println(" Hello! I'm John Cena"); + System.out.println(" What can I do for you?"); + System.out.println("____________________________________________________________"); + } } \ No newline at end of file diff --git a/src/main/java/Task.java b/src/main/java/Task.java index c5e53728ae..3d18742e34 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,30 +1,69 @@ +/** + * Represents a task. + * A Task object corresponds to a task represented by a description and a completion status. + */ public class Task { private String description; private boolean isDone; + /** + * Constructor for Task class. + * + * @param description The description of the task. + */ public Task(String description) { this.description = description; this.isDone = false; } + /** + * Marks the task as done. + */ public void markAsDone() { this.isDone = true; } + /** + * Marks the task as not done. + */ public void markAsNotDone() { this.isDone = false; } + /** + * Returns the status icon of the task. + * + * @return Status icon of the task. + */ public String getStatusIcon() { return (isDone ? "X" : " "); // mark done task with X } + /** + * Returns the description of the task. + * + * @return Description of the task. + */ public String getDescription() { return this.description; } + /** + * Checks if the task is done. + * + * @return Completion status of the task. + */ + public boolean isTaskDone() { + return this.isDone; + } + + /** + * Returns a string representation of the task. + * + * @return String representation of the task. + */ @Override public String toString() { return "[" + this.getStatusIcon() + "] " + this.description; } -} +} \ No newline at end of file diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index eabef3ab8f..1b92292445 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -1,10 +1,26 @@ + +/** + * Represents a todo task. + * A Todo object corresponds to a task represented by a description. + */ public class Todo extends Task { + + /** + * Constructor for Todo class. + * + * @param description The description of the task. + */ public Todo(String description) { super(description); } + /** + * Returns a string representation of the task. + * + * @return String representation of the task. + */ @Override public String toString() { return "[T]" + super.toString(); } -} +} \ No newline at end of file From 2af47284d19eb0e50beef5c7dc088920a02ad4fe Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 13 Sep 2024 11:54:24 +0800 Subject: [PATCH 15/55] Add saveTasks and LoadTasks --- data/CenaTaskList.txt | 5 ++ src/main/java/Storage.java | 129 +++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 data/CenaTaskList.txt create mode 100644 src/main/java/Storage.java diff --git a/data/CenaTaskList.txt b/data/CenaTaskList.txt new file mode 100644 index 0000000000..ba1b7afd49 --- /dev/null +++ b/data/CenaTaskList.txt @@ -0,0 +1,5 @@ +T | 0 | eat +T | 1 | swim +T | 0 | sleep +D | 0 | cs2103 | tonight +E | 0 | cs2100 | 9am - 10am diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java new file mode 100644 index 0000000000..fc3a3e5047 --- /dev/null +++ b/src/main/java/Storage.java @@ -0,0 +1,129 @@ +import java.io.*; +import java.util.ArrayList; +import java.util.Arrays; + +/** + * This class is responsible for saving and loading tasks from a file. + */ +public class Storage { + private static final String FILE_PATH = "./data/CenaTaskList.txt"; + public static final String SEPARATOR = " | "; + + /** + * Saves the list of tasks to a file. + * + * @param tasks The list of tasks to save. + */ + public static void saveTasks(ArrayList tasks) { + try { + FileWriter fw = new FileWriter(FILE_PATH); + for (Task task : tasks) { + fw.write(toSaveString(task) + System.lineSeparator()); + } + fw.close(); + } catch (IOException e) { + System.out.println("Error: " + e.getMessage()); + } + } + + /** + * Loads the list of tasks from a file. + * + * @return The list of tasks loaded from the file. + */ + public static ArrayList loadTasks() { + ArrayList tasks = new ArrayList<>(); + try { + File file = new File(FILE_PATH); + + // check if directory or file do not exist + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + if (!file.exists()) { + file.createNewFile(); + } + + BufferedReader reader = new BufferedReader(new FileReader(file)); + String line; + while ((line = reader.readLine()) != null) { + try { + // Assuming the toString method of Task class returns a string that can be used to recreate the task + tasks.add(parseTask(line)); + } catch (CenaException e) { + System.out.println(e.getMessage()); + } + } + reader.close(); + + } catch (IOException e) { + System.out.println("Error: " + e.getMessage()); + } + return tasks; + } + + + /** + * Parses a line from the file into a Task object. + * + * @param line The line to parse. + * @return The Task object created from the line. + * @throws CenaException If the line cannot be parsed into a Task object. + */ + private static Task parseTask(String line) throws CenaException { + Task task = null; + String[] taskDescription = line.trim().split("\\s*\\|\\s*"); + String taskType = taskDescription[0]; + System.out.println(Arrays.toString(taskDescription)); + + switch (taskType) { + case "T": + task = new Todo(taskDescription[2]); + break; + + case "D": + task = new Deadline(taskDescription[2], taskDescription[3]); + break; + + case "E": + String[] eventTimes = taskDescription[3].split(" - "); + task = new Event(taskDescription[2], eventTimes[0], eventTimes[1]); + break; + + + default: + System.out.println("Unknown task type: " + taskType); + break; + } + + boolean isDone = taskDescription[1].equals("1"); + if (task != null && isDone) { + task.markAsDone(); + } + + return task; + } + + /** + * Converts a Task object into a string that can be saved to a file. + * + * @param task The Task object to convert. + * @return The string representation of the Task object. + */ + private static String toSaveString(Task task) { + String taskStatus = task.isTaskDone() ? "1" : "0"; + String taskDescription = ""; + + if (task instanceof Todo todo) { + taskDescription = "T" + SEPARATOR + taskStatus + SEPARATOR + todo.getDescription(); + } else if (task instanceof Deadline deadline) { + taskDescription = "D" + SEPARATOR + taskStatus + SEPARATOR + deadline.getDescription() + SEPARATOR + + deadline.getBy(); + } else if (task instanceof Event event) { + taskDescription = "E" + SEPARATOR + taskStatus + SEPARATOR + event.getDescription() + SEPARATOR + + event.getFrom() + " - " + event.getTo(); + } + + return taskDescription; + } +} \ No newline at end of file From 043e0e1720122f7a01583ddfd2f42c20571c11d0 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 13 Sep 2024 11:59:29 +0800 Subject: [PATCH 16/55] Add CenaTaskList --- data/CenaTaskList.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/CenaTaskList.txt b/data/CenaTaskList.txt index ba1b7afd49..460f04dc87 100644 --- a/data/CenaTaskList.txt +++ b/data/CenaTaskList.txt @@ -2,4 +2,4 @@ T | 0 | eat T | 1 | swim T | 0 | sleep D | 0 | cs2103 | tonight -E | 0 | cs2100 | 9am - 10am +E | 0 | cs2100 | 9am - 10am \ No newline at end of file From e2c7f84488333f28df2a456b88780f00527752de Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 13 Sep 2024 13:40:45 +0800 Subject: [PATCH 17/55] Add time and date parsing, along with on command. Add help command --- data/CenaTaskList.txt | 7 ++- .../java/CenaInvalidDateTimeException.java | 27 ++++++++++ src/main/java/Deadline.java | 24 +++++++-- src/main/java/Event.java | 28 ++++++++--- src/main/java/JohnCena.java | 49 +++++++++++++++---- src/main/java/Storage.java | 7 +-- src/main/java/Task.java | 12 +++++ src/main/java/Todo.java | 12 ++++- 8 files changed, 140 insertions(+), 26 deletions(-) create mode 100644 src/main/java/CenaInvalidDateTimeException.java diff --git a/data/CenaTaskList.txt b/data/CenaTaskList.txt index 460f04dc87..1fb8e88f48 100644 --- a/data/CenaTaskList.txt +++ b/data/CenaTaskList.txt @@ -1,5 +1,8 @@ T | 0 | eat T | 1 | swim T | 0 | sleep -D | 0 | cs2103 | tonight -E | 0 | cs2100 | 9am - 10am \ No newline at end of file +D | 0 | cs2103 | 2024-09-09 2200 +E | 1 | cs2100 | 2024-09-13 1600 ~ 2024-09-13 1800 +D | 0 | cs2101 | 2024-09-16 0900 +E | 0 | presentation | 2024-09-16 0900 ~ 2024-09-16 1200 +D | 0 | cs2109s | 2024-09-15 2359 diff --git a/src/main/java/CenaInvalidDateTimeException.java b/src/main/java/CenaInvalidDateTimeException.java new file mode 100644 index 0000000000..8e0512f326 --- /dev/null +++ b/src/main/java/CenaInvalidDateTimeException.java @@ -0,0 +1,27 @@ + +import java.time.format.DateTimeParseException; + +/** + * This class represents an exception that is thrown when an invalid date time is encountered. + */ +public class CenaInvalidDateTimeException extends Exception { + + /** + * Constructs a new CenaInvalidDateTimeException with the specified detail message. + * + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + */ + public CenaInvalidDateTimeException(String message) { + super(message); + } + + /** + * Constructs a new CenaInvalidDateTimeException with the specified detail message and cause. + * + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + * @param cause the cause of the exception (which is saved for later retrieval by the Throwable.getCause() method). + */ + public CenaInvalidDateTimeException(String message, DateTimeParseException cause) { + super(message, cause); + } +} \ No newline at end of file diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index 231f105b7e..2f88ecca32 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -1,10 +1,14 @@ +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + /** * Represents a deadline task. * A Deadline object corresponds to a task represented by a description and a deadline date. */ public class Deadline extends Task { - protected String by; + protected LocalDateTime by; /** * Constructor for Deadline class. @@ -14,7 +18,7 @@ public class Deadline extends Task { */ public Deadline(String description, String by) { super(description); - this.by = by; + this.by = LocalDateTime.parse(by, DateTimeFormatter.ofPattern("yyyy-MM-dd HHmm")); } /** @@ -23,7 +27,19 @@ public Deadline(String description, String by) { * @return Deadline of the task. */ public String getBy() { - return this.by; + + return this.by.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HHmm")); + } + + /** + * Checks if the task occurs on the given date. + * + * @param date The date to check. + * @return True if the task occurs on the given date, false otherwise. + */ + @Override + public boolean occursOn(LocalDate date) { + return this.by.toLocalDate().equals(date); } /** @@ -33,6 +49,6 @@ public String getBy() { */ @Override public String toString() { - return "[D]" + super.toString() + " (by: " + by + ")"; + return "[D]" + super.toString() + " (by: " + this.getBy() + ")"; } } \ No newline at end of file diff --git a/src/main/java/Event.java b/src/main/java/Event.java index ffe29433cd..2172f85a2c 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -1,11 +1,14 @@ +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.LocalDate; /** * Represents an event task. * An Event object corresponds to a task represented by a description, a start time, and an end time. */ public class Event extends Task { - protected String from; - protected String to; + protected LocalDateTime from; + protected LocalDateTime to; /** * Constructor for Event class. @@ -16,8 +19,8 @@ public class Event extends Task { */ public Event(String description, String from, String to) { super(description); - this.from = from; - this.to = to; + this.from = LocalDateTime.parse(from, DateTimeFormatter.ofPattern("yyyy-MM-dd HHmm")); + this.to = LocalDateTime.parse(to, DateTimeFormatter.ofPattern("yyyy-MM-dd HHmm")); } /** @@ -26,7 +29,7 @@ public Event(String description, String from, String to) { * @return Start time of the event. */ public String getFrom() { - return this.from; + return this.from.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HHmm")); } /** @@ -35,7 +38,18 @@ public String getFrom() { * @return End time of the event. */ public String getTo() { - return this.to; + return this.to.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HHmm")); + } + + /** + * Checks if the task occurs on the given date. + * + * @param date The date to check. + * @return True if the task occurs on the given date, false otherwise. + */ + @Override + public boolean occursOn(LocalDate date) { + return this.from.toLocalDate().equals(date) || this.to.toLocalDate().equals(date); } /** @@ -45,6 +59,6 @@ public String getTo() { */ @Override public String toString() { - return "[E]" + super.toString() + " (from: " + from + " to: " + to + ")"; + return "[E]" + super.toString() + " (from: " + getFrom() + " to: " + getTo() + ")"; } } \ No newline at end of file diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index c07871e628..9c4bd194bf 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -1,7 +1,11 @@ import java.io.File; import java.io.FileNotFoundException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Scanner; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; public class JohnCena { private static ArrayList tasks = new ArrayList<>(); @@ -28,7 +32,7 @@ public class JohnCena { public static void main(String[] args) { tasks = Storage.loadTasks(); - //hello(); + Scanner scanner; if (args.length > 0) { try { @@ -42,12 +46,6 @@ public static void main(String[] args) { } hello(); -// -// System.out.println("____________________________________________________________"); -// System.out.println("Hello from\n" + logo); -// //System.out.println(" Hello! I'm John Cena"); -// System.out.println(" What can I do for you?"); -// System.out.println("____________________________________________________________"); while (scanner.hasNextLine()) { String input = scanner.nextLine(); @@ -168,15 +166,48 @@ private static void handleInput(String input) throws CenaException { } catch (NumberFormatException e) { throw new CenaInvalidTaskIndexException("The task index must be a number."); } + } else if (input.startsWith("on ")) { + try { + String date = input.substring(3).trim(); + LocalDate targetDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + System.out.println("____________________________________________________________"); + System.out.println(" Here are the tasks on " + targetDate.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + ":"); + for (int i = 0; i < tasks.size(); i++) { + Task task = tasks.get(i); + if (task.occursOn(targetDate)) { + System.out.println(" " + (i + 1) + "." + task); + } + } + System.out.println("____________________________________________________________"); + + } catch (DateTimeParseException e) { + System.out.println("The date and time must be in the format yyyy-MM-dd."); + } + } else if (input.equals("hello") || input.equals("hi") || input.equals("hey") || input.equals("yo") || input.equals("sup")) { + hello(); + } else if (input.equals("help") || input.equals("commands") || input.equals("command") || input.equals("cmds") || input.equals("cmd")) { + System.out.println("____________________________________________________________"); + System.out.println("Here are the commands you can use:"); + System.out.println(" bye - Exits the program"); + System.out.println(" list - Lists all tasks"); + System.out.println(" mark [task number] - Marks a task as done"); + System.out.println(" unmark [task number] - Marks a task as not done"); + System.out.println(" delete [task number] - Deletes a task"); + System.out.println(" todo [description] - Adds a todo task"); + System.out.println(" deadline [description] /by [due date] - Adds a deadline task"); + System.out.println(" event [description] /from [start date] /to [end date] - Adds an event task"); + System.out.println(" on [date] - Lists all tasks on a specific date"); + System.out.println(" hello - Displays the welcome message"); + System.out.println(" help - Displays the list of commands"); + System.out.println("____________________________________________________________"); } else { - throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-(\n Please use a valid command (todo, deadline or event)"); + throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-(\n Please use a valid command (see available commands by typing 'help')"); } } private static void hello() { System.out.println("____________________________________________________________"); System.out.println("Hello from\n" + logo); - //System.out.println(" Hello! I'm John Cena"); System.out.println(" What can I do for you?"); System.out.println("____________________________________________________________"); } diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java index fc3a3e5047..0b74229912 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/Storage.java @@ -1,6 +1,8 @@ import java.io.*; import java.util.ArrayList; import java.util.Arrays; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; /** * This class is responsible for saving and loading tasks from a file. @@ -74,7 +76,6 @@ private static Task parseTask(String line) throws CenaException { Task task = null; String[] taskDescription = line.trim().split("\\s*\\|\\s*"); String taskType = taskDescription[0]; - System.out.println(Arrays.toString(taskDescription)); switch (taskType) { case "T": @@ -86,7 +87,7 @@ private static Task parseTask(String line) throws CenaException { break; case "E": - String[] eventTimes = taskDescription[3].split(" - "); + String[] eventTimes = taskDescription[3].split(" ~ "); task = new Event(taskDescription[2], eventTimes[0], eventTimes[1]); break; @@ -121,7 +122,7 @@ private static String toSaveString(Task task) { + deadline.getBy(); } else if (task instanceof Event event) { taskDescription = "E" + SEPARATOR + taskStatus + SEPARATOR + event.getDescription() + SEPARATOR - + event.getFrom() + " - " + event.getTo(); + + event.getFrom() + " ~ " + event.getTo(); } return taskDescription; diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 3d18742e34..6f84360dec 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,3 +1,5 @@ +import java.time.LocalDate; + /** * Represents a task. * A Task object corresponds to a task represented by a description and a completion status. @@ -57,6 +59,16 @@ public boolean isTaskDone() { return this.isDone; } + /** + * Checks if the task occurs on the given date. + * + * @param date The date to check. + * @return True if the task occurs on the given date, false otherwise. + */ + public boolean occursOn(LocalDate date) { + return false; + } + /** * Returns a string representation of the task. * diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index 1b92292445..2c3f5d4c72 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -1,4 +1,4 @@ - +import java.time.LocalDate; /** * Represents a todo task. * A Todo object corresponds to a task represented by a description. @@ -14,6 +14,16 @@ public Todo(String description) { super(description); } + /** + * Checks if the task occurs on the given date. + * + * @param date The date to check. + * @return True if the task occurs on the given date, false otherwise. + */ + @Override + public boolean occursOn(LocalDate date) { + return false; + } /** * Returns a string representation of the task. * From 8d41c75995f8e440beebb9131c29bcd7bd2764b8 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 13 Sep 2024 14:26:48 +0800 Subject: [PATCH 18/55] Add Packages --- data/CenaTaskList.txt | 2 +- src/main/java/JohnCena.java | 185 ++---------------- src/main/java/Parser/InputHandler.java | 179 +++++++++++++++++ src/main/java/{ => Storage}/Storage.java | 25 ++- src/main/java/{ => Tasks}/Deadline.java | 8 +- src/main/java/{ => Tasks}/Event.java | 6 +- src/main/java/{ => Tasks}/Task.java | 6 +- src/main/java/{ => Tasks}/Todo.java | 6 +- src/main/java/art/Logo.java | 27 +++ .../CenaEmptyDescriptionException.java | 3 +- .../java/{ => exceptions}/CenaException.java | 3 +- .../CenaInvalidDateTimeException.java | 5 +- .../CenaInvalidDeadlineException.java | 4 +- .../CenaInvalidEventException.java | 4 +- .../CenaInvalidTaskIndexException.java | 4 +- .../CenaInvalidTodoException.java | 4 +- .../CenaUnknownCommandException.java | 3 +- 17 files changed, 271 insertions(+), 203 deletions(-) create mode 100644 src/main/java/Parser/InputHandler.java rename src/main/java/{ => Storage}/Storage.java (86%) rename src/main/java/{ => Tasks}/Deadline.java (86%) rename src/main/java/{ => Tasks}/Event.java (91%) rename src/main/java/{ => Tasks}/Task.java (91%) rename src/main/java/{ => Tasks}/Todo.java (84%) create mode 100644 src/main/java/art/Logo.java rename src/main/java/{ => exceptions}/CenaEmptyDescriptionException.java (77%) rename src/main/java/{ => exceptions}/CenaException.java (77%) rename src/main/java/{ => exceptions}/CenaInvalidDateTimeException.java (78%) rename src/main/java/{ => exceptions}/CenaInvalidDeadlineException.java (77%) rename src/main/java/{ => exceptions}/CenaInvalidEventException.java (77%) rename src/main/java/{ => exceptions}/CenaInvalidTaskIndexException.java (77%) rename src/main/java/{ => exceptions}/CenaInvalidTodoException.java (77%) rename src/main/java/{ => exceptions}/CenaUnknownCommandException.java (77%) diff --git a/data/CenaTaskList.txt b/data/CenaTaskList.txt index 1fb8e88f48..00be45c99c 100644 --- a/data/CenaTaskList.txt +++ b/data/CenaTaskList.txt @@ -3,6 +3,6 @@ T | 1 | swim T | 0 | sleep D | 0 | cs2103 | 2024-09-09 2200 E | 1 | cs2100 | 2024-09-13 1600 ~ 2024-09-13 1800 -D | 0 | cs2101 | 2024-09-16 0900 +D | 1 | cs2101 | 2024-09-16 0900 E | 0 | presentation | 2024-09-16 0900 ~ 2024-09-16 1200 D | 0 | cs2109s | 2024-09-15 2359 diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index 9c4bd194bf..a3a4413f68 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -1,37 +1,24 @@ +import Storage.Storage; +import Tasks.Task; +import exceptions.*; + import java.io.File; import java.io.FileNotFoundException; -import java.time.LocalDate; import java.util.ArrayList; import java.util.Scanner; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; + +import Parser.InputHandler; + public class JohnCena { private static ArrayList tasks = new ArrayList<>(); - - private static final String logo = - " JJJJJJJJJJJ hhhhhhh CCCCCCCCCCCCC \n" - + " J:::::::::J h:::::h CCC::::::::::::C \n" - + " J:::::::::J h:::::h CC:::::::::::::::C \n" - + " JJ:::::::JJ h:::::h C:::::CCCCCCCC::::C \n" - + " J:::::J ooooooooooo h::::h hhhhh nnnn nnnnnnnn C:::::C CCCCCC eeeeeeeeeeee nnnn nnnnnnnn aaaaaaaaaaaaa \n" - + " J:::::J oo:::::::::::oo h::::hh:::::hhh n:::nn::::::::nn C:::::C ee::::::::::::ee n:::nn::::::::nn a::::::::::::a \n" - + " J:::::Jo:::::::::::::::oh::::::::::::::hh n::::::::::::::nn C:::::C e::::::eeeee:::::een::::::::::::::nn aaaaaaaaa:::::a \n" - + " J:::::jo:::::ooooo:::::oh:::::::hhh::::::hnn:::::::::::::::n C:::::C e::::::e e:::::enn:::::::::::::::n a::::a \n" - + " J:::::Jo::::o o::::oh::::::h h::::::h n:::::nnnn:::::n C:::::C e:::::::eeeee::::::e n:::::nnnn:::::n aaaaaaa:::::a \n" - + "JJJJJJJ J:::::Jo::::o o::::oh:::::h h:::::h n::::n n::::n C:::::C e:::::::::::::::::e n::::n n::::n aa::::::::::::a \n" - + "J:::::J J:::::Jo::::o o::::oh:::::h h:::::h n::::n n::::n C:::::C e::::::eeeeeeeeeee n::::n n::::n a::::aaaa::::::a \n" - + "J::::::J J::::::Jo::::o o::::oh:::::h h:::::h n::::n n::::n C:::::C CCCCCCe:::::::e n::::n n::::na::::a a:::::a \n" - + "J:::::::JJJ:::::::Jo:::::ooooo:::::oh:::::h h:::::h n::::n n::::n C:::::CCCCCCCC::::Ce::::::::e n::::n n::::na::::a a:::::a \n" - + " JJ:::::::::::::JJ o:::::::::::::::oh:::::h h:::::h n::::n n::::n CC:::::::::::::::C e::::::::eeeeeeee n::::n n::::na:::::aaaa::::::a \n" - + " JJ:::::::::JJ oo:::::::::::oo h:::::h h:::::h n::::n n::::n CCC::::::::::::C ee:::::::::::::e n::::n n::::n a::::::::::aa:::a\n" - + " JJJJJJJJJ ooooooooooo hhhhhhh hhhhhhh nnnnnn nnnnnn CCCCCCCCCCCCC eeeeeeeeeeeeee nnnnnn nnnnnn aaaaaaaaaa aaaa\n"; + private static InputHandler inputHandler; public static void main(String[] args) { tasks = Storage.loadTasks(); + inputHandler = new InputHandler(tasks); Scanner scanner; if (args.length > 0) { @@ -45,12 +32,12 @@ public static void main(String[] args) { scanner = new Scanner(System.in); } - hello(); + InputHandler.hello(); while (scanner.hasNextLine()) { String input = scanner.nextLine(); try { - handleInput(input); + inputHandler.handleInput(input); } catch (CenaException e) { System.out.println("____________________________________________________________"); System.out.println(" OOPS!!! " + e.getMessage()); @@ -61,154 +48,4 @@ public static void main(String[] args) { scanner.close(); } - - private static void handleInput(String input) throws CenaException { - if (input.equals("bye")) { - System.out.println("____________________________________________________________"); - System.out.println(" Bye. Hope to see you again soon!"); - System.out.println("This was"); - System.out.println(logo); - System.out.println("signing off!"); - System.out.println("____________________________________________________________"); - System.exit(0); - } else if (input.equals("list")) { - System.out.println("____________________________________________________________"); - System.out.println(" Here are the tasks in your list:"); - for (int i = 0; i < tasks.size(); i++) { - System.out.println(" " + (i + 1) + "." + tasks.get(i)); - } - System.out.println("____________________________________________________________"); - } else if (input.startsWith("mark ")) { - try { - int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; - if (taskIndex < 0 || taskIndex >= tasks.size()) { - throw new CenaInvalidTaskIndexException("The task index is invalid."); - } - tasks.get(taskIndex).markAsDone(); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Nice! I've marked this task as done:"); - System.out.println(" " + tasks.get(taskIndex)); - System.out.println("____________________________________________________________"); - } catch (NumberFormatException e) { - throw new CenaInvalidTaskIndexException("The task index must be a number."); - } - } else if (input.startsWith("unmark ")) { - try { - int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; - if (taskIndex < 0 || taskIndex >= tasks.size()) { - throw new CenaInvalidTaskIndexException("The task index is invalid."); - } - tasks.get(taskIndex).markAsNotDone(); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" OK, I've marked this task as not done yet:"); - System.out.println(" " + tasks.get(taskIndex)); - System.out.println("____________________________________________________________"); - } catch (NumberFormatException e) { - throw new CenaInvalidTaskIndexException("The task index must be a number."); - } - } else if (input.startsWith("todo ")) { - String description = input.substring(5).trim(); - if (description.isEmpty()) { - throw new CenaEmptyDescriptionException("The description of a todo cannot be empty."); - } - if (description.contains("/by") || description.contains("/from") || description.contains("/to")) { - throw new CenaInvalidTodoException("A todo should not contain /by, /from, or /to."); - } - Task task = new Todo(description); - tasks.add(task); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } else if (input.startsWith("deadline ")) { - String[] parts = input.substring(9).split(" /by "); - if (parts.length < 2 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty()) { - throw new CenaInvalidDeadlineException("Incorrect description for deadline. It should contain only /by."); - } - Task task = new Deadline(parts[0], parts[1]); - tasks.add(task); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } else if (input.startsWith("event ")) { - String[] parts = input.substring(6).split(" /from | /to "); - if (parts.length < 3 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty() || parts[2].trim().isEmpty()) { - throw new CenaInvalidEventException("Incorrect description for event. It should contain /from and /to."); - } - Task task = new Event(parts[0], parts[1], parts[2]); - tasks.add(task); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } else if (input.startsWith("delete ")) { - try { - int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; - if (taskIndex < 0 || taskIndex >= tasks.size()) { - throw new CenaInvalidTaskIndexException("The task index is invalid."); - } - Task removedTask = tasks.remove(taskIndex); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Noted. I've removed this task:"); - System.out.println(" " + removedTask); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } catch (NumberFormatException e) { - throw new CenaInvalidTaskIndexException("The task index must be a number."); - } - } else if (input.startsWith("on ")) { - try { - String date = input.substring(3).trim(); - LocalDate targetDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - System.out.println("____________________________________________________________"); - System.out.println(" Here are the tasks on " + targetDate.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + ":"); - for (int i = 0; i < tasks.size(); i++) { - Task task = tasks.get(i); - if (task.occursOn(targetDate)) { - System.out.println(" " + (i + 1) + "." + task); - } - } - System.out.println("____________________________________________________________"); - - } catch (DateTimeParseException e) { - System.out.println("The date and time must be in the format yyyy-MM-dd."); - } - } else if (input.equals("hello") || input.equals("hi") || input.equals("hey") || input.equals("yo") || input.equals("sup")) { - hello(); - } else if (input.equals("help") || input.equals("commands") || input.equals("command") || input.equals("cmds") || input.equals("cmd")) { - System.out.println("____________________________________________________________"); - System.out.println("Here are the commands you can use:"); - System.out.println(" bye - Exits the program"); - System.out.println(" list - Lists all tasks"); - System.out.println(" mark [task number] - Marks a task as done"); - System.out.println(" unmark [task number] - Marks a task as not done"); - System.out.println(" delete [task number] - Deletes a task"); - System.out.println(" todo [description] - Adds a todo task"); - System.out.println(" deadline [description] /by [due date] - Adds a deadline task"); - System.out.println(" event [description] /from [start date] /to [end date] - Adds an event task"); - System.out.println(" on [date] - Lists all tasks on a specific date"); - System.out.println(" hello - Displays the welcome message"); - System.out.println(" help - Displays the list of commands"); - System.out.println("____________________________________________________________"); - } else { - throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-(\n Please use a valid command (see available commands by typing 'help')"); - } - } - - private static void hello() { - System.out.println("____________________________________________________________"); - System.out.println("Hello from\n" + logo); - System.out.println(" What can I do for you?"); - System.out.println("____________________________________________________________"); - } } \ No newline at end of file diff --git a/src/main/java/Parser/InputHandler.java b/src/main/java/Parser/InputHandler.java new file mode 100644 index 0000000000..c9d2d341fc --- /dev/null +++ b/src/main/java/Parser/InputHandler.java @@ -0,0 +1,179 @@ +package Parser; + +import Tasks.Deadline; +import Tasks.Event; +import Tasks.Task; +import Tasks.Todo; +import exceptions.*; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.ArrayList; + +import art.Logo; + +import Storage.Storage; + +/** + * This class is responsible for handling user input and executing the corresponding commands. + */ + +public class InputHandler { + private ArrayList tasks; + + public InputHandler(ArrayList tasks) { + this.tasks = tasks; + } + + + public void handleInput(String input) throws CenaException { + if (input.equals("bye")) { + System.out.println("____________________________________________________________"); + System.out.println(" Bye. Hope to see you again soon!"); + System.out.println("This was"); + System.out.println(Logo.getLogo()); + System.out.println("signing off!"); + System.out.println("____________________________________________________________"); + System.exit(0); + } else if (input.equals("list")) { + System.out.println("____________________________________________________________"); + System.out.println(" Here are the tasks in your list:"); + for (int i = 0; i < tasks.size(); i++) { + System.out.println(" " + (i + 1) + "." + tasks.get(i)); + } + System.out.println("____________________________________________________________"); + } else if (input.startsWith("mark ")) { + try { + int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; + if (taskIndex < 0 || taskIndex >= tasks.size()) { + throw new CenaInvalidTaskIndexException("The task index is invalid."); + } + tasks.get(taskIndex).markAsDone(); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Nice! I've marked this task as done:"); + System.out.println(" " + tasks.get(taskIndex)); + System.out.println("____________________________________________________________"); + } catch (NumberFormatException e) { + throw new CenaInvalidTaskIndexException("The task index must be a number."); + } + } else if (input.startsWith("unmark ")) { + try { + int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; + if (taskIndex < 0 || taskIndex >= tasks.size()) { + throw new CenaInvalidTaskIndexException("The task index is invalid."); + } + tasks.get(taskIndex).markAsNotDone(); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" OK, I've marked this task as not done yet:"); + System.out.println(" " + tasks.get(taskIndex)); + System.out.println("____________________________________________________________"); + } catch (NumberFormatException e) { + throw new CenaInvalidTaskIndexException("The task index must be a number."); + } + } else if (input.startsWith("todo ")) { + String description = input.substring(5).trim(); + if (description.isEmpty()) { + throw new CenaEmptyDescriptionException("The description of a todo cannot be empty."); + } + if (description.contains("/by") || description.contains("/from") || description.contains("/to")) { + throw new CenaInvalidTodoException("A todo should not contain /by, /from, or /to."); + } + Task task = new Todo(description); + tasks.add(task); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } else if (input.startsWith("deadline ")) { + String[] parts = input.substring(9).split(" /by "); + if (parts.length < 2 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty()) { + throw new CenaInvalidDeadlineException("Incorrect description for deadline. It should contain only /by."); + } + Task task = new Deadline(parts[0], parts[1]); + tasks.add(task); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } else if (input.startsWith("event ")) { + String[] parts = input.substring(6).split(" /from | /to "); + if (parts.length < 3 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty() || parts[2].trim().isEmpty()) { + throw new CenaInvalidEventException("Incorrect description for event. It should contain /from and /to."); + } + Task task = new Event(parts[0], parts[1], parts[2]); + tasks.add(task); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } else if (input.startsWith("delete ")) { + try { + int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; + if (taskIndex < 0 || taskIndex >= tasks.size()) { + throw new CenaInvalidTaskIndexException("The task index is invalid."); + } + Task removedTask = tasks.remove(taskIndex); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Noted. I've removed this task:"); + System.out.println(" " + removedTask); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } catch (NumberFormatException e) { + throw new CenaInvalidTaskIndexException("The task index must be a number."); + } + } else if (input.startsWith("on ")) { + try { + String date = input.substring(3).trim(); + LocalDate targetDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + System.out.println("____________________________________________________________"); + System.out.println(" Here are the tasks on " + targetDate.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + ":"); + for (int i = 0; i < tasks.size(); i++) { + Task task = tasks.get(i); + if (task.occursOn(targetDate)) { + System.out.println(" " + (i + 1) + "." + task); + } + } + System.out.println("____________________________________________________________"); + + } catch (DateTimeParseException e) { + System.out.println("The date and time must be in the format yyyy-MM-dd."); + } + } else if (input.equals("hello") || input.equals("hi") || input.equals("hey") || input.equals("yo") || input.equals("sup")) { + hello(); + } else if (input.equals("help") || input.equals("commands") || input.equals("command") || input.equals("cmds") || input.equals("cmd")) { + System.out.println("____________________________________________________________"); + System.out.println("Here are the commands you can use:"); + System.out.println(" bye - Exits the program"); + System.out.println(" list - Lists all tasks"); + System.out.println(" mark [task number] - Marks a task as done"); + System.out.println(" unmark [task number] - Marks a task as not done"); + System.out.println(" delete [task number] - Deletes a task"); + System.out.println(" todo [description] - Adds a todo task"); + System.out.println(" deadline [description] /by [due date] - Adds a deadline task"); + System.out.println(" event [description] /from [start date] /to [end date] - Adds an event task"); + System.out.println(" on [date] - Lists all tasks on a specific date"); + System.out.println(" hello - Displays the welcome message"); + System.out.println(" help - Displays the list of commands"); + System.out.println("____________________________________________________________"); + } else { + throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-(\n Please use a valid command (see available commands by typing 'help')"); + } + } + + public static void hello() { + System.out.println("____________________________________________________________"); + System.out.println("Hello from\n" + Logo.getLogo()); + System.out.println(" What can I do for you?"); + System.out.println("____________________________________________________________"); + } +} \ No newline at end of file diff --git a/src/main/java/Storage.java b/src/main/java/Storage/Storage.java similarity index 86% rename from src/main/java/Storage.java rename to src/main/java/Storage/Storage.java index 0b74229912..92eba37caa 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/Storage/Storage.java @@ -1,8 +1,13 @@ +package Storage; + +import Tasks.Deadline; +import Tasks.Event; +import Tasks.Task; +import Tasks.Todo; +import exceptions.CenaException; + import java.io.*; import java.util.ArrayList; -import java.util.Arrays; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; /** * This class is responsible for saving and loading tasks from a file. @@ -50,7 +55,7 @@ public static ArrayList loadTasks() { String line; while ((line = reader.readLine()) != null) { try { - // Assuming the toString method of Task class returns a string that can be used to recreate the task + // Assuming the toString method of Tasks.Task class returns a string that can be used to recreate the task tasks.add(parseTask(line)); } catch (CenaException e) { System.out.println(e.getMessage()); @@ -66,11 +71,11 @@ public static ArrayList loadTasks() { /** - * Parses a line from the file into a Task object. + * Parses a line from the file into a Tasks.Task object. * * @param line The line to parse. - * @return The Task object created from the line. - * @throws CenaException If the line cannot be parsed into a Task object. + * @return The Tasks.Task object created from the line. + * @throws CenaException If the line cannot be parsed into a Tasks.Task object. */ private static Task parseTask(String line) throws CenaException { Task task = null; @@ -106,10 +111,10 @@ private static Task parseTask(String line) throws CenaException { } /** - * Converts a Task object into a string that can be saved to a file. + * Converts a Tasks.Task object into a string that can be saved to a file. * - * @param task The Task object to convert. - * @return The string representation of the Task object. + * @param task The Tasks.Task object to convert. + * @return The string representation of the Tasks.Task object. */ private static String toSaveString(Task task) { String taskStatus = task.isTaskDone() ? "1" : "0"; diff --git a/src/main/java/Deadline.java b/src/main/java/Tasks/Deadline.java similarity index 86% rename from src/main/java/Deadline.java rename to src/main/java/Tasks/Deadline.java index 2f88ecca32..288c180373 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Tasks/Deadline.java @@ -1,3 +1,5 @@ +package Tasks; + import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -5,13 +7,13 @@ /** * Represents a deadline task. - * A Deadline object corresponds to a task represented by a description and a deadline date. + * A Tasks.Deadline object corresponds to a task represented by a description and a deadline date. */ public class Deadline extends Task { protected LocalDateTime by; /** - * Constructor for Deadline class. + * Constructor for Tasks.Deadline class. * * @param description The description of the task. * @param by The deadline of the task. @@ -24,7 +26,7 @@ public Deadline(String description, String by) { /** * Returns the deadline of the task. * - * @return Deadline of the task. + * @return Tasks.Deadline of the task. */ public String getBy() { diff --git a/src/main/java/Event.java b/src/main/java/Tasks/Event.java similarity index 91% rename from src/main/java/Event.java rename to src/main/java/Tasks/Event.java index 2172f85a2c..c29e0a8327 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Tasks/Event.java @@ -1,17 +1,19 @@ +package Tasks; + import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.LocalDate; /** * Represents an event task. - * An Event object corresponds to a task represented by a description, a start time, and an end time. + * An Tasks.Event object corresponds to a task represented by a description, a start time, and an end time. */ public class Event extends Task { protected LocalDateTime from; protected LocalDateTime to; /** - * Constructor for Event class. + * Constructor for Tasks.Event class. * * @param description The description of the task. * @param from The start time of the event. diff --git a/src/main/java/Task.java b/src/main/java/Tasks/Task.java similarity index 91% rename from src/main/java/Task.java rename to src/main/java/Tasks/Task.java index 6f84360dec..ca99b66a5f 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Tasks/Task.java @@ -1,15 +1,17 @@ +package Tasks; + import java.time.LocalDate; /** * Represents a task. - * A Task object corresponds to a task represented by a description and a completion status. + * A Tasks.Task object corresponds to a task represented by a description and a completion status. */ public class Task { private String description; private boolean isDone; /** - * Constructor for Task class. + * Constructor for Tasks.Task class. * * @param description The description of the task. */ diff --git a/src/main/java/Todo.java b/src/main/java/Tasks/Todo.java similarity index 84% rename from src/main/java/Todo.java rename to src/main/java/Tasks/Todo.java index 2c3f5d4c72..69b8af4711 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Tasks/Todo.java @@ -1,12 +1,14 @@ +package Tasks; + import java.time.LocalDate; /** * Represents a todo task. - * A Todo object corresponds to a task represented by a description. + * A Tasks.Todo object corresponds to a task represented by a description. */ public class Todo extends Task { /** - * Constructor for Todo class. + * Constructor for Tasks.Todo class. * * @param description The description of the task. */ diff --git a/src/main/java/art/Logo.java b/src/main/java/art/Logo.java new file mode 100644 index 0000000000..2b460d6149 --- /dev/null +++ b/src/main/java/art/Logo.java @@ -0,0 +1,27 @@ + +package art; + +public class Logo { + + private static final String logo = + " JJJJJJJJJJJ hhhhhhh CCCCCCCCCCCCC \n" + + " J:::::::::J h:::::h CCC::::::::::::C \n" + + " J:::::::::J h:::::h CC:::::::::::::::C \n" + + " JJ:::::::JJ h:::::h C:::::CCCCCCCC::::C \n" + + " J:::::J ooooooooooo h::::h hhhhh nnnn nnnnnnnn C:::::C CCCCCC eeeeeeeeeeee nnnn nnnnnnnn aaaaaaaaaaaaa \n" + + " J:::::J oo:::::::::::oo h::::hh:::::hhh n:::nn::::::::nn C:::::C ee::::::::::::ee n:::nn::::::::nn a::::::::::::a \n" + + " J:::::Jo:::::::::::::::oh::::::::::::::hh n::::::::::::::nn C:::::C e::::::eeeee:::::een::::::::::::::nn aaaaaaaaa:::::a \n" + + " J:::::jo:::::ooooo:::::oh:::::::hhh::::::hnn:::::::::::::::n C:::::C e::::::e e:::::enn:::::::::::::::n a::::a \n" + + " J:::::Jo::::o o::::oh::::::h h::::::h n:::::nnnn:::::n C:::::C e:::::::eeeee::::::e n:::::nnnn:::::n aaaaaaa:::::a \n" + + "JJJJJJJ J:::::Jo::::o o::::oh:::::h h:::::h n::::n n::::n C:::::C e:::::::::::::::::e n::::n n::::n aa::::::::::::a \n" + + "J:::::J J:::::Jo::::o o::::oh:::::h h:::::h n::::n n::::n C:::::C e::::::eeeeeeeeeee n::::n n::::n a::::aaaa::::::a \n" + + "J::::::J J::::::Jo::::o o::::oh:::::h h:::::h n::::n n::::n C:::::C CCCCCCe:::::::e n::::n n::::na::::a a:::::a \n" + + "J:::::::JJJ:::::::Jo:::::ooooo:::::oh:::::h h:::::h n::::n n::::n C:::::CCCCCCCC::::Ce::::::::e n::::n n::::na::::a a:::::a \n" + + " JJ:::::::::::::JJ o:::::::::::::::oh:::::h h:::::h n::::n n::::n CC:::::::::::::::C e::::::::eeeeeeee n::::n n::::na:::::aaaa::::::a \n" + + " JJ:::::::::JJ oo:::::::::::oo h:::::h h:::::h n::::n n::::n CCC::::::::::::C ee:::::::::::::e n::::n n::::n a::::::::::aa:::a\n" + + " JJJJJJJJJ ooooooooooo hhhhhhh hhhhhhh nnnnnn nnnnnn CCCCCCCCCCCCC eeeeeeeeeeeeee nnnnnn nnnnnn aaaaaaaaaa aaaa\n"; + + public static String getLogo() { + return logo; + } +} \ No newline at end of file diff --git a/src/main/java/CenaEmptyDescriptionException.java b/src/main/java/exceptions/CenaEmptyDescriptionException.java similarity index 77% rename from src/main/java/CenaEmptyDescriptionException.java rename to src/main/java/exceptions/CenaEmptyDescriptionException.java index 6d5a43ac8a..f6177c42d3 100644 --- a/src/main/java/CenaEmptyDescriptionException.java +++ b/src/main/java/exceptions/CenaEmptyDescriptionException.java @@ -1,3 +1,4 @@ +package exceptions; /** * This class represents an exception that is thrown when an empty description is encountered. @@ -5,7 +6,7 @@ public class CenaEmptyDescriptionException extends CenaException { /** - * Constructs a new CenaEmptyDescriptionException with the specified detail message. + * Constructs a new exceptions.CenaEmptyDescriptionException with the specified detail message. * * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. */ diff --git a/src/main/java/CenaException.java b/src/main/java/exceptions/CenaException.java similarity index 77% rename from src/main/java/CenaException.java rename to src/main/java/exceptions/CenaException.java index 640f81004e..fe1d74e785 100644 --- a/src/main/java/CenaException.java +++ b/src/main/java/exceptions/CenaException.java @@ -1,3 +1,4 @@ +package exceptions; /** * This class represents a general exception for the Cena application. @@ -5,7 +6,7 @@ public class CenaException extends Exception { /** - * Constructs a new CenaException with the specified detail message. + * Constructs a new exceptions.CenaException with the specified detail message. * * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. */ diff --git a/src/main/java/CenaInvalidDateTimeException.java b/src/main/java/exceptions/CenaInvalidDateTimeException.java similarity index 78% rename from src/main/java/CenaInvalidDateTimeException.java rename to src/main/java/exceptions/CenaInvalidDateTimeException.java index 8e0512f326..3d40f7ba58 100644 --- a/src/main/java/CenaInvalidDateTimeException.java +++ b/src/main/java/exceptions/CenaInvalidDateTimeException.java @@ -1,3 +1,4 @@ +package exceptions; import java.time.format.DateTimeParseException; @@ -7,7 +8,7 @@ public class CenaInvalidDateTimeException extends Exception { /** - * Constructs a new CenaInvalidDateTimeException with the specified detail message. + * Constructs a new exceptions.CenaInvalidDateTimeException with the specified detail message. * * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. */ @@ -16,7 +17,7 @@ public CenaInvalidDateTimeException(String message) { } /** - * Constructs a new CenaInvalidDateTimeException with the specified detail message and cause. + * Constructs a new exceptions.CenaInvalidDateTimeException with the specified detail message and cause. * * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. * @param cause the cause of the exception (which is saved for later retrieval by the Throwable.getCause() method). diff --git a/src/main/java/CenaInvalidDeadlineException.java b/src/main/java/exceptions/CenaInvalidDeadlineException.java similarity index 77% rename from src/main/java/CenaInvalidDeadlineException.java rename to src/main/java/exceptions/CenaInvalidDeadlineException.java index be773e69d7..e6151b545d 100644 --- a/src/main/java/CenaInvalidDeadlineException.java +++ b/src/main/java/exceptions/CenaInvalidDeadlineException.java @@ -1,10 +1,12 @@ +package exceptions; + /** * This class represents an exception that is thrown when an invalid deadline is encountered. */ public class CenaInvalidDeadlineException extends CenaException { /** - * Constructs a new CenaInvalidDeadlineException with the specified detail message. + * Constructs a new exceptions.CenaInvalidDeadlineException with the specified detail message. * * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. */ diff --git a/src/main/java/CenaInvalidEventException.java b/src/main/java/exceptions/CenaInvalidEventException.java similarity index 77% rename from src/main/java/CenaInvalidEventException.java rename to src/main/java/exceptions/CenaInvalidEventException.java index 5a43ca3fb9..ced7936f65 100644 --- a/src/main/java/CenaInvalidEventException.java +++ b/src/main/java/exceptions/CenaInvalidEventException.java @@ -1,10 +1,12 @@ +package exceptions; + /** * This class represents an exception that is thrown when an invalid event is encountered. */ public class CenaInvalidEventException extends CenaException { /** - * Constructs a new CenaInvalidEventException with the specified detail message. + * Constructs a new exceptions.CenaInvalidEventException with the specified detail message. * * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. */ diff --git a/src/main/java/CenaInvalidTaskIndexException.java b/src/main/java/exceptions/CenaInvalidTaskIndexException.java similarity index 77% rename from src/main/java/CenaInvalidTaskIndexException.java rename to src/main/java/exceptions/CenaInvalidTaskIndexException.java index 319f16794c..78173f28de 100644 --- a/src/main/java/CenaInvalidTaskIndexException.java +++ b/src/main/java/exceptions/CenaInvalidTaskIndexException.java @@ -1,10 +1,12 @@ +package exceptions; + /** * This class represents an exception that is thrown when an invalid task index is encountered. */ public class CenaInvalidTaskIndexException extends CenaException { /** - * Constructs a new CenaInvalidTaskIndexException with the specified detail message. + * Constructs a new exceptions.CenaInvalidTaskIndexException with the specified detail message. * * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. */ diff --git a/src/main/java/CenaInvalidTodoException.java b/src/main/java/exceptions/CenaInvalidTodoException.java similarity index 77% rename from src/main/java/CenaInvalidTodoException.java rename to src/main/java/exceptions/CenaInvalidTodoException.java index 26d30ddab0..0f4725bf12 100644 --- a/src/main/java/CenaInvalidTodoException.java +++ b/src/main/java/exceptions/CenaInvalidTodoException.java @@ -1,10 +1,12 @@ +package exceptions; + /** * This class represents an exception that is thrown when an invalid todo is encountered. */ public class CenaInvalidTodoException extends CenaException { /** - * Constructs a new CenaInvalidTodoException with the specified detail message. + * Constructs a new exceptions.CenaInvalidTodoException with the specified detail message. * * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. */ diff --git a/src/main/java/CenaUnknownCommandException.java b/src/main/java/exceptions/CenaUnknownCommandException.java similarity index 77% rename from src/main/java/CenaUnknownCommandException.java rename to src/main/java/exceptions/CenaUnknownCommandException.java index 57ab69fcd7..6e0d465c5d 100644 --- a/src/main/java/CenaUnknownCommandException.java +++ b/src/main/java/exceptions/CenaUnknownCommandException.java @@ -1,3 +1,4 @@ +package exceptions; /** * This class represents an exception that is thrown when an unknown command is encountered. @@ -5,7 +6,7 @@ public class CenaUnknownCommandException extends CenaException { /** - * Constructs a new CenaUnknownCommandException with the specified detail message. + * Constructs a new exceptions.CenaUnknownCommandException with the specified detail message. * * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. */ From d16449fcc5dad8c318636bba827b697f5e731fdd Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 13 Sep 2024 14:41:47 +0800 Subject: [PATCH 19/55] Change package names to begin with small letter --- src/main/java/JohnCena.java | 6 ++--- .../java/{Parser => parser}/InputHandler.java | 12 +++++----- .../java/{Storage => storage}/Storage.java | 24 +++++++++---------- src/main/java/{Tasks => tasks}/Deadline.java | 8 +++---- src/main/java/{Tasks => tasks}/Event.java | 6 ++--- src/main/java/{Tasks => tasks}/Task.java | 6 ++--- src/main/java/{Tasks => tasks}/Todo.java | 6 ++--- 7 files changed, 34 insertions(+), 34 deletions(-) rename src/main/java/{Parser => parser}/InputHandler.java (98%) rename src/main/java/{Storage => storage}/Storage.java (88%) rename src/main/java/{Tasks => tasks}/Deadline.java (88%) rename src/main/java/{Tasks => tasks}/Event.java (93%) rename src/main/java/{Tasks => tasks}/Task.java (93%) rename src/main/java/{Tasks => tasks}/Todo.java (86%) diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index a3a4413f68..c5ef2ee27f 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -1,5 +1,5 @@ -import Storage.Storage; -import Tasks.Task; +import storage.Storage; +import tasks.Task; import exceptions.*; import java.io.File; @@ -7,7 +7,7 @@ import java.util.ArrayList; import java.util.Scanner; -import Parser.InputHandler; +import parser.InputHandler; public class JohnCena { diff --git a/src/main/java/Parser/InputHandler.java b/src/main/java/parser/InputHandler.java similarity index 98% rename from src/main/java/Parser/InputHandler.java rename to src/main/java/parser/InputHandler.java index c9d2d341fc..1f3888ebe2 100644 --- a/src/main/java/Parser/InputHandler.java +++ b/src/main/java/parser/InputHandler.java @@ -1,9 +1,9 @@ -package Parser; +package parser; -import Tasks.Deadline; -import Tasks.Event; -import Tasks.Task; -import Tasks.Todo; +import tasks.Deadline; +import tasks.Event; +import tasks.Task; +import tasks.Todo; import exceptions.*; import java.time.LocalDate; @@ -13,7 +13,7 @@ import art.Logo; -import Storage.Storage; +import storage.Storage; /** * This class is responsible for handling user input and executing the corresponding commands. diff --git a/src/main/java/Storage/Storage.java b/src/main/java/storage/Storage.java similarity index 88% rename from src/main/java/Storage/Storage.java rename to src/main/java/storage/Storage.java index 92eba37caa..c4744026f4 100644 --- a/src/main/java/Storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -1,9 +1,9 @@ -package Storage; +package storage; -import Tasks.Deadline; -import Tasks.Event; -import Tasks.Task; -import Tasks.Todo; +import tasks.Deadline; +import tasks.Event; +import tasks.Task; +import tasks.Todo; import exceptions.CenaException; import java.io.*; @@ -55,7 +55,7 @@ public static ArrayList loadTasks() { String line; while ((line = reader.readLine()) != null) { try { - // Assuming the toString method of Tasks.Task class returns a string that can be used to recreate the task + // Assuming the toString method of tasks.Task class returns a string that can be used to recreate the task tasks.add(parseTask(line)); } catch (CenaException e) { System.out.println(e.getMessage()); @@ -71,11 +71,11 @@ public static ArrayList loadTasks() { /** - * Parses a line from the file into a Tasks.Task object. + * Parses a line from the file into a tasks.Task object. * * @param line The line to parse. - * @return The Tasks.Task object created from the line. - * @throws CenaException If the line cannot be parsed into a Tasks.Task object. + * @return The tasks.Task object created from the line. + * @throws CenaException If the line cannot be parsed into a tasks.Task object. */ private static Task parseTask(String line) throws CenaException { Task task = null; @@ -111,10 +111,10 @@ private static Task parseTask(String line) throws CenaException { } /** - * Converts a Tasks.Task object into a string that can be saved to a file. + * Converts a tasks.Task object into a string that can be saved to a file. * - * @param task The Tasks.Task object to convert. - * @return The string representation of the Tasks.Task object. + * @param task The tasks.Task object to convert. + * @return The string representation of the tasks.Task object. */ private static String toSaveString(Task task) { String taskStatus = task.isTaskDone() ? "1" : "0"; diff --git a/src/main/java/Tasks/Deadline.java b/src/main/java/tasks/Deadline.java similarity index 88% rename from src/main/java/Tasks/Deadline.java rename to src/main/java/tasks/Deadline.java index 288c180373..bd021299f4 100644 --- a/src/main/java/Tasks/Deadline.java +++ b/src/main/java/tasks/Deadline.java @@ -1,4 +1,4 @@ -package Tasks; +package tasks; import java.time.LocalDate; import java.time.LocalDateTime; @@ -7,13 +7,13 @@ /** * Represents a deadline task. - * A Tasks.Deadline object corresponds to a task represented by a description and a deadline date. + * A tasks.Deadline object corresponds to a task represented by a description and a deadline date. */ public class Deadline extends Task { protected LocalDateTime by; /** - * Constructor for Tasks.Deadline class. + * Constructor for tasks.Deadline class. * * @param description The description of the task. * @param by The deadline of the task. @@ -26,7 +26,7 @@ public Deadline(String description, String by) { /** * Returns the deadline of the task. * - * @return Tasks.Deadline of the task. + * @return tasks.Deadline of the task. */ public String getBy() { diff --git a/src/main/java/Tasks/Event.java b/src/main/java/tasks/Event.java similarity index 93% rename from src/main/java/Tasks/Event.java rename to src/main/java/tasks/Event.java index c29e0a8327..0fd2b24b63 100644 --- a/src/main/java/Tasks/Event.java +++ b/src/main/java/tasks/Event.java @@ -1,4 +1,4 @@ -package Tasks; +package tasks; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -6,14 +6,14 @@ /** * Represents an event task. - * An Tasks.Event object corresponds to a task represented by a description, a start time, and an end time. + * An tasks.Event object corresponds to a task represented by a description, a start time, and an end time. */ public class Event extends Task { protected LocalDateTime from; protected LocalDateTime to; /** - * Constructor for Tasks.Event class. + * Constructor for tasks.Event class. * * @param description The description of the task. * @param from The start time of the event. diff --git a/src/main/java/Tasks/Task.java b/src/main/java/tasks/Task.java similarity index 93% rename from src/main/java/Tasks/Task.java rename to src/main/java/tasks/Task.java index ca99b66a5f..52e4c47b43 100644 --- a/src/main/java/Tasks/Task.java +++ b/src/main/java/tasks/Task.java @@ -1,17 +1,17 @@ -package Tasks; +package tasks; import java.time.LocalDate; /** * Represents a task. - * A Tasks.Task object corresponds to a task represented by a description and a completion status. + * A tasks.Task object corresponds to a task represented by a description and a completion status. */ public class Task { private String description; private boolean isDone; /** - * Constructor for Tasks.Task class. + * Constructor for tasks.Task class. * * @param description The description of the task. */ diff --git a/src/main/java/Tasks/Todo.java b/src/main/java/tasks/Todo.java similarity index 86% rename from src/main/java/Tasks/Todo.java rename to src/main/java/tasks/Todo.java index 69b8af4711..1893af85e1 100644 --- a/src/main/java/Tasks/Todo.java +++ b/src/main/java/tasks/Todo.java @@ -1,14 +1,14 @@ -package Tasks; +package tasks; import java.time.LocalDate; /** * Represents a todo task. - * A Tasks.Todo object corresponds to a task represented by a description. + * A tasks.Todo object corresponds to a task represented by a description. */ public class Todo extends Task { /** - * Constructor for Tasks.Todo class. + * Constructor for tasks.Todo class. * * @param description The description of the task. */ From ffb7efc608905e905f999fc3b5921389072727a4 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 13 Sep 2024 15:41:12 +0800 Subject: [PATCH 20/55] Add Commands interface and implement all commands child classes. --- data/CenaTaskList.txt | 1 + src/main/java/JohnCena.java | 5 +- src/main/java/commands/ByeCommand.java | 17 ++ src/main/java/commands/Command.java | 8 + src/main/java/commands/DeadlineCommand.java | 37 ++++ src/main/java/commands/DeleteCommand.java | 32 ++++ src/main/java/commands/EventCommand.java | 38 ++++ src/main/java/commands/HelloCommand.java | 14 ++ src/main/java/commands/HelpCommand.java | 22 +++ src/main/java/commands/ListCommand.java | 49 +++++ src/main/java/commands/MarkCommand.java | 71 +++++++ src/main/java/commands/OnCommand.java | 32 ++++ src/main/java/commands/TodoCommand.java | 38 ++++ src/main/java/commands/UnmarkCommand.java | 31 +++ src/main/java/parser/InputHandler.java | 201 +++++--------------- 15 files changed, 441 insertions(+), 155 deletions(-) create mode 100644 src/main/java/commands/ByeCommand.java create mode 100644 src/main/java/commands/Command.java create mode 100644 src/main/java/commands/DeadlineCommand.java create mode 100644 src/main/java/commands/DeleteCommand.java create mode 100644 src/main/java/commands/EventCommand.java create mode 100644 src/main/java/commands/HelloCommand.java create mode 100644 src/main/java/commands/HelpCommand.java create mode 100644 src/main/java/commands/ListCommand.java create mode 100644 src/main/java/commands/MarkCommand.java create mode 100644 src/main/java/commands/OnCommand.java create mode 100644 src/main/java/commands/TodoCommand.java create mode 100644 src/main/java/commands/UnmarkCommand.java diff --git a/data/CenaTaskList.txt b/data/CenaTaskList.txt index 00be45c99c..749cd1b208 100644 --- a/data/CenaTaskList.txt +++ b/data/CenaTaskList.txt @@ -6,3 +6,4 @@ E | 1 | cs2100 | 2024-09-13 1600 ~ 2024-09-13 1800 D | 1 | cs2101 | 2024-09-16 0900 E | 0 | presentation | 2024-09-16 0900 ~ 2024-09-16 1200 D | 0 | cs2109s | 2024-09-15 2359 +D | 0 | gess1025 | 2024-09-20 1215 diff --git a/src/main/java/JohnCena.java b/src/main/java/JohnCena.java index c5ef2ee27f..1993aa71fd 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/JohnCena.java @@ -8,6 +8,7 @@ import java.util.Scanner; import parser.InputHandler; +import commands.HelloCommand; public class JohnCena { @@ -31,8 +32,8 @@ public static void main(String[] args) { } else { scanner = new Scanner(System.in); } - - InputHandler.hello(); + HelloCommand helloCommand = new HelloCommand(); + helloCommand.execute(); while (scanner.hasNextLine()) { String input = scanner.nextLine(); diff --git a/src/main/java/commands/ByeCommand.java b/src/main/java/commands/ByeCommand.java new file mode 100644 index 0000000000..66779dd49a --- /dev/null +++ b/src/main/java/commands/ByeCommand.java @@ -0,0 +1,17 @@ +package commands; + +import art.Logo; + +public class ByeCommand implements Command{ + + @Override + public void execute() { + System.out.println("____________________________________________________________"); + System.out.println(" Bye. Hope to see you again soon!"); + System.out.println("This was"); + System.out.println(Logo.getLogo()); + System.out.println("signing off!"); + System.out.println("____________________________________________________________"); + System.exit(0); + } +} diff --git a/src/main/java/commands/Command.java b/src/main/java/commands/Command.java new file mode 100644 index 0000000000..494058eabb --- /dev/null +++ b/src/main/java/commands/Command.java @@ -0,0 +1,8 @@ +package commands; + +import exceptions.CenaException; + +public interface Command { + + void execute() throws CenaException; +} diff --git a/src/main/java/commands/DeadlineCommand.java b/src/main/java/commands/DeadlineCommand.java new file mode 100644 index 0000000000..0b5d7e1acc --- /dev/null +++ b/src/main/java/commands/DeadlineCommand.java @@ -0,0 +1,37 @@ +package commands; + +import exceptions.CenaInvalidDeadlineException; +import storage.Storage; +import tasks.Deadline; +import tasks.Task; + +import java.util.ArrayList; + +public class DeadlineCommand implements Command{ + + private ArrayList tasks; + private String description; + private String by; + + public DeadlineCommand(ArrayList tasks, String description, String by) { + this.tasks = tasks; + this.description = description; + this.by = by; + } + + @Override + public void execute() throws CenaInvalidDeadlineException { + if (description.isEmpty() || by.isEmpty()) { + throw new CenaInvalidDeadlineException("Incorrect description for deadline. It should contain only /by."); + } + Task task = new Deadline(description, by); + tasks.add(task); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + + } +} diff --git a/src/main/java/commands/DeleteCommand.java b/src/main/java/commands/DeleteCommand.java new file mode 100644 index 0000000000..3414ba4b6f --- /dev/null +++ b/src/main/java/commands/DeleteCommand.java @@ -0,0 +1,32 @@ +package commands; + +import exceptions.CenaInvalidTaskIndexException; +import storage.Storage; +import tasks.Task; + +import java.util.ArrayList; + +public class DeleteCommand implements Command { + private ArrayList tasks; + private int taskIndex; + + public DeleteCommand(ArrayList tasks, int taskIndex) { + this.tasks = tasks; + this.taskIndex = taskIndex; + } + + @Override + public void execute() throws CenaInvalidTaskIndexException { + if (taskIndex < 0 || taskIndex >= tasks.size()) { + throw new CenaInvalidTaskIndexException("The task index is invalid."); + } + Task removedTask = tasks.remove(taskIndex); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Noted. I've removed this task:"); + System.out.println(" " + removedTask); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + + } +} diff --git a/src/main/java/commands/EventCommand.java b/src/main/java/commands/EventCommand.java new file mode 100644 index 0000000000..c4695b0f7f --- /dev/null +++ b/src/main/java/commands/EventCommand.java @@ -0,0 +1,38 @@ +package commands; + +import exceptions.CenaInvalidEventException; +import storage.Storage; +import tasks.Event; +import tasks.Task; + +import java.util.ArrayList; + +public class EventCommand implements Command { + private ArrayList tasks; + private String description; + private String from; + private String to; + + public EventCommand(ArrayList tasks, String description, String from, String to) { + this.tasks = tasks; + this.description = description; + this.from = from; + this.to = to; + } + + @Override + public void execute() throws CenaInvalidEventException { + if (description.isEmpty() || from.isEmpty() || to.isEmpty()) { + throw new CenaInvalidEventException("Incorrect description for event. It should contain /from and /to."); + } + Task task = new Event(description, from, to); + tasks.add(task); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + + } +} diff --git a/src/main/java/commands/HelloCommand.java b/src/main/java/commands/HelloCommand.java new file mode 100644 index 0000000000..39bdfb1a60 --- /dev/null +++ b/src/main/java/commands/HelloCommand.java @@ -0,0 +1,14 @@ +package commands; + +import art.Logo; + +public class HelloCommand implements Command { + + @Override + public void execute() { + System.out.println("____________________________________________________________"); + System.out.println("Hello from\n" + Logo.getLogo()); + System.out.println(" What can I do for you?"); + System.out.println("____________________________________________________________"); + } +} diff --git a/src/main/java/commands/HelpCommand.java b/src/main/java/commands/HelpCommand.java new file mode 100644 index 0000000000..389160abbc --- /dev/null +++ b/src/main/java/commands/HelpCommand.java @@ -0,0 +1,22 @@ +package commands; + +public class HelpCommand implements Command { + + @Override + public void execute() { + System.out.println("____________________________________________________________"); + System.out.println("Here are the commands you can use:"); + System.out.println(" bye - Exits the program"); + System.out.println(" list - Lists all tasks"); + System.out.println(" mark [task number] - Marks a task as done"); + System.out.println(" unmark [task number] - Marks a task as not done"); + System.out.println(" delete [task number] - Deletes a task"); + System.out.println(" todo [description] - Adds a todo task"); + System.out.println(" deadline [description] /by [due date] - Adds a deadline task"); + System.out.println(" event [description] /from [start date] /to [end date] - Adds an event task"); + System.out.println(" on [date] - Lists all tasks on a specific date"); + System.out.println(" hello - Displays the welcome message"); + System.out.println(" help - Displays the list of commands"); + System.out.println("____________________________________________________________"); + } +} diff --git a/src/main/java/commands/ListCommand.java b/src/main/java/commands/ListCommand.java new file mode 100644 index 0000000000..59b9ca9a0e --- /dev/null +++ b/src/main/java/commands/ListCommand.java @@ -0,0 +1,49 @@ +//package commands; +// +//import tasks.Task; +// +//import java.util.ArrayList; +// +//public class ListCommand implements Command { +// private ArrayList tasks; +// +// public ListCommand(ArrayList tasks) { +// this.tasks = tasks; +// } +// +// @Override +// public void execute() { +// System.out.println("____________________________________________________________"); +// System.out.println(" Here are the tasks in your list:"); +// for (int i = 0; i < tasks.size(); i++) { +// System.out.println(" " + (i + 1) + "." + tasks.get(i)); +// } +// System.out.println("____________________________________________________________"); +// +// } +//} + + +package commands; + +import tasks.Task; + +import java.util.ArrayList; + +public class ListCommand implements Command { + private ArrayList tasks; + + public ListCommand(ArrayList tasks) { + this.tasks = tasks; + } + + @Override + public void execute() { + System.out.println("____________________________________________________________"); + System.out.println(" Here are the tasks in your list:"); + for (int i = 0; i < tasks.size(); i++) { + System.out.println(" " + (i + 1) + "." + tasks.get(i)); + } + System.out.println("____________________________________________________________"); + } +} diff --git a/src/main/java/commands/MarkCommand.java b/src/main/java/commands/MarkCommand.java new file mode 100644 index 0000000000..04531dc76d --- /dev/null +++ b/src/main/java/commands/MarkCommand.java @@ -0,0 +1,71 @@ +//package commands; +// +//import exceptions.CenaInvalidTaskIndexException; +//import storage.Storage; +//import tasks.Task; +// +//import java.util.ArrayList; +// +//public class MarkCommand implements Command{ +// +// private ArrayList tasks; +// private int taskIndex; +// +// public MarkCommand(ArrayList tasks, int taskIndex) { +// this.tasks = tasks; +// this.taskIndex = taskIndex; +// } +// +// +// @Override +// public void execute() { +// try { +// if (taskIndex < 0 || taskIndex >= tasks.size()) { +// throw new CenaInvalidTaskIndexException("The task index is invalid."); +// } +// tasks.get(taskIndex).markAsDone(); +// Storage.saveTasks(tasks); +// System.out.println("____________________________________________________________"); +// System.out.println(" Nice! I've marked this task as done:"); +// System.out.println(" " + tasks.get(taskIndex)); +// System.out.println("____________________________________________________________"); +// } catch (CenaInvalidTaskIndexException e) { +// System.out.println("Error: " + e.getMessage()); +// } catch (NumberFormatException e) { +// throw new RuntimeException("The task index must be a number.", e); +// } +// } +// +//} + + +package commands; + +import exceptions.CenaInvalidTaskIndexException; +import storage.Storage; +import tasks.Task; + +import java.util.ArrayList; + +public class MarkCommand implements Command { + private ArrayList tasks; + private int taskIndex; + + public MarkCommand(ArrayList tasks, int taskIndex) { + this.tasks = tasks; + this.taskIndex = taskIndex; + } + + @Override + public void execute() throws CenaInvalidTaskIndexException { + if (taskIndex < 0 || taskIndex >= tasks.size()) { + throw new CenaInvalidTaskIndexException("The task index is invalid."); + } + tasks.get(taskIndex).markAsDone(); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Nice! I've marked this task as done:"); + System.out.println(" " + tasks.get(taskIndex)); + System.out.println("____________________________________________________________"); + } +} diff --git a/src/main/java/commands/OnCommand.java b/src/main/java/commands/OnCommand.java new file mode 100644 index 0000000000..62a5700777 --- /dev/null +++ b/src/main/java/commands/OnCommand.java @@ -0,0 +1,32 @@ +package commands; + +import tasks.Task; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.ArrayList; + +public class OnCommand implements Command { + private ArrayList tasks; + private LocalDate targetDate; + + public OnCommand(ArrayList tasks, String date) throws DateTimeParseException { + this.tasks = tasks; + // Parse the date string into a LocalDate object using the specified format + this.targetDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } + + @Override + public void execute() { + System.out.println("____________________________________________________________"); + System.out.println(" Here are the tasks on " + targetDate.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + ":"); + for (int i = 0; i < tasks.size(); i++) { + Task task = tasks.get(i); + if (task.occursOn(targetDate)) { + System.out.println(" " + (i + 1) + "." + task); + } + } + System.out.println("____________________________________________________________"); + + } +} diff --git a/src/main/java/commands/TodoCommand.java b/src/main/java/commands/TodoCommand.java new file mode 100644 index 0000000000..5ca7c09938 --- /dev/null +++ b/src/main/java/commands/TodoCommand.java @@ -0,0 +1,38 @@ +package commands; + +import exceptions.CenaInvalidTodoException; +import tasks.Task; +import tasks.Todo; +import storage.Storage; +import exceptions.CenaEmptyDescriptionException; + +import java.util.ArrayList; + +public class TodoCommand implements Command { + private ArrayList tasks; + private String description; + + public TodoCommand(ArrayList tasks, String description) { + this.tasks = tasks; + this.description = description; + } + + @Override + public void execute() throws CenaEmptyDescriptionException, CenaInvalidTodoException { + if (description.isEmpty()) { + throw new CenaEmptyDescriptionException("The description of a todo cannot be empty."); + } + if (description.contains("/by") || description.contains("/from") || description.contains("/to")) { + throw new CenaInvalidTodoException("A todo should not contain /by, /from, or /to."); + } + Task task = new Todo(description); + tasks.add(task); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Got it. I've added this task:"); + System.out.println(" " + task); + System.out.println(" Now you have " + tasks.size() + " tasks in the list."); + System.out.println("____________________________________________________________"); + } +} + diff --git a/src/main/java/commands/UnmarkCommand.java b/src/main/java/commands/UnmarkCommand.java new file mode 100644 index 0000000000..7970348b43 --- /dev/null +++ b/src/main/java/commands/UnmarkCommand.java @@ -0,0 +1,31 @@ +package commands; + +import java.util.ArrayList; + +import exceptions.CenaInvalidTaskIndexException; +import storage.Storage; +import tasks.Task; + +public class UnmarkCommand implements Command{ + private ArrayList tasks; + private int taskIndex; + + public UnmarkCommand(ArrayList tasks, int taskIndex) { + this.tasks = tasks; + this.taskIndex = taskIndex; + } + + @Override + public void execute() throws CenaInvalidTaskIndexException { + if (taskIndex < 0 || taskIndex >= tasks.size()) { + throw new CenaInvalidTaskIndexException("The task index is invalid."); + } + tasks.get(taskIndex).markAsNotDone(); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" OK, I've marked this task as not done yet:"); + System.out.println(" " + tasks.get(taskIndex)); + System.out.println("____________________________________________________________"); + } + +} diff --git a/src/main/java/parser/InputHandler.java b/src/main/java/parser/InputHandler.java index 1f3888ebe2..3331ab99d3 100644 --- a/src/main/java/parser/InputHandler.java +++ b/src/main/java/parser/InputHandler.java @@ -1,24 +1,12 @@ package parser; -import tasks.Deadline; -import tasks.Event; -import tasks.Task; -import tasks.Todo; +import commands.*; import exceptions.*; +import tasks.Task; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.ArrayList; -import art.Logo; - -import storage.Storage; - -/** - * This class is responsible for handling user input and executing the corresponding commands. - */ - public class InputHandler { private ArrayList tasks; @@ -26,154 +14,61 @@ public InputHandler(ArrayList tasks) { this.tasks = tasks; } - public void handleInput(String input) throws CenaException { - if (input.equals("bye")) { - System.out.println("____________________________________________________________"); - System.out.println(" Bye. Hope to see you again soon!"); - System.out.println("This was"); - System.out.println(Logo.getLogo()); - System.out.println("signing off!"); - System.out.println("____________________________________________________________"); - System.exit(0); - } else if (input.equals("list")) { - System.out.println("____________________________________________________________"); - System.out.println(" Here are the tasks in your list:"); - for (int i = 0; i < tasks.size(); i++) { - System.out.println(" " + (i + 1) + "." + tasks.get(i)); - } - System.out.println("____________________________________________________________"); - } else if (input.startsWith("mark ")) { - try { + Command command = null; + + try { + if (input.equals("bye")) { + command = new ByeCommand(); + } else if (input.equals("list")) { + command = new ListCommand(tasks); + } else if (input.startsWith("mark ")) { int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; - if (taskIndex < 0 || taskIndex >= tasks.size()) { - throw new CenaInvalidTaskIndexException("The task index is invalid."); - } - tasks.get(taskIndex).markAsDone(); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Nice! I've marked this task as done:"); - System.out.println(" " + tasks.get(taskIndex)); - System.out.println("____________________________________________________________"); - } catch (NumberFormatException e) { - throw new CenaInvalidTaskIndexException("The task index must be a number."); - } - } else if (input.startsWith("unmark ")) { - try { + command = new MarkCommand(tasks, taskIndex); + } else if (input.startsWith("unmark ")) { int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; - if (taskIndex < 0 || taskIndex >= tasks.size()) { - throw new CenaInvalidTaskIndexException("The task index is invalid."); + command = new UnmarkCommand(tasks, taskIndex); + } else if (input.startsWith("todo ")) { + String description = input.substring(5).trim(); + command = new TodoCommand(tasks, description); + } else if (input.startsWith("deadline ")) { + String[] parts = input.substring(9).split(" /by "); + if (parts.length < 2) { + throw new CenaInvalidDeadlineException("Incorrect description for deadline. It should contain only /by."); } - tasks.get(taskIndex).markAsNotDone(); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" OK, I've marked this task as not done yet:"); - System.out.println(" " + tasks.get(taskIndex)); - System.out.println("____________________________________________________________"); - } catch (NumberFormatException e) { - throw new CenaInvalidTaskIndexException("The task index must be a number."); - } - } else if (input.startsWith("todo ")) { - String description = input.substring(5).trim(); - if (description.isEmpty()) { - throw new CenaEmptyDescriptionException("The description of a todo cannot be empty."); - } - if (description.contains("/by") || description.contains("/from") || description.contains("/to")) { - throw new CenaInvalidTodoException("A todo should not contain /by, /from, or /to."); - } - Task task = new Todo(description); - tasks.add(task); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } else if (input.startsWith("deadline ")) { - String[] parts = input.substring(9).split(" /by "); - if (parts.length < 2 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty()) { - throw new CenaInvalidDeadlineException("Incorrect description for deadline. It should contain only /by."); - } - Task task = new Deadline(parts[0], parts[1]); - tasks.add(task); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } else if (input.startsWith("event ")) { - String[] parts = input.substring(6).split(" /from | /to "); - if (parts.length < 3 || parts[0].trim().isEmpty() || parts[1].trim().isEmpty() || parts[2].trim().isEmpty()) { - throw new CenaInvalidEventException("Incorrect description for event. It should contain /from and /to."); - } - Task task = new Event(parts[0], parts[1], parts[2]); - tasks.add(task); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } else if (input.startsWith("delete ")) { - try { - int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; - if (taskIndex < 0 || taskIndex >= tasks.size()) { - throw new CenaInvalidTaskIndexException("The task index is invalid."); + command = new DeadlineCommand(tasks, parts[0], parts[1]); + } else if (input.startsWith("event ")) { + String[] parts = input.substring(6).split(" /from | /to "); + if (parts.length < 3) { + throw new CenaInvalidEventException("Incorrect description for event. It should contain /from and /to."); } - Task removedTask = tasks.remove(taskIndex); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Noted. I've removed this task:"); - System.out.println(" " + removedTask); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); - } catch (NumberFormatException e) { - throw new CenaInvalidTaskIndexException("The task index must be a number."); - } - } else if (input.startsWith("on ")) { - try { + command = new EventCommand(tasks, parts[0], parts[1], parts[2]); + } else if (input.startsWith("delete ")) { + int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; + command = new DeleteCommand(tasks, taskIndex); + } else if (input.equals("hello") || input.equals("hi") || input.equals("hey") || input.equals("yo") || input.equals("sup")) { + command = new HelloCommand(); + } else if (input.equals("help") || input.equals("commands") || input.equals("command") || input.equals("cmds") || input.equals("cmd")) { + command = new HelpCommand(); + } else if (input.startsWith("on ")) { String date = input.substring(3).trim(); - LocalDate targetDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - System.out.println("____________________________________________________________"); - System.out.println(" Here are the tasks on " + targetDate.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + ":"); - for (int i = 0; i < tasks.size(); i++) { - Task task = tasks.get(i); - if (task.occursOn(targetDate)) { - System.out.println(" " + (i + 1) + "." + task); - } - } - System.out.println("____________________________________________________________"); + command = new OnCommand(tasks, date); + } else { + throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-("); + } - } catch (DateTimeParseException e) { - System.out.println("The date and time must be in the format yyyy-MM-dd."); + if (command != null) { + command.execute(); } - } else if (input.equals("hello") || input.equals("hi") || input.equals("hey") || input.equals("yo") || input.equals("sup")) { - hello(); - } else if (input.equals("help") || input.equals("commands") || input.equals("command") || input.equals("cmds") || input.equals("cmd")) { + + } catch (CenaInvalidTaskIndexException | CenaInvalidDeadlineException | CenaInvalidEventException | DateTimeParseException e) { System.out.println("____________________________________________________________"); - System.out.println("Here are the commands you can use:"); - System.out.println(" bye - Exits the program"); - System.out.println(" list - Lists all tasks"); - System.out.println(" mark [task number] - Marks a task as done"); - System.out.println(" unmark [task number] - Marks a task as not done"); - System.out.println(" delete [task number] - Deletes a task"); - System.out.println(" todo [description] - Adds a todo task"); - System.out.println(" deadline [description] /by [due date] - Adds a deadline task"); - System.out.println(" event [description] /from [start date] /to [end date] - Adds an event task"); - System.out.println(" on [date] - Lists all tasks on a specific date"); - System.out.println(" hello - Displays the welcome message"); - System.out.println(" help - Displays the list of commands"); + System.out.println(" OOPS!!! " + e.getMessage()); + System.out.println("____________________________________________________________"); + } catch (NumberFormatException e) { + System.out.println("____________________________________________________________"); + System.out.println(" OOPS!!! Task number must be a valid integer."); System.out.println("____________________________________________________________"); - } else { - throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-(\n Please use a valid command (see available commands by typing 'help')"); } } - - public static void hello() { - System.out.println("____________________________________________________________"); - System.out.println("Hello from\n" + Logo.getLogo()); - System.out.println(" What can I do for you?"); - System.out.println("____________________________________________________________"); - } -} \ No newline at end of file +} From f493de9600dda1d0f7fcee5d0a9f105956668548 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 13 Sep 2024 19:16:57 +0800 Subject: [PATCH 21/55] Add gradle support --- build.gradle | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index c361f9811e..eb9e7b7bcc 100644 --- a/build.gradle +++ b/build.gradle @@ -2,10 +2,11 @@ plugins { id 'java' id 'application' id 'com.github.johnrengelman.shadow' version '7.1.2' -} + } repositories { mavenCentral() + } dependencies { @@ -28,11 +29,11 @@ test { } application { - mainClass.set("seedu.duke.Duke") + mainClass.set("JohnCena") } shadowJar { - archiveBaseName = "duke" + archiveBaseName = "JohnCena" archiveClassifier = null } From 8f7ea5c5a684b29f6ec7e809a03fb6de9b5fd009 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 13 Sep 2024 20:38:02 +0800 Subject: [PATCH 22/55] Add johncena package under java --- build.gradle | 2 +- src/main/java/commands/ListCommand.java | 49 ------------- src/main/java/commands/MarkCommand.java | 71 ------------------- src/main/java/{ => johncena}/JohnCena.java | 12 ++-- src/main/java/{ => johncena}/art/Logo.java | 2 +- .../{ => johncena}/commands/ByeCommand.java | 6 +- .../java/{ => johncena}/commands/Command.java | 4 +- .../commands/DeadlineCommand.java | 10 +-- .../commands/DeleteCommand.java | 8 +-- .../{ => johncena}/commands/EventCommand.java | 10 +-- .../{ => johncena}/commands/HelloCommand.java | 4 +- .../{ => johncena}/commands/HelpCommand.java | 2 +- .../java/johncena/commands/ListCommand.java | 23 ++++++ .../java/johncena/commands/MarkCommand.java | 30 ++++++++ .../{ => johncena}/commands/OnCommand.java | 4 +- .../{ => johncena}/commands/TodoCommand.java | 12 ++-- .../commands/UnmarkCommand.java | 8 +-- .../CenaEmptyDescriptionException.java | 2 +- .../exceptions/CenaException.java | 2 +- .../CenaInvalidDateTimeException.java | 2 +- .../CenaInvalidDeadlineException.java | 2 +- .../exceptions/CenaInvalidEventException.java | 2 +- .../CenaInvalidTaskIndexException.java | 2 +- .../exceptions/CenaInvalidTodoException.java | 2 +- .../CenaUnknownCommandException.java | 2 +- .../{ => johncena}/parser/InputHandler.java | 8 +-- .../java/{ => johncena}/storage/Storage.java | 12 ++-- .../java/{ => johncena}/tasks/Deadline.java | 2 +- src/main/java/{ => johncena}/tasks/Event.java | 2 +- src/main/java/{ => johncena}/tasks/Task.java | 2 +- src/main/java/{ => johncena}/tasks/Todo.java | 2 +- 31 files changed, 118 insertions(+), 183 deletions(-) delete mode 100644 src/main/java/commands/ListCommand.java delete mode 100644 src/main/java/commands/MarkCommand.java rename src/main/java/{ => johncena}/JohnCena.java (87%) rename src/main/java/{ => johncena}/art/Logo.java (99%) rename src/main/java/{ => johncena}/commands/ByeCommand.java (82%) rename src/main/java/{ => johncena}/commands/Command.java (51%) rename src/main/java/{ => johncena}/commands/DeadlineCommand.java (86%) rename src/main/java/{ => johncena}/commands/DeleteCommand.java (87%) rename src/main/java/{ => johncena}/commands/EventCommand.java (87%) rename src/main/java/{ => johncena}/commands/HelloCommand.java (88%) rename src/main/java/{ => johncena}/commands/HelpCommand.java (97%) create mode 100644 src/main/java/johncena/commands/ListCommand.java create mode 100644 src/main/java/johncena/commands/MarkCommand.java rename src/main/java/{ => johncena}/commands/OnCommand.java (95%) rename src/main/java/{ => johncena}/commands/TodoCommand.java (84%) rename src/main/java/{ => johncena}/commands/UnmarkCommand.java (86%) rename src/main/java/{ => johncena}/exceptions/CenaEmptyDescriptionException.java (94%) rename src/main/java/{ => johncena}/exceptions/CenaException.java (93%) rename src/main/java/{ => johncena}/exceptions/CenaInvalidDateTimeException.java (97%) rename src/main/java/{ => johncena}/exceptions/CenaInvalidDeadlineException.java (94%) rename src/main/java/{ => johncena}/exceptions/CenaInvalidEventException.java (94%) rename src/main/java/{ => johncena}/exceptions/CenaInvalidTaskIndexException.java (94%) rename src/main/java/{ => johncena}/exceptions/CenaInvalidTodoException.java (94%) rename src/main/java/{ => johncena}/exceptions/CenaUnknownCommandException.java (94%) rename src/main/java/{ => johncena}/parser/InputHandler.java (96%) rename src/main/java/{ => johncena}/storage/Storage.java (95%) rename src/main/java/{ => johncena}/tasks/Deadline.java (98%) rename src/main/java/{ => johncena}/tasks/Event.java (98%) rename src/main/java/{ => johncena}/tasks/Task.java (98%) rename src/main/java/{ => johncena}/tasks/Todo.java (97%) diff --git a/build.gradle b/build.gradle index eb9e7b7bcc..c7084927fd 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ test { } application { - mainClass.set("JohnCena") + mainClass.set("johncena.JohnCena") } shadowJar { diff --git a/src/main/java/commands/ListCommand.java b/src/main/java/commands/ListCommand.java deleted file mode 100644 index 59b9ca9a0e..0000000000 --- a/src/main/java/commands/ListCommand.java +++ /dev/null @@ -1,49 +0,0 @@ -//package commands; -// -//import tasks.Task; -// -//import java.util.ArrayList; -// -//public class ListCommand implements Command { -// private ArrayList tasks; -// -// public ListCommand(ArrayList tasks) { -// this.tasks = tasks; -// } -// -// @Override -// public void execute() { -// System.out.println("____________________________________________________________"); -// System.out.println(" Here are the tasks in your list:"); -// for (int i = 0; i < tasks.size(); i++) { -// System.out.println(" " + (i + 1) + "." + tasks.get(i)); -// } -// System.out.println("____________________________________________________________"); -// -// } -//} - - -package commands; - -import tasks.Task; - -import java.util.ArrayList; - -public class ListCommand implements Command { - private ArrayList tasks; - - public ListCommand(ArrayList tasks) { - this.tasks = tasks; - } - - @Override - public void execute() { - System.out.println("____________________________________________________________"); - System.out.println(" Here are the tasks in your list:"); - for (int i = 0; i < tasks.size(); i++) { - System.out.println(" " + (i + 1) + "." + tasks.get(i)); - } - System.out.println("____________________________________________________________"); - } -} diff --git a/src/main/java/commands/MarkCommand.java b/src/main/java/commands/MarkCommand.java deleted file mode 100644 index 04531dc76d..0000000000 --- a/src/main/java/commands/MarkCommand.java +++ /dev/null @@ -1,71 +0,0 @@ -//package commands; -// -//import exceptions.CenaInvalidTaskIndexException; -//import storage.Storage; -//import tasks.Task; -// -//import java.util.ArrayList; -// -//public class MarkCommand implements Command{ -// -// private ArrayList tasks; -// private int taskIndex; -// -// public MarkCommand(ArrayList tasks, int taskIndex) { -// this.tasks = tasks; -// this.taskIndex = taskIndex; -// } -// -// -// @Override -// public void execute() { -// try { -// if (taskIndex < 0 || taskIndex >= tasks.size()) { -// throw new CenaInvalidTaskIndexException("The task index is invalid."); -// } -// tasks.get(taskIndex).markAsDone(); -// Storage.saveTasks(tasks); -// System.out.println("____________________________________________________________"); -// System.out.println(" Nice! I've marked this task as done:"); -// System.out.println(" " + tasks.get(taskIndex)); -// System.out.println("____________________________________________________________"); -// } catch (CenaInvalidTaskIndexException e) { -// System.out.println("Error: " + e.getMessage()); -// } catch (NumberFormatException e) { -// throw new RuntimeException("The task index must be a number.", e); -// } -// } -// -//} - - -package commands; - -import exceptions.CenaInvalidTaskIndexException; -import storage.Storage; -import tasks.Task; - -import java.util.ArrayList; - -public class MarkCommand implements Command { - private ArrayList tasks; - private int taskIndex; - - public MarkCommand(ArrayList tasks, int taskIndex) { - this.tasks = tasks; - this.taskIndex = taskIndex; - } - - @Override - public void execute() throws CenaInvalidTaskIndexException { - if (taskIndex < 0 || taskIndex >= tasks.size()) { - throw new CenaInvalidTaskIndexException("The task index is invalid."); - } - tasks.get(taskIndex).markAsDone(); - Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Nice! I've marked this task as done:"); - System.out.println(" " + tasks.get(taskIndex)); - System.out.println("____________________________________________________________"); - } -} diff --git a/src/main/java/JohnCena.java b/src/main/java/johncena/JohnCena.java similarity index 87% rename from src/main/java/JohnCena.java rename to src/main/java/johncena/JohnCena.java index 1993aa71fd..cfe4562adb 100644 --- a/src/main/java/JohnCena.java +++ b/src/main/java/johncena/JohnCena.java @@ -1,14 +1,16 @@ -import storage.Storage; -import tasks.Task; -import exceptions.*; +package johncena; + +import johncena.storage.Storage; +import johncena.tasks.Task; +import johncena.exceptions.*; import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; -import parser.InputHandler; -import commands.HelloCommand; +import johncena.parser.InputHandler; +import johncena.commands.HelloCommand; public class JohnCena { diff --git a/src/main/java/art/Logo.java b/src/main/java/johncena/art/Logo.java similarity index 99% rename from src/main/java/art/Logo.java rename to src/main/java/johncena/art/Logo.java index 2b460d6149..e1618556d9 100644 --- a/src/main/java/art/Logo.java +++ b/src/main/java/johncena/art/Logo.java @@ -1,5 +1,5 @@ -package art; +package johncena.art; public class Logo { diff --git a/src/main/java/commands/ByeCommand.java b/src/main/java/johncena/commands/ByeCommand.java similarity index 82% rename from src/main/java/commands/ByeCommand.java rename to src/main/java/johncena/commands/ByeCommand.java index 66779dd49a..993ecb15b8 100644 --- a/src/main/java/commands/ByeCommand.java +++ b/src/main/java/johncena/commands/ByeCommand.java @@ -1,8 +1,8 @@ -package commands; +package johncena.commands; -import art.Logo; +import johncena.art.Logo; -public class ByeCommand implements Command{ +public class ByeCommand implements Command { @Override public void execute() { diff --git a/src/main/java/commands/Command.java b/src/main/java/johncena/commands/Command.java similarity index 51% rename from src/main/java/commands/Command.java rename to src/main/java/johncena/commands/Command.java index 494058eabb..230a6e51c6 100644 --- a/src/main/java/commands/Command.java +++ b/src/main/java/johncena/commands/Command.java @@ -1,6 +1,6 @@ -package commands; +package johncena.commands; -import exceptions.CenaException; +import johncena.exceptions.CenaException; public interface Command { diff --git a/src/main/java/commands/DeadlineCommand.java b/src/main/java/johncena/commands/DeadlineCommand.java similarity index 86% rename from src/main/java/commands/DeadlineCommand.java rename to src/main/java/johncena/commands/DeadlineCommand.java index 0b5d7e1acc..3a695e4386 100644 --- a/src/main/java/commands/DeadlineCommand.java +++ b/src/main/java/johncena/commands/DeadlineCommand.java @@ -1,9 +1,9 @@ -package commands; +package johncena.commands; -import exceptions.CenaInvalidDeadlineException; -import storage.Storage; -import tasks.Deadline; -import tasks.Task; +import johncena.exceptions.CenaInvalidDeadlineException; +import johncena.storage.Storage; +import johncena.tasks.Deadline; +import johncena.tasks.Task; import java.util.ArrayList; diff --git a/src/main/java/commands/DeleteCommand.java b/src/main/java/johncena/commands/DeleteCommand.java similarity index 87% rename from src/main/java/commands/DeleteCommand.java rename to src/main/java/johncena/commands/DeleteCommand.java index 3414ba4b6f..05401645e4 100644 --- a/src/main/java/commands/DeleteCommand.java +++ b/src/main/java/johncena/commands/DeleteCommand.java @@ -1,8 +1,8 @@ -package commands; +package johncena.commands; -import exceptions.CenaInvalidTaskIndexException; -import storage.Storage; -import tasks.Task; +import johncena.exceptions.CenaInvalidTaskIndexException; +import johncena.storage.Storage; +import johncena.tasks.Task; import java.util.ArrayList; diff --git a/src/main/java/commands/EventCommand.java b/src/main/java/johncena/commands/EventCommand.java similarity index 87% rename from src/main/java/commands/EventCommand.java rename to src/main/java/johncena/commands/EventCommand.java index c4695b0f7f..90ac411324 100644 --- a/src/main/java/commands/EventCommand.java +++ b/src/main/java/johncena/commands/EventCommand.java @@ -1,9 +1,9 @@ -package commands; +package johncena.commands; -import exceptions.CenaInvalidEventException; -import storage.Storage; -import tasks.Event; -import tasks.Task; +import johncena.exceptions.CenaInvalidEventException; +import johncena.storage.Storage; +import johncena.tasks.Event; +import johncena.tasks.Task; import java.util.ArrayList; diff --git a/src/main/java/commands/HelloCommand.java b/src/main/java/johncena/commands/HelloCommand.java similarity index 88% rename from src/main/java/commands/HelloCommand.java rename to src/main/java/johncena/commands/HelloCommand.java index 39bdfb1a60..844360713f 100644 --- a/src/main/java/commands/HelloCommand.java +++ b/src/main/java/johncena/commands/HelloCommand.java @@ -1,6 +1,6 @@ -package commands; +package johncena.commands; -import art.Logo; +import johncena.art.Logo; public class HelloCommand implements Command { diff --git a/src/main/java/commands/HelpCommand.java b/src/main/java/johncena/commands/HelpCommand.java similarity index 97% rename from src/main/java/commands/HelpCommand.java rename to src/main/java/johncena/commands/HelpCommand.java index 389160abbc..9417dc4b09 100644 --- a/src/main/java/commands/HelpCommand.java +++ b/src/main/java/johncena/commands/HelpCommand.java @@ -1,4 +1,4 @@ -package commands; +package johncena.commands; public class HelpCommand implements Command { diff --git a/src/main/java/johncena/commands/ListCommand.java b/src/main/java/johncena/commands/ListCommand.java new file mode 100644 index 0000000000..0288e6494a --- /dev/null +++ b/src/main/java/johncena/commands/ListCommand.java @@ -0,0 +1,23 @@ +package johncena.commands; + +import johncena.tasks.Task; + +import java.util.ArrayList; + +public class ListCommand implements Command { + private ArrayList tasks; + + public ListCommand(ArrayList tasks) { + this.tasks = tasks; + } + + @Override + public void execute() { + System.out.println("____________________________________________________________"); + System.out.println(" Here are the tasks in your list:"); + for (int i = 0; i < tasks.size(); i++) { + System.out.println(" " + (i + 1) + "." + tasks.get(i)); + } + System.out.println("____________________________________________________________"); + } +} diff --git a/src/main/java/johncena/commands/MarkCommand.java b/src/main/java/johncena/commands/MarkCommand.java new file mode 100644 index 0000000000..003fa7abee --- /dev/null +++ b/src/main/java/johncena/commands/MarkCommand.java @@ -0,0 +1,30 @@ +package johncena.commands; + +import johncena.exceptions.CenaInvalidTaskIndexException; +import johncena.storage.Storage; +import johncena.tasks.Task; + +import java.util.ArrayList; + +public class MarkCommand implements Command { + private ArrayList tasks; + private int taskIndex; + + public MarkCommand(ArrayList tasks, int taskIndex) { + this.tasks = tasks; + this.taskIndex = taskIndex; + } + + @Override + public void execute() throws CenaInvalidTaskIndexException { + if (taskIndex < 0 || taskIndex >= tasks.size()) { + throw new CenaInvalidTaskIndexException("The task index is invalid."); + } + tasks.get(taskIndex).markAsDone(); + Storage.saveTasks(tasks); + System.out.println("____________________________________________________________"); + System.out.println(" Nice! I've marked this task as done:"); + System.out.println(" " + tasks.get(taskIndex)); + System.out.println("____________________________________________________________"); + } +} diff --git a/src/main/java/commands/OnCommand.java b/src/main/java/johncena/commands/OnCommand.java similarity index 95% rename from src/main/java/commands/OnCommand.java rename to src/main/java/johncena/commands/OnCommand.java index 62a5700777..18eb05e697 100644 --- a/src/main/java/commands/OnCommand.java +++ b/src/main/java/johncena/commands/OnCommand.java @@ -1,6 +1,6 @@ -package commands; +package johncena.commands; -import tasks.Task; +import johncena.tasks.Task; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; diff --git a/src/main/java/commands/TodoCommand.java b/src/main/java/johncena/commands/TodoCommand.java similarity index 84% rename from src/main/java/commands/TodoCommand.java rename to src/main/java/johncena/commands/TodoCommand.java index 5ca7c09938..278cb71d52 100644 --- a/src/main/java/commands/TodoCommand.java +++ b/src/main/java/johncena/commands/TodoCommand.java @@ -1,10 +1,10 @@ -package commands; +package johncena.commands; -import exceptions.CenaInvalidTodoException; -import tasks.Task; -import tasks.Todo; -import storage.Storage; -import exceptions.CenaEmptyDescriptionException; +import johncena.exceptions.CenaInvalidTodoException; +import johncena.tasks.Task; +import johncena.tasks.Todo; +import johncena.storage.Storage; +import johncena.exceptions.CenaEmptyDescriptionException; import java.util.ArrayList; diff --git a/src/main/java/commands/UnmarkCommand.java b/src/main/java/johncena/commands/UnmarkCommand.java similarity index 86% rename from src/main/java/commands/UnmarkCommand.java rename to src/main/java/johncena/commands/UnmarkCommand.java index 7970348b43..09633e9756 100644 --- a/src/main/java/commands/UnmarkCommand.java +++ b/src/main/java/johncena/commands/UnmarkCommand.java @@ -1,10 +1,10 @@ -package commands; +package johncena.commands; import java.util.ArrayList; -import exceptions.CenaInvalidTaskIndexException; -import storage.Storage; -import tasks.Task; +import johncena.exceptions.CenaInvalidTaskIndexException; +import johncena.storage.Storage; +import johncena.tasks.Task; public class UnmarkCommand implements Command{ private ArrayList tasks; diff --git a/src/main/java/exceptions/CenaEmptyDescriptionException.java b/src/main/java/johncena/exceptions/CenaEmptyDescriptionException.java similarity index 94% rename from src/main/java/exceptions/CenaEmptyDescriptionException.java rename to src/main/java/johncena/exceptions/CenaEmptyDescriptionException.java index f6177c42d3..e360c84dfc 100644 --- a/src/main/java/exceptions/CenaEmptyDescriptionException.java +++ b/src/main/java/johncena/exceptions/CenaEmptyDescriptionException.java @@ -1,4 +1,4 @@ -package exceptions; +package johncena.exceptions; /** * This class represents an exception that is thrown when an empty description is encountered. diff --git a/src/main/java/exceptions/CenaException.java b/src/main/java/johncena/exceptions/CenaException.java similarity index 93% rename from src/main/java/exceptions/CenaException.java rename to src/main/java/johncena/exceptions/CenaException.java index fe1d74e785..95b06a1e64 100644 --- a/src/main/java/exceptions/CenaException.java +++ b/src/main/java/johncena/exceptions/CenaException.java @@ -1,4 +1,4 @@ -package exceptions; +package johncena.exceptions; /** * This class represents a general exception for the Cena application. diff --git a/src/main/java/exceptions/CenaInvalidDateTimeException.java b/src/main/java/johncena/exceptions/CenaInvalidDateTimeException.java similarity index 97% rename from src/main/java/exceptions/CenaInvalidDateTimeException.java rename to src/main/java/johncena/exceptions/CenaInvalidDateTimeException.java index 3d40f7ba58..2094d28d82 100644 --- a/src/main/java/exceptions/CenaInvalidDateTimeException.java +++ b/src/main/java/johncena/exceptions/CenaInvalidDateTimeException.java @@ -1,4 +1,4 @@ -package exceptions; +package johncena.exceptions; import java.time.format.DateTimeParseException; diff --git a/src/main/java/exceptions/CenaInvalidDeadlineException.java b/src/main/java/johncena/exceptions/CenaInvalidDeadlineException.java similarity index 94% rename from src/main/java/exceptions/CenaInvalidDeadlineException.java rename to src/main/java/johncena/exceptions/CenaInvalidDeadlineException.java index e6151b545d..2d4aaea9fd 100644 --- a/src/main/java/exceptions/CenaInvalidDeadlineException.java +++ b/src/main/java/johncena/exceptions/CenaInvalidDeadlineException.java @@ -1,4 +1,4 @@ -package exceptions; +package johncena.exceptions; /** * This class represents an exception that is thrown when an invalid deadline is encountered. diff --git a/src/main/java/exceptions/CenaInvalidEventException.java b/src/main/java/johncena/exceptions/CenaInvalidEventException.java similarity index 94% rename from src/main/java/exceptions/CenaInvalidEventException.java rename to src/main/java/johncena/exceptions/CenaInvalidEventException.java index ced7936f65..069104df39 100644 --- a/src/main/java/exceptions/CenaInvalidEventException.java +++ b/src/main/java/johncena/exceptions/CenaInvalidEventException.java @@ -1,4 +1,4 @@ -package exceptions; +package johncena.exceptions; /** * This class represents an exception that is thrown when an invalid event is encountered. diff --git a/src/main/java/exceptions/CenaInvalidTaskIndexException.java b/src/main/java/johncena/exceptions/CenaInvalidTaskIndexException.java similarity index 94% rename from src/main/java/exceptions/CenaInvalidTaskIndexException.java rename to src/main/java/johncena/exceptions/CenaInvalidTaskIndexException.java index 78173f28de..9f0a6baab3 100644 --- a/src/main/java/exceptions/CenaInvalidTaskIndexException.java +++ b/src/main/java/johncena/exceptions/CenaInvalidTaskIndexException.java @@ -1,4 +1,4 @@ -package exceptions; +package johncena.exceptions; /** * This class represents an exception that is thrown when an invalid task index is encountered. diff --git a/src/main/java/exceptions/CenaInvalidTodoException.java b/src/main/java/johncena/exceptions/CenaInvalidTodoException.java similarity index 94% rename from src/main/java/exceptions/CenaInvalidTodoException.java rename to src/main/java/johncena/exceptions/CenaInvalidTodoException.java index 0f4725bf12..b9455e1b48 100644 --- a/src/main/java/exceptions/CenaInvalidTodoException.java +++ b/src/main/java/johncena/exceptions/CenaInvalidTodoException.java @@ -1,4 +1,4 @@ -package exceptions; +package johncena.exceptions; /** * This class represents an exception that is thrown when an invalid todo is encountered. diff --git a/src/main/java/exceptions/CenaUnknownCommandException.java b/src/main/java/johncena/exceptions/CenaUnknownCommandException.java similarity index 94% rename from src/main/java/exceptions/CenaUnknownCommandException.java rename to src/main/java/johncena/exceptions/CenaUnknownCommandException.java index 6e0d465c5d..1ba4eec64d 100644 --- a/src/main/java/exceptions/CenaUnknownCommandException.java +++ b/src/main/java/johncena/exceptions/CenaUnknownCommandException.java @@ -1,4 +1,4 @@ -package exceptions; +package johncena.exceptions; /** * This class represents an exception that is thrown when an unknown command is encountered. diff --git a/src/main/java/parser/InputHandler.java b/src/main/java/johncena/parser/InputHandler.java similarity index 96% rename from src/main/java/parser/InputHandler.java rename to src/main/java/johncena/parser/InputHandler.java index 3331ab99d3..054b6306ca 100644 --- a/src/main/java/parser/InputHandler.java +++ b/src/main/java/johncena/parser/InputHandler.java @@ -1,8 +1,8 @@ -package parser; +package johncena.parser; -import commands.*; -import exceptions.*; -import tasks.Task; +import johncena.commands.*; +import johncena.exceptions.*; +import johncena.tasks.Task; import java.time.format.DateTimeParseException; import java.util.ArrayList; diff --git a/src/main/java/storage/Storage.java b/src/main/java/johncena/storage/Storage.java similarity index 95% rename from src/main/java/storage/Storage.java rename to src/main/java/johncena/storage/Storage.java index c4744026f4..d6ddac1cdb 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/johncena/storage/Storage.java @@ -1,10 +1,10 @@ -package storage; +package johncena.storage; -import tasks.Deadline; -import tasks.Event; -import tasks.Task; -import tasks.Todo; -import exceptions.CenaException; +import johncena.tasks.Deadline; +import johncena.tasks.Event; +import johncena.tasks.Task; +import johncena.tasks.Todo; +import johncena.exceptions.CenaException; import java.io.*; import java.util.ArrayList; diff --git a/src/main/java/tasks/Deadline.java b/src/main/java/johncena/tasks/Deadline.java similarity index 98% rename from src/main/java/tasks/Deadline.java rename to src/main/java/johncena/tasks/Deadline.java index bd021299f4..9d30784299 100644 --- a/src/main/java/tasks/Deadline.java +++ b/src/main/java/johncena/tasks/Deadline.java @@ -1,4 +1,4 @@ -package tasks; +package johncena.tasks; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/src/main/java/tasks/Event.java b/src/main/java/johncena/tasks/Event.java similarity index 98% rename from src/main/java/tasks/Event.java rename to src/main/java/johncena/tasks/Event.java index 0fd2b24b63..01e26a4229 100644 --- a/src/main/java/tasks/Event.java +++ b/src/main/java/johncena/tasks/Event.java @@ -1,4 +1,4 @@ -package tasks; +package johncena.tasks; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; diff --git a/src/main/java/tasks/Task.java b/src/main/java/johncena/tasks/Task.java similarity index 98% rename from src/main/java/tasks/Task.java rename to src/main/java/johncena/tasks/Task.java index 52e4c47b43..2deb2b8d40 100644 --- a/src/main/java/tasks/Task.java +++ b/src/main/java/johncena/tasks/Task.java @@ -1,4 +1,4 @@ -package tasks; +package johncena.tasks; import java.time.LocalDate; diff --git a/src/main/java/tasks/Todo.java b/src/main/java/johncena/tasks/Todo.java similarity index 97% rename from src/main/java/tasks/Todo.java rename to src/main/java/johncena/tasks/Todo.java index 1893af85e1..3125d63eda 100644 --- a/src/main/java/tasks/Todo.java +++ b/src/main/java/johncena/tasks/Todo.java @@ -1,4 +1,4 @@ -package tasks; +package johncena.tasks; import java.time.LocalDate; /** From 41cfe8cced776a7f5080360f4c21226e0353f145 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 20 Sep 2024 12:02:16 +0800 Subject: [PATCH 23/55] Add Junit Tests for InputHandlerClass --- data/CenaTaskList.txt | 11 +- src/main/java/johncena/storage/Storage.java | 28 ++- .../johncena/parser/InputHandlerTest.java | 220 ++++++++++++++++++ .../java/johncena/tasks/DeadlineTest.java | 12 + src/test/java/johncena/tasks/TodoTest.java | 13 ++ 5 files changed, 266 insertions(+), 18 deletions(-) create mode 100644 src/test/java/johncena/parser/InputHandlerTest.java create mode 100644 src/test/java/johncena/tasks/DeadlineTest.java create mode 100644 src/test/java/johncena/tasks/TodoTest.java diff --git a/data/CenaTaskList.txt b/data/CenaTaskList.txt index 749cd1b208..1463b92853 100644 --- a/data/CenaTaskList.txt +++ b/data/CenaTaskList.txt @@ -1,9 +1,4 @@ -T | 0 | eat +T | 0 | read book +T | 0 | dance T | 1 | swim -T | 0 | sleep -D | 0 | cs2103 | 2024-09-09 2200 -E | 1 | cs2100 | 2024-09-13 1600 ~ 2024-09-13 1800 -D | 1 | cs2101 | 2024-09-16 0900 -E | 0 | presentation | 2024-09-16 0900 ~ 2024-09-16 1200 -D | 0 | cs2109s | 2024-09-15 2359 -D | 0 | gess1025 | 2024-09-20 1215 +T | 0 | study diff --git a/src/main/java/johncena/storage/Storage.java b/src/main/java/johncena/storage/Storage.java index d6ddac1cdb..54a7083a9c 100644 --- a/src/main/java/johncena/storage/Storage.java +++ b/src/main/java/johncena/storage/Storage.java @@ -1,10 +1,7 @@ package johncena.storage; -import johncena.tasks.Deadline; -import johncena.tasks.Event; -import johncena.tasks.Task; -import johncena.tasks.Todo; import johncena.exceptions.CenaException; +import johncena.tasks.*; import java.io.*; import java.util.ArrayList; @@ -13,9 +10,20 @@ * This class is responsible for saving and loading tasks from a file. */ public class Storage { - private static final String FILE_PATH = "./data/CenaTaskList.txt"; + + private static String filePath = "./data/CenaTaskList.txt"; // Default file path public static final String SEPARATOR = " | "; + /** + * Sets the file path for saving and loading tasks. + * + * @param path The file path to set. + */ + public static void setFilePath(String path) { + filePath = path; + } + + /** * Saves the list of tasks to a file. * @@ -23,7 +31,7 @@ public class Storage { */ public static void saveTasks(ArrayList tasks) { try { - FileWriter fw = new FileWriter(FILE_PATH); + FileWriter fw = new FileWriter(filePath); for (Task task : tasks) { fw.write(toSaveString(task) + System.lineSeparator()); } @@ -33,6 +41,7 @@ public static void saveTasks(ArrayList tasks) { } } + /** * Loads the list of tasks from a file. * @@ -41,9 +50,9 @@ public static void saveTasks(ArrayList tasks) { public static ArrayList loadTasks() { ArrayList tasks = new ArrayList<>(); try { - File file = new File(FILE_PATH); + File file = new File(filePath); - // check if directory or file do not exist + // Check if directory or file do not exist if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } @@ -55,7 +64,6 @@ public static ArrayList loadTasks() { String line; while ((line = reader.readLine()) != null) { try { - // Assuming the toString method of tasks.Task class returns a string that can be used to recreate the task tasks.add(parseTask(line)); } catch (CenaException e) { System.out.println(e.getMessage()); @@ -132,4 +140,4 @@ private static String toSaveString(Task task) { return taskDescription; } -} \ No newline at end of file +} diff --git a/src/test/java/johncena/parser/InputHandlerTest.java b/src/test/java/johncena/parser/InputHandlerTest.java new file mode 100644 index 0000000000..d1e479f6ea --- /dev/null +++ b/src/test/java/johncena/parser/InputHandlerTest.java @@ -0,0 +1,220 @@ +package johncena.parser; + +import johncena.art.Logo; +import johncena.commands.*; +import johncena.exceptions.*; +import johncena.tasks.*; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +import johncena.storage.Storage; + +import java.io.IOException; + + +public class InputHandlerTest { + + private InputHandler inputHandler; + private ArrayList tasks; + private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + private final PrintStream originalOut = System.out; + + private final String TEST_FILE_PATH = "./data/CenaTaskListTest.txt"; + + + + @BeforeEach + public void setUp() throws IOException { + // Ensure the data directory exists + Files.createDirectories(Paths.get("./data")); + + // Delete the test file if it exists and create a new empty one + Files.deleteIfExists(Paths.get(TEST_FILE_PATH)); + Files.createFile(Paths.get(TEST_FILE_PATH)); + + // Set the Storage to use the test file + Storage.setFilePath(TEST_FILE_PATH); + + tasks = Storage.loadTasks(); // Should load an empty list + inputHandler = new InputHandler(tasks); + System.setOut(new PrintStream(outContent)); + } + + @AfterEach + public void tearDown() throws IOException { + System.setOut(originalOut); + outContent.reset(); + + // Clean up the test file + Files.deleteIfExists(Paths.get(TEST_FILE_PATH)); + + // Reset Storage to default file path + Storage.setFilePath("./data/CenaTaskList.txt"); + } + + @Test + public void testTodoCommand() throws CenaException { + inputHandler.handleInput("todo read book"); + assertEquals(1, tasks.size()); + Task task = tasks.get(0); + assertTrue(task instanceof Todo); + assertEquals("read book", task.getDescription()); + } + + @Test + public void testDeadlineCommand() throws CenaException { + inputHandler.handleInput("deadline return book /by 2024-09-20 1800"); + assertEquals(1, tasks.size()); + Task task = tasks.get(0); + assertTrue(task instanceof Deadline); + assertEquals("return book", task.getDescription()); + assertEquals("2024-09-20 1800", ((Deadline) task).getBy()); + } + + @Test + public void testEventCommand() throws CenaException { + inputHandler.handleInput("event project meeting /from 2024-09-20 1600 /to 2024-09-21 1800"); + Task task = tasks.get(0); + assertTrue(task instanceof Event); + assertEquals("project meeting", task.getDescription()); + assertEquals("2024-09-20 1600", ((Event) task).getFrom()); + assertEquals("2024-09-21 1800", ((Event) task).getTo()); + } + + @Test + public void testListCommand() throws CenaException { + inputHandler.handleInput("todo read book"); + inputHandler.handleInput("deadline return book /by 2024-09-20 1800"); + inputHandler.handleInput("event project meeting /from 2024-09-20 1600 /to 2024-09-21 1800"); + outContent.reset(); + inputHandler.handleInput("list"); + String expectedOutput = "____________________________________________________________\n" + + " Here are the tasks in your list:\n" + + " 1.[T][ ] read book\n" + + " 2.[D][ ] return book (by: 2024-09-20 1800)\n" + + " 3.[E][ ] project meeting (from: 2024-09-20 1600 to: 2024-09-21 1800)\n" + + "____________________________________________________________\n"; + assertEquals(expectedOutput.trim(), outContent.toString().trim()); + } + + @Test + public void testMarkCommand() throws CenaException { + inputHandler.handleInput("todo read book"); + inputHandler.handleInput("mark 1"); + Task task = tasks.get(0); + assertTrue(task.isTaskDone()); + } + + @Test + public void testUnmarkCommand() throws CenaException { + inputHandler.handleInput("todo read book"); + inputHandler.handleInput("mark 1"); + inputHandler.handleInput("unmark 1"); + Task task = tasks.get(0); + assertFalse(task.isTaskDone()); + } + + + @Test + public void testInvalidTaskIndex() throws CenaException { + outContent.reset(); + inputHandler.handleInput("mark 1"); // No tasks yet + String expectedOutput = "____________________________________________________________\n" + + " OOPS!!! The task index is invalid.\n" + + "____________________________________________________________"; + assertEquals(expectedOutput.trim(), outContent.toString().trim()); + } + + @Test + public void testInvalidDeadlineFormat() throws CenaException { + outContent.reset(); + inputHandler.handleInput("deadline return book"); + String expectedOutput = "____________________________________________________________\n" + + " OOPS!!! Incorrect description for deadline. It should contain only /by.\n" + + "____________________________________________________________"; + assertEquals(expectedOutput.trim(), outContent.toString().trim()); + } + + @Test + public void testInvalidEventFormat() throws CenaException { + outContent.reset(); + inputHandler.handleInput("event project meeting /from 2024-09-20"); + String expectedOutput = "____________________________________________________________\n" + + " OOPS!!! Incorrect description for event. It should contain /from and /to.\n" + + "____________________________________________________________"; + assertEquals(expectedOutput.trim(), outContent.toString().trim()); + } + + @Test + public void testUnknownCommandException() { + Exception exception = assertThrows(CenaUnknownCommandException.class, () -> { + inputHandler.handleInput("unknowncommand"); + }); + assertEquals("I'm sorry, but I don't know what that means :-(", exception.getMessage()); + } + + @Test + public void testHelloCommand() throws CenaException { + outContent.reset(); + inputHandler.handleInput("hello"); + String expectedOutput = "____________________________________________________________\n" + + "Hello from\n" + Logo.getLogo() + "\n" + + " What can I do for you?\n" + + "____________________________________________________________"; + assertEquals(expectedOutput.trim(), outContent.toString().trim()); + } + + @Test + public void testHelpCommand() throws CenaException { + outContent.reset(); + inputHandler.handleInput("help"); + String expectedOutput = "____________________________________________________________\n" + + "Here are the commands you can use:\n" + + " bye - Exits the program\n" + + " list - Lists all tasks\n" + + " mark [task number] - Marks a task as done\n" + + " unmark [task number] - Marks a task as not done\n" + + " delete [task number] - Deletes a task\n" + + " todo [description] - Adds a todo task\n" + + " deadline [description] /by [due date] - Adds a deadline task\n" + + " event [description] /from [start date] /to [end date] - Adds an event task\n" + + " on [date] - Lists all tasks on a specific date\n" + + " hello - Displays the welcome message\n" + + " help - Displays the list of commands\n" + + "____________________________________________________________"; + assertEquals(expectedOutput.trim(), outContent.toString().trim()); + } + + @Test + public void testOnCommand() throws CenaException { + inputHandler.handleInput("deadline submit report /by 2024-09-20 1800"); + inputHandler.handleInput("event conference /from 2024-09-20 1600 /to 2024-09-22 1800"); + outContent.reset(); + inputHandler.handleInput("on 2024-09-20"); + String expectedOutput = "____________________________________________________________\n" + + " Here are the tasks on Sep 20 2024:\n" + + " 1.[D][ ] submit report (by: 2024-09-20 1800)\n" + + " 2.[E][ ] conference (from: 2024-09-20 1600 to: 2024-09-22 1800)\n" + + "____________________________________________________________"; + assertEquals(expectedOutput.trim(), outContent.toString().trim()); + } + + @Test + public void testDeleteCommand() throws CenaException { + inputHandler.handleInput("todo read book"); + inputHandler.handleInput("deadline return book /by 2024-09-20 1800"); + inputHandler.handleInput("delete 1"); + assertEquals(1, tasks.size()); + assertTrue(tasks.get(0) instanceof Deadline); + } +} \ No newline at end of file diff --git a/src/test/java/johncena/tasks/DeadlineTest.java b/src/test/java/johncena/tasks/DeadlineTest.java new file mode 100644 index 0000000000..bca8346b2b --- /dev/null +++ b/src/test/java/johncena/tasks/DeadlineTest.java @@ -0,0 +1,12 @@ +package johncena.tasks; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +public class DeadlineTest { + + @Test + public void testStringConversion() { + assertEquals("[D][ ] study (by: 2024-09-23 1100)", + new Deadline("study", "2024-09-23 1100").toString()); + } +} diff --git a/src/test/java/johncena/tasks/TodoTest.java b/src/test/java/johncena/tasks/TodoTest.java new file mode 100644 index 0000000000..0dd168930d --- /dev/null +++ b/src/test/java/johncena/tasks/TodoTest.java @@ -0,0 +1,13 @@ +package johncena.tasks; + + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class TodoTest { + + @Test + public void testStringConversion() { + assertEquals("[T][ ] study", new Todo("study").toString()); + } +} From e2603a89294ae4064bcb207cc3f5afe46b2531c2 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 20 Sep 2024 12:48:09 +0800 Subject: [PATCH 24/55] add archiveFileName in ShadowJar action of build.gradle file --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index c7084927fd..b80e7ffa9e 100644 --- a/build.gradle +++ b/build.gradle @@ -35,6 +35,7 @@ application { shadowJar { archiveBaseName = "JohnCena" archiveClassifier = null + archiveFileName = "JohnCena.jar" } run{ From f5685f08f789e6e0357a32d469d4480999d75f2b Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 20 Sep 2024 13:27:57 +0800 Subject: [PATCH 25/55] Add javadoc comments for all public classes and public methods --- src/main/java/johncena/JohnCena.java | 9 ++++++++- src/main/java/johncena/art/Logo.java | 15 +++++++++++++++ .../java/johncena/commands/ByeCommand.java | 11 +++++++++++ src/main/java/johncena/commands/Command.java | 10 ++++++++++ .../johncena/commands/DeadlineCommand.java | 17 +++++++++++++++++ .../java/johncena/commands/DeleteCommand.java | 11 +++++++++++ .../java/johncena/commands/EventCommand.java | 19 +++++++++++++++++++ .../java/johncena/commands/HelloCommand.java | 9 +++++++++ .../java/johncena/commands/HelpCommand.java | 9 +++++++++ .../java/johncena/commands/ListCommand.java | 12 ++++++++++++ .../java/johncena/commands/MarkCommand.java | 15 +++++++++++++++ .../java/johncena/commands/OnCommand.java | 14 ++++++++++++++ .../java/johncena/commands/TodoCommand.java | 16 ++++++++++++++++ .../java/johncena/commands/UnmarkCommand.java | 15 +++++++++++++++ .../java/johncena/parser/InputHandler.java | 14 ++++++++++++++ .../johncena/parser/InputHandlerTest.java | 4 +++- .../java/johncena/tasks/DeadlineTest.java | 7 +++++++ src/test/java/johncena/tasks/TodoTest.java | 6 ++++++ 18 files changed, 211 insertions(+), 2 deletions(-) diff --git a/src/main/java/johncena/JohnCena.java b/src/main/java/johncena/JohnCena.java index cfe4562adb..8e39759982 100644 --- a/src/main/java/johncena/JohnCena.java +++ b/src/main/java/johncena/JohnCena.java @@ -12,12 +12,19 @@ import johncena.parser.InputHandler; import johncena.commands.HelloCommand; - +/** + * The {@code JohnCena} class is the main class of the John Cena program. + */ public class JohnCena { private static ArrayList tasks = new ArrayList<>(); private static InputHandler inputHandler; + /** + * The main entry point of the John Cena program. + * + * @param args the command-line arguments + */ public static void main(String[] args) { tasks = Storage.loadTasks(); diff --git a/src/main/java/johncena/art/Logo.java b/src/main/java/johncena/art/Logo.java index e1618556d9..bceaeec470 100644 --- a/src/main/java/johncena/art/Logo.java +++ b/src/main/java/johncena/art/Logo.java @@ -1,8 +1,17 @@ package johncena.art; + +/** + * The {@code Logo} class provides a static method to retrieve the ASCII art logo + * for the John Cena Task Manager application. + */ public class Logo { + + /** + * The ASCII art logo for the John Cena Task Manager application. + */ private static final String logo = " JJJJJJJJJJJ hhhhhhh CCCCCCCCCCCCC \n" + " J:::::::::J h:::::h CCC::::::::::::C \n" @@ -21,6 +30,12 @@ public class Logo { + " JJ:::::::::JJ oo:::::::::::oo h:::::h h:::::h n::::n n::::n CCC::::::::::::C ee:::::::::::::e n::::n n::::n a::::::::::aa:::a\n" + " JJJJJJJJJ ooooooooooo hhhhhhh hhhhhhh nnnnnn nnnnnn CCCCCCCCCCCCC eeeeeeeeeeeeee nnnnnn nnnnnn aaaaaaaaaa aaaa\n"; + + /** + * Returns the ASCII art logo for the John Cena Task Manager application. + * + * @return the ASCII art logo + */ public static String getLogo() { return logo; } diff --git a/src/main/java/johncena/commands/ByeCommand.java b/src/main/java/johncena/commands/ByeCommand.java index 993ecb15b8..3a59676408 100644 --- a/src/main/java/johncena/commands/ByeCommand.java +++ b/src/main/java/johncena/commands/ByeCommand.java @@ -2,8 +2,19 @@ import johncena.art.Logo; + +/** + * The {@code ByeCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "bye" command, which prints a farewell message + * and the ASCII art logo, then exits the application. + */ public class ByeCommand implements Command { + + /** + * Executes the "bye" command. Prints a farewell message and the ASCII art logo, + * then exits the application. + */ @Override public void execute() { System.out.println("____________________________________________________________"); diff --git a/src/main/java/johncena/commands/Command.java b/src/main/java/johncena/commands/Command.java index 230a6e51c6..1ff65afc52 100644 --- a/src/main/java/johncena/commands/Command.java +++ b/src/main/java/johncena/commands/Command.java @@ -2,7 +2,17 @@ import johncena.exceptions.CenaException; + +/** + * The {@code Command} interface provides a method to execute a command. + * Implementing classes should provide the specific implementation of the command. + */ public interface Command { + /** + * Executes the command. + * + * @throws CenaException if an error occurs during the execution of the command + */ void execute() throws CenaException; } diff --git a/src/main/java/johncena/commands/DeadlineCommand.java b/src/main/java/johncena/commands/DeadlineCommand.java index 3a695e4386..814b3aaccf 100644 --- a/src/main/java/johncena/commands/DeadlineCommand.java +++ b/src/main/java/johncena/commands/DeadlineCommand.java @@ -7,18 +7,35 @@ import java.util.ArrayList; + +/** + * The {@code DeadlineCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "deadline" command, which adds a deadline task to the task list. + */ public class DeadlineCommand implements Command{ private ArrayList tasks; private String description; private String by; + /** + * Constructs a new {@code DeadlineCommand} with the specified task list, description, and deadline. + * + * @param tasks the list of tasks + * @param description the description of the deadline task + * @param by the deadline for the task + */ public DeadlineCommand(ArrayList tasks, String description, String by) { this.tasks = tasks; this.description = description; this.by = by; } + /** + * Executes the "deadline" command. Adds a deadline task to the task list. + * + * @throws CenaInvalidDeadlineException if the description for the deadline is incorrect + */ @Override public void execute() throws CenaInvalidDeadlineException { if (description.isEmpty() || by.isEmpty()) { diff --git a/src/main/java/johncena/commands/DeleteCommand.java b/src/main/java/johncena/commands/DeleteCommand.java index 05401645e4..94e4d43d6d 100644 --- a/src/main/java/johncena/commands/DeleteCommand.java +++ b/src/main/java/johncena/commands/DeleteCommand.java @@ -6,6 +6,11 @@ import java.util.ArrayList; + +/** + * The {@code DeleteCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "delete" command, which removes a task from the task list. + */ public class DeleteCommand implements Command { private ArrayList tasks; private int taskIndex; @@ -15,6 +20,12 @@ public DeleteCommand(ArrayList tasks, int taskIndex) { this.taskIndex = taskIndex; } + + /** + * Executes the "delete" command. Removes a task from the task list. + * + * @throws CenaInvalidTaskIndexException if the task index is invalid + */ @Override public void execute() throws CenaInvalidTaskIndexException { if (taskIndex < 0 || taskIndex >= tasks.size()) { diff --git a/src/main/java/johncena/commands/EventCommand.java b/src/main/java/johncena/commands/EventCommand.java index 90ac411324..f2838acd3f 100644 --- a/src/main/java/johncena/commands/EventCommand.java +++ b/src/main/java/johncena/commands/EventCommand.java @@ -7,12 +7,25 @@ import java.util.ArrayList; + +/** + * The {@code EventCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "event" command, which adds an event task to the task list. + */ public class EventCommand implements Command { private ArrayList tasks; private String description; private String from; private String to; + /** + * Constructs a new {@code EventCommand} with the specified task list, description, start time, and end time. + * + * @param tasks the list of tasks + * @param description the description of the event task + * @param from the start time of the event + * @param to the end time of the event + */ public EventCommand(ArrayList tasks, String description, String from, String to) { this.tasks = tasks; this.description = description; @@ -20,6 +33,12 @@ public EventCommand(ArrayList tasks, String description, String from, Stri this.to = to; } + + /** + * Executes the "event" command. Adds an event task to the task list. + * + * @throws CenaInvalidEventException if the description for the event is incorrect + */ @Override public void execute() throws CenaInvalidEventException { if (description.isEmpty() || from.isEmpty() || to.isEmpty()) { diff --git a/src/main/java/johncena/commands/HelloCommand.java b/src/main/java/johncena/commands/HelloCommand.java index 844360713f..535ae35207 100644 --- a/src/main/java/johncena/commands/HelloCommand.java +++ b/src/main/java/johncena/commands/HelloCommand.java @@ -2,8 +2,17 @@ import johncena.art.Logo; + +/** + * The {@code HelloCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "hello" command, which prints a welcome message + * and the ASCII art logo. + */ public class HelloCommand implements Command { + /** + * Executes the "hello" command. Prints a welcome message and the ASCII art logo. + */ @Override public void execute() { System.out.println("____________________________________________________________"); diff --git a/src/main/java/johncena/commands/HelpCommand.java b/src/main/java/johncena/commands/HelpCommand.java index 9417dc4b09..0e79713b09 100644 --- a/src/main/java/johncena/commands/HelpCommand.java +++ b/src/main/java/johncena/commands/HelpCommand.java @@ -1,7 +1,16 @@ package johncena.commands; +/** + * The {@code HelpCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "help" command, which displays the list of commands + * that the user can use. + */ public class HelpCommand implements Command { + + /** + * Executes the "help" command. Displays the list of commands that the user can use. + */ @Override public void execute() { System.out.println("____________________________________________________________"); diff --git a/src/main/java/johncena/commands/ListCommand.java b/src/main/java/johncena/commands/ListCommand.java index 0288e6494a..0a48393b60 100644 --- a/src/main/java/johncena/commands/ListCommand.java +++ b/src/main/java/johncena/commands/ListCommand.java @@ -4,13 +4,25 @@ import java.util.ArrayList; +/** + * The {@code ListCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "list" command, which lists all tasks in the task list. + */ public class ListCommand implements Command { private ArrayList tasks; + /** + * Constructs a new {@code ListCommand} with the specified task list. + * + * @param tasks the list of tasks + */ public ListCommand(ArrayList tasks) { this.tasks = tasks; } + /** + * Executes the "list" command. Lists all tasks in the task list. + */ @Override public void execute() { System.out.println("____________________________________________________________"); diff --git a/src/main/java/johncena/commands/MarkCommand.java b/src/main/java/johncena/commands/MarkCommand.java index 003fa7abee..c3978e00a8 100644 --- a/src/main/java/johncena/commands/MarkCommand.java +++ b/src/main/java/johncena/commands/MarkCommand.java @@ -6,15 +6,30 @@ import java.util.ArrayList; +/** + * The {@code MarkCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "mark" command, which marks a task as done in the task list. + */ public class MarkCommand implements Command { private ArrayList tasks; private int taskIndex; + /** + * Constructs a new {@code MarkCommand} with the specified task list and task index. + * + * @param tasks the list of tasks + * @param taskIndex the index of the task to be marked as done + */ public MarkCommand(ArrayList tasks, int taskIndex) { this.tasks = tasks; this.taskIndex = taskIndex; } + /** + * Executes the "mark" command. Marks a task as done in the task list. + * + * @throws CenaInvalidTaskIndexException if the task index is invalid + */ @Override public void execute() throws CenaInvalidTaskIndexException { if (taskIndex < 0 || taskIndex >= tasks.size()) { diff --git a/src/main/java/johncena/commands/OnCommand.java b/src/main/java/johncena/commands/OnCommand.java index 18eb05e697..9c85ff39d1 100644 --- a/src/main/java/johncena/commands/OnCommand.java +++ b/src/main/java/johncena/commands/OnCommand.java @@ -6,16 +6,30 @@ import java.time.format.DateTimeParseException; import java.util.ArrayList; +/** + * The {@code OnCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "on" command, which lists all tasks on a specified date. + */ public class OnCommand implements Command { private ArrayList tasks; private LocalDate targetDate; + /** + * Constructs a new {@code OnCommand} with the specified task list and date. + * + * @param tasks the list of tasks + * @param date the date to filter tasks by + * @throws DateTimeParseException if the date string is in an incorrect format + */ public OnCommand(ArrayList tasks, String date) throws DateTimeParseException { this.tasks = tasks; // Parse the date string into a LocalDate object using the specified format this.targetDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); } + /** + * Executes the "on" command. Lists all tasks on the specified date. + */ @Override public void execute() { System.out.println("____________________________________________________________"); diff --git a/src/main/java/johncena/commands/TodoCommand.java b/src/main/java/johncena/commands/TodoCommand.java index 278cb71d52..1d14c6e5f1 100644 --- a/src/main/java/johncena/commands/TodoCommand.java +++ b/src/main/java/johncena/commands/TodoCommand.java @@ -8,15 +8,31 @@ import java.util.ArrayList; +/** + * The {@code TodoCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "todo" command, which adds a todo task to the task list. + */ public class TodoCommand implements Command { private ArrayList tasks; private String description; + /** + * Constructs a new {@code TodoCommand} with the specified task list and description. + * + * @param tasks the list of tasks + * @param description the description of the todo task + */ public TodoCommand(ArrayList tasks, String description) { this.tasks = tasks; this.description = description; } + /** + * Executes the "todo" command. Adds a todo task to the task list. + * + * @throws CenaEmptyDescriptionException if the description of the todo is empty + * @throws CenaInvalidTodoException if the description of the todo is invalid + */ @Override public void execute() throws CenaEmptyDescriptionException, CenaInvalidTodoException { if (description.isEmpty()) { diff --git a/src/main/java/johncena/commands/UnmarkCommand.java b/src/main/java/johncena/commands/UnmarkCommand.java index 09633e9756..cef2b021ad 100644 --- a/src/main/java/johncena/commands/UnmarkCommand.java +++ b/src/main/java/johncena/commands/UnmarkCommand.java @@ -6,15 +6,30 @@ import johncena.storage.Storage; import johncena.tasks.Task; +/** + * The {@code UnmarkCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "unmark" command, which marks a task as not done in the task list. + */ public class UnmarkCommand implements Command{ private ArrayList tasks; private int taskIndex; + /** + * Constructs a new {@code UnmarkCommand} with the specified task list and task index. + * + * @param tasks the list of tasks + * @param taskIndex the index of the task to be marked as not done + */ public UnmarkCommand(ArrayList tasks, int taskIndex) { this.tasks = tasks; this.taskIndex = taskIndex; } + /** + * Executes the "unmark" command. Marks a task as not done in the task list. + * + * @throws CenaInvalidTaskIndexException if the task index is invalid + */ @Override public void execute() throws CenaInvalidTaskIndexException { if (taskIndex < 0 || taskIndex >= tasks.size()) { diff --git a/src/main/java/johncena/parser/InputHandler.java b/src/main/java/johncena/parser/InputHandler.java index 054b6306ca..51c9a81536 100644 --- a/src/main/java/johncena/parser/InputHandler.java +++ b/src/main/java/johncena/parser/InputHandler.java @@ -7,13 +7,27 @@ import java.time.format.DateTimeParseException; import java.util.ArrayList; +/** + * The {@code InputHandler} class is responsible for handling user input and executing the corresponding commands. + */ public class InputHandler { private ArrayList tasks; + /** + * Constructs a new {@code InputHandler} with the specified list of tasks. + * + * @param tasks the list of tasks + */ public InputHandler(ArrayList tasks) { this.tasks = tasks; } + /** + * Handles the user input and executes the corresponding command. + * + * @param input the user input + * @throws CenaException if an exception occurs while executing the command + */ public void handleInput(String input) throws CenaException { Command command = null; diff --git a/src/test/java/johncena/parser/InputHandlerTest.java b/src/test/java/johncena/parser/InputHandlerTest.java index d1e479f6ea..ed02376a7b 100644 --- a/src/test/java/johncena/parser/InputHandlerTest.java +++ b/src/test/java/johncena/parser/InputHandlerTest.java @@ -21,7 +21,9 @@ import java.io.IOException; - +/** + * This class tests the InputHandler class. + */ public class InputHandlerTest { private InputHandler inputHandler; diff --git a/src/test/java/johncena/tasks/DeadlineTest.java b/src/test/java/johncena/tasks/DeadlineTest.java index bca8346b2b..64dde2647c 100644 --- a/src/test/java/johncena/tasks/DeadlineTest.java +++ b/src/test/java/johncena/tasks/DeadlineTest.java @@ -2,8 +2,15 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * This class tests the Deadline class. + */ public class DeadlineTest { + /** + * Tests the string conversion of a Deadline object. + */ @Test public void testStringConversion() { assertEquals("[D][ ] study (by: 2024-09-23 1100)", diff --git a/src/test/java/johncena/tasks/TodoTest.java b/src/test/java/johncena/tasks/TodoTest.java index 0dd168930d..c71ae3cae9 100644 --- a/src/test/java/johncena/tasks/TodoTest.java +++ b/src/test/java/johncena/tasks/TodoTest.java @@ -4,8 +4,14 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +/** + * This class tests the Todo class. + */ public class TodoTest { + /** + * Tests the string conversion of a Todo object. + */ @Test public void testStringConversion() { assertEquals("[T][ ] study", new Todo("study").toString()); From 3c4c00008ddf7344079c6b6d7d4fc187c31a306c Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 20 Sep 2024 13:52:12 +0800 Subject: [PATCH 26/55] Removed javadoc violations --- src/main/java/johncena/JohnCena.java | 2 +- .../java/johncena/parser/InputHandler.java | 21 +++++++++++++++++-- src/main/java/johncena/storage/Storage.java | 13 +++++++++--- .../johncena/parser/InputHandlerTest.java | 18 ++++++++++++---- 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/main/java/johncena/JohnCena.java b/src/main/java/johncena/JohnCena.java index cfe4562adb..174f836461 100644 --- a/src/main/java/johncena/JohnCena.java +++ b/src/main/java/johncena/JohnCena.java @@ -2,7 +2,7 @@ import johncena.storage.Storage; import johncena.tasks.Task; -import johncena.exceptions.*; +import johncena.exceptions.CenaException; import java.io.File; import java.io.FileNotFoundException; diff --git a/src/main/java/johncena/parser/InputHandler.java b/src/main/java/johncena/parser/InputHandler.java index 054b6306ca..4991089056 100644 --- a/src/main/java/johncena/parser/InputHandler.java +++ b/src/main/java/johncena/parser/InputHandler.java @@ -1,7 +1,24 @@ package johncena.parser; -import johncena.commands.*; -import johncena.exceptions.*; +import johncena.commands.HelloCommand; +import johncena.commands.ByeCommand; +import johncena.commands.EventCommand; +import johncena.commands.TodoCommand; +import johncena.commands.DeadlineCommand; +import johncena.commands.ListCommand; +import johncena.commands.MarkCommand; +import johncena.commands.UnmarkCommand; +import johncena.commands.DeleteCommand; +import johncena.commands.OnCommand; +import johncena.commands.HelpCommand; +import johncena.commands.Command; + +import johncena.exceptions.CenaException; +import johncena.exceptions.CenaInvalidTaskIndexException; +import johncena.exceptions.CenaInvalidDeadlineException; +import johncena.exceptions.CenaInvalidEventException; +import johncena.exceptions.CenaUnknownCommandException; + import johncena.tasks.Task; import java.time.format.DateTimeParseException; diff --git a/src/main/java/johncena/storage/Storage.java b/src/main/java/johncena/storage/Storage.java index 54a7083a9c..2ac4c0c8df 100644 --- a/src/main/java/johncena/storage/Storage.java +++ b/src/main/java/johncena/storage/Storage.java @@ -1,9 +1,16 @@ package johncena.storage; import johncena.exceptions.CenaException; -import johncena.tasks.*; - -import java.io.*; +import johncena.tasks.Deadline; +import johncena.tasks.Event; +import johncena.tasks.Task; +import johncena.tasks.Todo; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; import java.util.ArrayList; /** diff --git a/src/test/java/johncena/parser/InputHandlerTest.java b/src/test/java/johncena/parser/InputHandlerTest.java index d1e479f6ea..b0826fe68d 100644 --- a/src/test/java/johncena/parser/InputHandlerTest.java +++ b/src/test/java/johncena/parser/InputHandlerTest.java @@ -1,9 +1,15 @@ package johncena.parser; import johncena.art.Logo; -import johncena.commands.*; -import johncena.exceptions.*; -import johncena.tasks.*; + +import johncena.exceptions.CenaException; +import johncena.exceptions.CenaUnknownCommandException; + +import johncena.tasks.Task; +import johncena.tasks.Deadline; +import johncena.tasks.Event; +import johncena.tasks.Todo; + import java.io.ByteArrayOutputStream; import java.io.PrintStream; @@ -15,7 +21,11 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; + import johncena.storage.Storage; From 7c54a2347c368b948373e893dec808c1681a497d Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 20 Sep 2024 14:20:45 +0800 Subject: [PATCH 27/55] Add find command functionality --- data/CenaTaskList.txt | 1 + .../java/johncena/commands/FindCommand.java | 45 +++++++++++++++++++ .../java/johncena/parser/InputHandler.java | 4 ++ 3 files changed, 50 insertions(+) create mode 100644 src/main/java/johncena/commands/FindCommand.java diff --git a/data/CenaTaskList.txt b/data/CenaTaskList.txt index 1463b92853..c2b045f8c8 100644 --- a/data/CenaTaskList.txt +++ b/data/CenaTaskList.txt @@ -2,3 +2,4 @@ T | 0 | read book T | 0 | dance T | 1 | swim T | 0 | study +D | 1 | study | 2024-09-20 2359 diff --git a/src/main/java/johncena/commands/FindCommand.java b/src/main/java/johncena/commands/FindCommand.java new file mode 100644 index 0000000000..8bcc6ed12e --- /dev/null +++ b/src/main/java/johncena/commands/FindCommand.java @@ -0,0 +1,45 @@ +package johncena.commands; + +import johncena.tasks.Task; + +import java.util.ArrayList; + +/** + * The {@code FindCommand} class implements the {@code Command} interface and provides + * the functionality to execute the "find" command, which searches for tasks that + * contain a specific keyword in their description. + */ +public class FindCommand implements Command { + + private ArrayList tasks; + private String keyword; + + /** + * Constructs a new {@code FindCommand} with the specified task list and keyword. + * + * @param tasks the list of tasks + * @param keyword the keyword to search for + */ + public FindCommand(ArrayList tasks, String keyword) { + this.tasks = tasks; + this.keyword = keyword; + } + + /** + * Executes the "find" command. Searches for tasks that contain the keyword + * in their description and prints the matching tasks. + */ + @Override + public void execute() { + System.out.println("____________________________________________________________"); + System.out.println(" Here are the matching tasks in your list:"); + int index = 1; + for (Task task : tasks) { + if (task.getDescription().contains(keyword)) { + System.out.println(" " + index + "." + task); + } + index++; + } + System.out.println("____________________________________________________________"); + } +} \ No newline at end of file diff --git a/src/main/java/johncena/parser/InputHandler.java b/src/main/java/johncena/parser/InputHandler.java index 5af448875b..1c50109fca 100644 --- a/src/main/java/johncena/parser/InputHandler.java +++ b/src/main/java/johncena/parser/InputHandler.java @@ -12,6 +12,7 @@ import johncena.commands.OnCommand; import johncena.commands.HelpCommand; import johncena.commands.Command; +import johncena.commands.FindCommand; import johncena.exceptions.CenaException; import johncena.exceptions.CenaInvalidTaskIndexException; @@ -84,6 +85,9 @@ public void handleInput(String input) throws CenaException { } else if (input.startsWith("on ")) { String date = input.substring(3).trim(); command = new OnCommand(tasks, date); + } else if (input.startsWith("find ")) { + String keyword = input.substring(5).trim(); + command = new FindCommand(tasks, keyword); } else { throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-("); } From 0c567f84a27e713c0a0719327870a527af82a612 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 20 Sep 2024 15:52:13 +0800 Subject: [PATCH 28/55] Corrected errors according to CheckStyle --- build.gradle | 5 + config/checkstyle/checkstyle.xml | 434 ++++++++++++++++++ config/checkstyle/suppressions.xml | 10 + src/main/java/johncena/JohnCena.java | 12 +- src/main/java/johncena/art/Logo.java | 2 +- .../johncena/commands/DeadlineCommand.java | 7 +- .../java/johncena/commands/DeleteCommand.java | 10 +- .../java/johncena/commands/EventCommand.java | 5 +- .../java/johncena/commands/FindCommand.java | 6 +- .../java/johncena/commands/ListCommand.java | 4 +- .../java/johncena/commands/MarkCommand.java | 4 +- .../java/johncena/commands/OnCommand.java | 6 +- .../java/johncena/commands/TodoCommand.java | 7 +- .../java/johncena/commands/UnmarkCommand.java | 2 +- .../CenaEmptyDescriptionException.java | 5 +- .../johncena/exceptions/CenaException.java | 5 +- .../CenaInvalidDateTimeException.java | 8 +- .../CenaInvalidDeadlineException.java | 5 +- .../exceptions/CenaInvalidEventException.java | 5 +- .../CenaInvalidTaskIndexException.java | 5 +- .../exceptions/CenaInvalidTodoException.java | 5 +- .../CenaUnknownCommandException.java | 5 +- .../java/johncena/parser/InputHandler.java | 41 +- src/main/java/johncena/storage/Storage.java | 43 +- src/main/java/johncena/tasks/Deadline.java | 2 +- src/main/java/johncena/tasks/Event.java | 4 +- src/main/java/johncena/tasks/Task.java | 2 +- src/main/java/johncena/tasks/Todo.java | 2 +- .../johncena/parser/InputHandlerTest.java | 31 +- 29 files changed, 575 insertions(+), 107 deletions(-) create mode 100644 config/checkstyle/checkstyle.xml create mode 100644 config/checkstyle/suppressions.xml diff --git a/build.gradle b/build.gradle index b80e7ffa9e..21f214f745 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ plugins { id 'java' id 'application' id 'com.github.johnrengelman.shadow' version '7.1.2' + id 'checkstyle' } repositories { @@ -41,3 +42,7 @@ shadowJar { run{ standardInput = System.in } + +checkstyle { + toolVersion = '10.2' +} diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml new file mode 100644 index 0000000000..eb761a9b9a --- /dev/null +++ b/config/checkstyle/checkstyle.xml @@ -0,0 +1,434 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml new file mode 100644 index 0000000000..39efb6e4ac --- /dev/null +++ b/config/checkstyle/suppressions.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/src/main/java/johncena/JohnCena.java b/src/main/java/johncena/JohnCena.java index 27bb78d657..5522bf1a4b 100644 --- a/src/main/java/johncena/JohnCena.java +++ b/src/main/java/johncena/JohnCena.java @@ -1,16 +1,18 @@ package johncena; -import johncena.storage.Storage; -import johncena.tasks.Task; -import johncena.exceptions.CenaException; import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; -import johncena.parser.InputHandler; import johncena.commands.HelloCommand; +import johncena.exceptions.CenaException; +import johncena.parser.InputHandler; +import johncena.storage.Storage; +import johncena.tasks.Task; + + /** * The {@code JohnCena} class is the main class of the John Cena program. @@ -58,4 +60,4 @@ public static void main(String[] args) { scanner.close(); } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/art/Logo.java b/src/main/java/johncena/art/Logo.java index bceaeec470..707996dcc1 100644 --- a/src/main/java/johncena/art/Logo.java +++ b/src/main/java/johncena/art/Logo.java @@ -39,4 +39,4 @@ public class Logo { public static String getLogo() { return logo; } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/commands/DeadlineCommand.java b/src/main/java/johncena/commands/DeadlineCommand.java index 814b3aaccf..4e51966621 100644 --- a/src/main/java/johncena/commands/DeadlineCommand.java +++ b/src/main/java/johncena/commands/DeadlineCommand.java @@ -1,18 +1,17 @@ package johncena.commands; +import java.util.ArrayList; + import johncena.exceptions.CenaInvalidDeadlineException; import johncena.storage.Storage; import johncena.tasks.Deadline; import johncena.tasks.Task; -import java.util.ArrayList; - - /** * The {@code DeadlineCommand} class implements the {@code Command} interface and provides * the functionality to execute the "deadline" command, which adds a deadline task to the task list. */ -public class DeadlineCommand implements Command{ +public class DeadlineCommand implements Command { private ArrayList tasks; private String description; diff --git a/src/main/java/johncena/commands/DeleteCommand.java b/src/main/java/johncena/commands/DeleteCommand.java index 94e4d43d6d..e34e3a39f6 100644 --- a/src/main/java/johncena/commands/DeleteCommand.java +++ b/src/main/java/johncena/commands/DeleteCommand.java @@ -1,11 +1,11 @@ package johncena.commands; +import java.util.ArrayList; + import johncena.exceptions.CenaInvalidTaskIndexException; import johncena.storage.Storage; import johncena.tasks.Task; -import java.util.ArrayList; - /** * The {@code DeleteCommand} class implements the {@code Command} interface and provides @@ -15,6 +15,12 @@ public class DeleteCommand implements Command { private ArrayList tasks; private int taskIndex; + /** + * Constructs a new {@code DeleteCommand} with the specified task list and task index. + * + * @param tasks the list of tasks + * @param taskIndex the index of the task to remove + */ public DeleteCommand(ArrayList tasks, int taskIndex) { this.tasks = tasks; this.taskIndex = taskIndex; diff --git a/src/main/java/johncena/commands/EventCommand.java b/src/main/java/johncena/commands/EventCommand.java index f2838acd3f..99e733c6ea 100644 --- a/src/main/java/johncena/commands/EventCommand.java +++ b/src/main/java/johncena/commands/EventCommand.java @@ -1,13 +1,12 @@ package johncena.commands; +import java.util.ArrayList; + import johncena.exceptions.CenaInvalidEventException; import johncena.storage.Storage; import johncena.tasks.Event; import johncena.tasks.Task; -import java.util.ArrayList; - - /** * The {@code EventCommand} class implements the {@code Command} interface and provides * the functionality to execute the "event" command, which adds an event task to the task list. diff --git a/src/main/java/johncena/commands/FindCommand.java b/src/main/java/johncena/commands/FindCommand.java index 8bcc6ed12e..8c05921b9c 100644 --- a/src/main/java/johncena/commands/FindCommand.java +++ b/src/main/java/johncena/commands/FindCommand.java @@ -1,9 +1,9 @@ package johncena.commands; -import johncena.tasks.Task; - import java.util.ArrayList; +import johncena.tasks.Task; + /** * The {@code FindCommand} class implements the {@code Command} interface and provides * the functionality to execute the "find" command, which searches for tasks that @@ -42,4 +42,4 @@ public void execute() { } System.out.println("____________________________________________________________"); } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/commands/ListCommand.java b/src/main/java/johncena/commands/ListCommand.java index 0a48393b60..feff170ea1 100644 --- a/src/main/java/johncena/commands/ListCommand.java +++ b/src/main/java/johncena/commands/ListCommand.java @@ -1,9 +1,9 @@ package johncena.commands; -import johncena.tasks.Task; - import java.util.ArrayList; +import johncena.tasks.Task; + /** * The {@code ListCommand} class implements the {@code Command} interface and provides * the functionality to execute the "list" command, which lists all tasks in the task list. diff --git a/src/main/java/johncena/commands/MarkCommand.java b/src/main/java/johncena/commands/MarkCommand.java index c3978e00a8..ee8dd42a98 100644 --- a/src/main/java/johncena/commands/MarkCommand.java +++ b/src/main/java/johncena/commands/MarkCommand.java @@ -1,11 +1,11 @@ package johncena.commands; +import java.util.ArrayList; + import johncena.exceptions.CenaInvalidTaskIndexException; import johncena.storage.Storage; import johncena.tasks.Task; -import java.util.ArrayList; - /** * The {@code MarkCommand} class implements the {@code Command} interface and provides * the functionality to execute the "mark" command, which marks a task as done in the task list. diff --git a/src/main/java/johncena/commands/OnCommand.java b/src/main/java/johncena/commands/OnCommand.java index 9c85ff39d1..acb4528d6a 100644 --- a/src/main/java/johncena/commands/OnCommand.java +++ b/src/main/java/johncena/commands/OnCommand.java @@ -1,11 +1,12 @@ package johncena.commands; -import johncena.tasks.Task; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.ArrayList; +import johncena.tasks.Task; + /** * The {@code OnCommand} class implements the {@code Command} interface and provides * the functionality to execute the "on" command, which lists all tasks on a specified date. @@ -33,7 +34,8 @@ public OnCommand(ArrayList tasks, String date) throws DateTimeParseExcepti @Override public void execute() { System.out.println("____________________________________________________________"); - System.out.println(" Here are the tasks on " + targetDate.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + ":"); + System.out.println(" Here are the tasks on " + targetDate.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + + ":"); for (int i = 0; i < tasks.size(); i++) { Task task = tasks.get(i); if (task.occursOn(targetDate)) { diff --git a/src/main/java/johncena/commands/TodoCommand.java b/src/main/java/johncena/commands/TodoCommand.java index 1d14c6e5f1..aa91a7c4bc 100644 --- a/src/main/java/johncena/commands/TodoCommand.java +++ b/src/main/java/johncena/commands/TodoCommand.java @@ -1,12 +1,13 @@ package johncena.commands; +import java.util.ArrayList; + +import johncena.exceptions.CenaEmptyDescriptionException; import johncena.exceptions.CenaInvalidTodoException; +import johncena.storage.Storage; import johncena.tasks.Task; import johncena.tasks.Todo; -import johncena.storage.Storage; -import johncena.exceptions.CenaEmptyDescriptionException; -import java.util.ArrayList; /** * The {@code TodoCommand} class implements the {@code Command} interface and provides diff --git a/src/main/java/johncena/commands/UnmarkCommand.java b/src/main/java/johncena/commands/UnmarkCommand.java index cef2b021ad..3e363a8775 100644 --- a/src/main/java/johncena/commands/UnmarkCommand.java +++ b/src/main/java/johncena/commands/UnmarkCommand.java @@ -10,7 +10,7 @@ * The {@code UnmarkCommand} class implements the {@code Command} interface and provides * the functionality to execute the "unmark" command, which marks a task as not done in the task list. */ -public class UnmarkCommand implements Command{ +public class UnmarkCommand implements Command { private ArrayList tasks; private int taskIndex; diff --git a/src/main/java/johncena/exceptions/CenaEmptyDescriptionException.java b/src/main/java/johncena/exceptions/CenaEmptyDescriptionException.java index e360c84dfc..625316aab5 100644 --- a/src/main/java/johncena/exceptions/CenaEmptyDescriptionException.java +++ b/src/main/java/johncena/exceptions/CenaEmptyDescriptionException.java @@ -8,9 +8,10 @@ public class CenaEmptyDescriptionException extends CenaException { /** * Constructs a new exceptions.CenaEmptyDescriptionException with the specified detail message. * - * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() + * method. */ public CenaEmptyDescriptionException(String message) { super(message); } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/exceptions/CenaException.java b/src/main/java/johncena/exceptions/CenaException.java index 95b06a1e64..5ecb5030af 100644 --- a/src/main/java/johncena/exceptions/CenaException.java +++ b/src/main/java/johncena/exceptions/CenaException.java @@ -8,9 +8,10 @@ public class CenaException extends Exception { /** * Constructs a new exceptions.CenaException with the specified detail message. * - * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() + * method. */ public CenaException(String message) { super(message); } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/exceptions/CenaInvalidDateTimeException.java b/src/main/java/johncena/exceptions/CenaInvalidDateTimeException.java index 2094d28d82..e19020f7d7 100644 --- a/src/main/java/johncena/exceptions/CenaInvalidDateTimeException.java +++ b/src/main/java/johncena/exceptions/CenaInvalidDateTimeException.java @@ -10,7 +10,8 @@ public class CenaInvalidDateTimeException extends Exception { /** * Constructs a new exceptions.CenaInvalidDateTimeException with the specified detail message. * - * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() + * method. */ public CenaInvalidDateTimeException(String message) { super(message); @@ -19,10 +20,11 @@ public CenaInvalidDateTimeException(String message) { /** * Constructs a new exceptions.CenaInvalidDateTimeException with the specified detail message and cause. * - * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() + * method. * @param cause the cause of the exception (which is saved for later retrieval by the Throwable.getCause() method). */ public CenaInvalidDateTimeException(String message, DateTimeParseException cause) { super(message, cause); } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/exceptions/CenaInvalidDeadlineException.java b/src/main/java/johncena/exceptions/CenaInvalidDeadlineException.java index 2d4aaea9fd..c84f0edb37 100644 --- a/src/main/java/johncena/exceptions/CenaInvalidDeadlineException.java +++ b/src/main/java/johncena/exceptions/CenaInvalidDeadlineException.java @@ -8,9 +8,10 @@ public class CenaInvalidDeadlineException extends CenaException { /** * Constructs a new exceptions.CenaInvalidDeadlineException with the specified detail message. * - * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() + * method. */ public CenaInvalidDeadlineException(String message) { super(message); } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/exceptions/CenaInvalidEventException.java b/src/main/java/johncena/exceptions/CenaInvalidEventException.java index 069104df39..86d1b9aea8 100644 --- a/src/main/java/johncena/exceptions/CenaInvalidEventException.java +++ b/src/main/java/johncena/exceptions/CenaInvalidEventException.java @@ -8,9 +8,10 @@ public class CenaInvalidEventException extends CenaException { /** * Constructs a new exceptions.CenaInvalidEventException with the specified detail message. * - * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() + * method. */ public CenaInvalidEventException(String message) { super(message); } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/exceptions/CenaInvalidTaskIndexException.java b/src/main/java/johncena/exceptions/CenaInvalidTaskIndexException.java index 9f0a6baab3..bb563da3a9 100644 --- a/src/main/java/johncena/exceptions/CenaInvalidTaskIndexException.java +++ b/src/main/java/johncena/exceptions/CenaInvalidTaskIndexException.java @@ -8,9 +8,10 @@ public class CenaInvalidTaskIndexException extends CenaException { /** * Constructs a new exceptions.CenaInvalidTaskIndexException with the specified detail message. * - * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() + * method. */ public CenaInvalidTaskIndexException(String message) { super(message); } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/exceptions/CenaInvalidTodoException.java b/src/main/java/johncena/exceptions/CenaInvalidTodoException.java index b9455e1b48..229f003102 100644 --- a/src/main/java/johncena/exceptions/CenaInvalidTodoException.java +++ b/src/main/java/johncena/exceptions/CenaInvalidTodoException.java @@ -8,9 +8,10 @@ public class CenaInvalidTodoException extends CenaException { /** * Constructs a new exceptions.CenaInvalidTodoException with the specified detail message. * - * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() + * method. */ public CenaInvalidTodoException(String message) { super(message); } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/exceptions/CenaUnknownCommandException.java b/src/main/java/johncena/exceptions/CenaUnknownCommandException.java index 1ba4eec64d..51f6e05be7 100644 --- a/src/main/java/johncena/exceptions/CenaUnknownCommandException.java +++ b/src/main/java/johncena/exceptions/CenaUnknownCommandException.java @@ -8,9 +8,10 @@ public class CenaUnknownCommandException extends CenaException { /** * Constructs a new exceptions.CenaUnknownCommandException with the specified detail message. * - * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. + * @param message the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() + * method. */ public CenaUnknownCommandException(String message) { super(message); } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/parser/InputHandler.java b/src/main/java/johncena/parser/InputHandler.java index 1c50109fca..6850b7a831 100644 --- a/src/main/java/johncena/parser/InputHandler.java +++ b/src/main/java/johncena/parser/InputHandler.java @@ -1,34 +1,34 @@ package johncena.parser; -import johncena.commands.HelloCommand; +import java.time.format.DateTimeParseException; +import java.util.ArrayList; + import johncena.commands.ByeCommand; -import johncena.commands.EventCommand; -import johncena.commands.TodoCommand; +import johncena.commands.Command; import johncena.commands.DeadlineCommand; +import johncena.commands.DeleteCommand; +import johncena.commands.EventCommand; +import johncena.commands.FindCommand; +import johncena.commands.HelloCommand; +import johncena.commands.HelpCommand; import johncena.commands.ListCommand; import johncena.commands.MarkCommand; -import johncena.commands.UnmarkCommand; -import johncena.commands.DeleteCommand; import johncena.commands.OnCommand; -import johncena.commands.HelpCommand; -import johncena.commands.Command; -import johncena.commands.FindCommand; - +import johncena.commands.TodoCommand; +import johncena.commands.UnmarkCommand; import johncena.exceptions.CenaException; -import johncena.exceptions.CenaInvalidTaskIndexException; import johncena.exceptions.CenaInvalidDeadlineException; import johncena.exceptions.CenaInvalidEventException; +import johncena.exceptions.CenaInvalidTaskIndexException; import johncena.exceptions.CenaUnknownCommandException; - import johncena.tasks.Task; -import java.time.format.DateTimeParseException; -import java.util.ArrayList; /** * The {@code InputHandler} class is responsible for handling user input and executing the corresponding commands. */ public class InputHandler { + private ArrayList tasks; /** @@ -66,21 +66,25 @@ public void handleInput(String input) throws CenaException { } else if (input.startsWith("deadline ")) { String[] parts = input.substring(9).split(" /by "); if (parts.length < 2) { - throw new CenaInvalidDeadlineException("Incorrect description for deadline. It should contain only /by."); + throw new CenaInvalidDeadlineException("Incorrect description for deadline. It should contain " + + "only /by."); } command = new DeadlineCommand(tasks, parts[0], parts[1]); } else if (input.startsWith("event ")) { String[] parts = input.substring(6).split(" /from | /to "); if (parts.length < 3) { - throw new CenaInvalidEventException("Incorrect description for event. It should contain /from and /to."); + throw new CenaInvalidEventException("Incorrect description for event. It should contain " + + "/from and /to."); } command = new EventCommand(tasks, parts[0], parts[1], parts[2]); } else if (input.startsWith("delete ")) { int taskIndex = Integer.parseInt(input.split(" ")[1]) - 1; command = new DeleteCommand(tasks, taskIndex); - } else if (input.equals("hello") || input.equals("hi") || input.equals("hey") || input.equals("yo") || input.equals("sup")) { + } else if (input.equals("hello") || input.equals("hi") || input.equals("hey") + || input.equals("yo") || input.equals("sup")) { command = new HelloCommand(); - } else if (input.equals("help") || input.equals("commands") || input.equals("command") || input.equals("cmds") || input.equals("cmd")) { + } else if (input.equals("help") || input.equals("commands") || input.equals("command") + || input.equals("cmds") || input.equals("cmd")) { command = new HelpCommand(); } else if (input.startsWith("on ")) { String date = input.substring(3).trim(); @@ -96,7 +100,8 @@ public void handleInput(String input) throws CenaException { command.execute(); } - } catch (CenaInvalidTaskIndexException | CenaInvalidDeadlineException | CenaInvalidEventException | DateTimeParseException e) { + } catch (CenaInvalidTaskIndexException | CenaInvalidDeadlineException | CenaInvalidEventException + | DateTimeParseException e) { System.out.println("____________________________________________________________"); System.out.println(" OOPS!!! " + e.getMessage()); System.out.println("____________________________________________________________"); diff --git a/src/main/java/johncena/storage/Storage.java b/src/main/java/johncena/storage/Storage.java index 2ac4c0c8df..e27e4838cf 100644 --- a/src/main/java/johncena/storage/Storage.java +++ b/src/main/java/johncena/storage/Storage.java @@ -1,11 +1,5 @@ package johncena.storage; -import johncena.exceptions.CenaException; -import johncena.tasks.Deadline; -import johncena.tasks.Event; -import johncena.tasks.Task; -import johncena.tasks.Todo; - import java.io.BufferedReader; import java.io.File; import java.io.FileReader; @@ -13,13 +7,20 @@ import java.io.IOException; import java.util.ArrayList; +import johncena.exceptions.CenaException; +import johncena.tasks.Deadline; +import johncena.tasks.Event; +import johncena.tasks.Task; +import johncena.tasks.Todo; + + + /** * This class is responsible for saving and loading tasks from a file. */ public class Storage { - - private static String filePath = "./data/CenaTaskList.txt"; // Default file path public static final String SEPARATOR = " | "; + private static String filePath = "./data/CenaTaskList.txt"; // Default file path /** * Sets the file path for saving and loading tasks. @@ -98,23 +99,23 @@ private static Task parseTask(String line) throws CenaException { String taskType = taskDescription[0]; switch (taskType) { - case "T": - task = new Todo(taskDescription[2]); - break; + case "T": + task = new Todo(taskDescription[2]); + break; - case "D": - task = new Deadline(taskDescription[2], taskDescription[3]); - break; + case "D": + task = new Deadline(taskDescription[2], taskDescription[3]); + break; - case "E": - String[] eventTimes = taskDescription[3].split(" ~ "); - task = new Event(taskDescription[2], eventTimes[0], eventTimes[1]); - break; + case "E": + String[] eventTimes = taskDescription[3].split(" ~ "); + task = new Event(taskDescription[2], eventTimes[0], eventTimes[1]); + break; - default: - System.out.println("Unknown task type: " + taskType); - break; + default: + System.out.println("Unknown task type: " + taskType); + break; } boolean isDone = taskDescription[1].equals("1"); diff --git a/src/main/java/johncena/tasks/Deadline.java b/src/main/java/johncena/tasks/Deadline.java index 9d30784299..339671ab9f 100644 --- a/src/main/java/johncena/tasks/Deadline.java +++ b/src/main/java/johncena/tasks/Deadline.java @@ -53,4 +53,4 @@ public boolean occursOn(LocalDate date) { public String toString() { return "[D]" + super.toString() + " (by: " + this.getBy() + ")"; } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/tasks/Event.java b/src/main/java/johncena/tasks/Event.java index 01e26a4229..799a226386 100644 --- a/src/main/java/johncena/tasks/Event.java +++ b/src/main/java/johncena/tasks/Event.java @@ -1,8 +1,8 @@ package johncena.tasks; import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.time.LocalDate; +import java.time.format.DateTimeFormatter; /** * Represents an event task. @@ -63,4 +63,4 @@ public boolean occursOn(LocalDate date) { public String toString() { return "[E]" + super.toString() + " (from: " + getFrom() + " to: " + getTo() + ")"; } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/tasks/Task.java b/src/main/java/johncena/tasks/Task.java index 2deb2b8d40..d872074d12 100644 --- a/src/main/java/johncena/tasks/Task.java +++ b/src/main/java/johncena/tasks/Task.java @@ -80,4 +80,4 @@ public boolean occursOn(LocalDate date) { public String toString() { return "[" + this.getStatusIcon() + "] " + this.description; } -} \ No newline at end of file +} diff --git a/src/main/java/johncena/tasks/Todo.java b/src/main/java/johncena/tasks/Todo.java index 3125d63eda..a5f590e50d 100644 --- a/src/main/java/johncena/tasks/Todo.java +++ b/src/main/java/johncena/tasks/Todo.java @@ -35,4 +35,4 @@ public boolean occursOn(LocalDate date) { public String toString() { return "[T]" + super.toString(); } -} \ No newline at end of file +} diff --git a/src/test/java/johncena/parser/InputHandlerTest.java b/src/test/java/johncena/parser/InputHandlerTest.java index 8f826ba05b..ca785a1363 100644 --- a/src/test/java/johncena/parser/InputHandlerTest.java +++ b/src/test/java/johncena/parser/InputHandlerTest.java @@ -1,17 +1,7 @@ package johncena.parser; -import johncena.art.Logo; - -import johncena.exceptions.CenaException; -import johncena.exceptions.CenaUnknownCommandException; - -import johncena.tasks.Task; -import johncena.tasks.Deadline; -import johncena.tasks.Event; -import johncena.tasks.Todo; - - import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Paths; @@ -21,15 +11,20 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import johncena.art.Logo; +import johncena.exceptions.CenaException; +import johncena.exceptions.CenaUnknownCommandException; +import johncena.storage.Storage; +import johncena.tasks.Deadline; +import johncena.tasks.Event; +import johncena.tasks.Task; +import johncena.tasks.Todo; + + import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; - - -import johncena.storage.Storage; - -import java.io.IOException; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * This class tests the InputHandler class. @@ -229,4 +224,4 @@ public void testDeleteCommand() throws CenaException { assertEquals(1, tasks.size()); assertTrue(tasks.get(0) instanceof Deadline); } -} \ No newline at end of file +} From 92388613aef82ac5499793f062bc662a6ca9a7f0 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 20 Sep 2024 17:02:58 +0800 Subject: [PATCH 29/55] javafx start --- build.gradle | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/build.gradle b/build.gradle index 21f214f745..aa70421e78 100644 --- a/build.gradle +++ b/build.gradle @@ -13,6 +13,21 @@ repositories { dependencies { testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.0' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.0' + + String javaFxVersion = '17.0.7' + + 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 { From d80bc78c239b6310177a553f4ac02bf0f9a5a3b5 Mon Sep 17 00:00:00 2001 From: ishan-agarwal-05 Date: Fri, 20 Sep 2024 20:12:30 +0800 Subject: [PATCH 30/55] Add GUI support --- build.gradle | 2 +- data/CenaTaskList.txt | 6 +- src/main/java/johncena/JohnCena.java | 86 ++++++++++++------ src/main/java/johncena/Launcher.java | 14 +++ .../java/johncena/commands/ByeCommand.java | 23 +++-- src/main/java/johncena/commands/Command.java | 2 +- .../johncena/commands/DeadlineCommand.java | 20 ++-- .../java/johncena/commands/DeleteCommand.java | 21 +++-- .../java/johncena/commands/EventCommand.java | 21 +++-- .../java/johncena/commands/FindCommand.java | 12 ++- .../java/johncena/commands/HelloCommand.java | 17 +++- .../java/johncena/commands/HelpCommand.java | 47 +++++++--- .../java/johncena/commands/ListCommand.java | 21 ++++- .../java/johncena/commands/MarkCommand.java | 20 +++- .../java/johncena/commands/OnCommand.java | 25 +++-- .../java/johncena/commands/TodoCommand.java | 23 +++-- .../java/johncena/commands/UnmarkCommand.java | 20 +++- src/main/java/johncena/gui/DialogBox.java | 60 ++++++++++++ src/main/java/johncena/gui/Main.java | 32 +++++++ src/main/java/johncena/gui/MainWindow.java | 54 +++++++++++ .../java/johncena/parser/InputHandler.java | 25 ++--- src/main/resources/css/dialog-box.css | 40 ++++++++ src/main/resources/css/main.css | 47 ++++++++++ src/main/resources/images/johncena.png | Bin 0 -> 284653 bytes src/main/resources/images/nerdglasses.png | Bin 0 -> 144837 bytes src/main/resources/view/DialogBox.fxml | 22 +++++ src/main/resources/view/MainWindow.fxml | 44 +++++++++ 27 files changed, 581 insertions(+), 123 deletions(-) create mode 100644 src/main/java/johncena/Launcher.java create mode 100644 src/main/java/johncena/gui/DialogBox.java create mode 100644 src/main/java/johncena/gui/Main.java create mode 100644 src/main/java/johncena/gui/MainWindow.java create mode 100644 src/main/resources/css/dialog-box.css create mode 100644 src/main/resources/css/main.css create mode 100644 src/main/resources/images/johncena.png create mode 100644 src/main/resources/images/nerdglasses.png create mode 100644 src/main/resources/view/DialogBox.fxml create mode 100644 src/main/resources/view/MainWindow.fxml diff --git a/build.gradle b/build.gradle index aa70421e78..579f305bcf 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ test { } application { - mainClass.set("johncena.JohnCena") + mainClass.set("johncena.Launcher") } shadowJar { diff --git a/data/CenaTaskList.txt b/data/CenaTaskList.txt index c2b045f8c8..ddc9d5bc80 100644 --- a/data/CenaTaskList.txt +++ b/data/CenaTaskList.txt @@ -1,5 +1,5 @@ T | 0 | read book -T | 0 | dance +T | 1 | dance T | 1 | swim -T | 0 | study -D | 1 | study | 2024-09-20 2359 +D | 0 | study | 2024-09-20 2359 +D | 0 | flight | 2024-09-20 2350 diff --git a/src/main/java/johncena/JohnCena.java b/src/main/java/johncena/JohnCena.java index 5522bf1a4b..673d64f133 100644 --- a/src/main/java/johncena/JohnCena.java +++ b/src/main/java/johncena/JohnCena.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Scanner; +import johncena.commands.Command; import johncena.commands.HelloCommand; import johncena.exceptions.CenaException; import johncena.parser.InputHandler; @@ -21,43 +22,70 @@ public class JohnCena { private static ArrayList tasks = new ArrayList<>(); private static InputHandler inputHandler; - /** - * The main entry point of the John Cena program. - * - * @param args the command-line arguments + * Initializes the John Cena program. */ - public static void main(String[] args) { - + public JohnCena() { tasks = Storage.loadTasks(); inputHandler = new InputHandler(tasks); - - Scanner scanner; - if (args.length > 0) { - try { - scanner = new Scanner(new File(args[0])); - } catch (FileNotFoundException e) { - System.out.println("File not found"); - return; - } - } else { - scanner = new Scanner(System.in); - } HelloCommand helloCommand = new HelloCommand(); helloCommand.execute(); + } - while (scanner.hasNextLine()) { - String input = scanner.nextLine(); - try { - inputHandler.handleInput(input); - } catch (CenaException e) { - System.out.println("____________________________________________________________"); - System.out.println(" OOPS!!! " + e.getMessage()); - System.out.println("____________________________________________________________"); - } - } - scanner.close(); +// +// /** +// * The main entry point of the John Cena program. +// * +// * @param args the command-line arguments +// */ +// public static void main(String[] args) { +// +// tasks = Storage.loadTasks(); +// inputHandler = new InputHandler(tasks); +// +// Scanner scanner; +// if (args.length > 0) { +// try { +// scanner = new Scanner(new File(args[0])); +// } catch (FileNotFoundException e) { +// System.out.println("File not found"); +// return; +// } +// } else { +// scanner = new Scanner(System.in); +// } +// HelloCommand helloCommand = new HelloCommand(); +// helloCommand.execute(); +// +// while (scanner.hasNextLine()) { +// String input = scanner.nextLine(); +// try { +// inputHandler.handleInput(input); +// } catch (CenaException e) { +// System.out.println("____________________________________________________________"); +// System.out.println(" OOPS!!! " + e.getMessage()); +// System.out.println("____________________________________________________________"); +// } +// } +// +// scanner.close(); +// } + + /** + * Generates a response for the user's chat message. + * + * @param input the user input + * @return the response + */ + public String getResponse(String input) { + try { + Command command = inputHandler.handleInput(input); + return command.execute(); + //return "Command executed successfully."; + } catch (CenaException e) { + return "OOPS!!! " + e.getMessage(); + } } } diff --git a/src/main/java/johncena/Launcher.java b/src/main/java/johncena/Launcher.java new file mode 100644 index 0000000000..d4dcd1ebc0 --- /dev/null +++ b/src/main/java/johncena/Launcher.java @@ -0,0 +1,14 @@ +package johncena; + + +import javafx.application.Application; +import johncena.gui.Main; + +/** + * A launcher class to workaround classpath issues. + */ +public class Launcher { + public static void main(String[] args) { + Application.launch(Main.class, args); + } +} diff --git a/src/main/java/johncena/commands/ByeCommand.java b/src/main/java/johncena/commands/ByeCommand.java index 3a59676408..a1cdad134b 100644 --- a/src/main/java/johncena/commands/ByeCommand.java +++ b/src/main/java/johncena/commands/ByeCommand.java @@ -16,13 +16,22 @@ public class ByeCommand implements Command { * then exits the application. */ @Override - public void execute() { - System.out.println("____________________________________________________________"); - System.out.println(" Bye. Hope to see you again soon!"); - System.out.println("This was"); - System.out.println(Logo.getLogo()); - System.out.println("signing off!"); - System.out.println("____________________________________________________________"); + public String execute() { + StringBuilder sb = new StringBuilder(); + sb.append("____________________________________________________________\n"); + sb.append(" Bye. Hope to see you again soon!\n"); + sb.append("This was\n"); + sb.append(Logo.getLogo()).append("\n"); + sb.append("signing off!\n"); + sb.append("____________________________________________________________\n"); System.exit(0); + return sb.toString(); +// System.out.println("____________________________________________________________"); +// System.out.println(" Bye. Hope to see you again soon!"); +// System.out.println("This was"); +// System.out.println(Logo.getLogo()); +// System.out.println("signing off!"); +// System.out.println("____________________________________________________________"); +// System.exit(0); } } diff --git a/src/main/java/johncena/commands/Command.java b/src/main/java/johncena/commands/Command.java index 1ff65afc52..ddffffd905 100644 --- a/src/main/java/johncena/commands/Command.java +++ b/src/main/java/johncena/commands/Command.java @@ -14,5 +14,5 @@ public interface Command { * * @throws CenaException if an error occurs during the execution of the command */ - void execute() throws CenaException; + String execute() throws CenaException; } diff --git a/src/main/java/johncena/commands/DeadlineCommand.java b/src/main/java/johncena/commands/DeadlineCommand.java index 4e51966621..7afc067455 100644 --- a/src/main/java/johncena/commands/DeadlineCommand.java +++ b/src/main/java/johncena/commands/DeadlineCommand.java @@ -36,18 +36,26 @@ public DeadlineCommand(ArrayList tasks, String description, String by) { * @throws CenaInvalidDeadlineException if the description for the deadline is incorrect */ @Override - public void execute() throws CenaInvalidDeadlineException { + public String execute() throws CenaInvalidDeadlineException { if (description.isEmpty() || by.isEmpty()) { throw new CenaInvalidDeadlineException("Incorrect description for deadline. It should contain only /by."); } Task task = new Deadline(description, by); tasks.add(task); Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); + + StringBuilder sb = new StringBuilder(); + sb.append("____________________________________________________________\n"); + sb.append(" Got it. I've added this task:\n"); + sb.append(" ").append(task).append("\n"); + sb.append(" Now you have ").append(tasks.size()).append(" tasks in the list.\n"); + sb.append("____________________________________________________________\n"); +// System.out.println("____________________________________________________________"); +// System.out.println(" Got it. I've added this task:"); +// System.out.println(" " + task); +// System.out.println(" Now you have " + tasks.size() + " tasks in the list."); +// System.out.println("____________________________________________________________"); + return sb.toString(); } } diff --git a/src/main/java/johncena/commands/DeleteCommand.java b/src/main/java/johncena/commands/DeleteCommand.java index e34e3a39f6..a0b5870883 100644 --- a/src/main/java/johncena/commands/DeleteCommand.java +++ b/src/main/java/johncena/commands/DeleteCommand.java @@ -33,17 +33,26 @@ public DeleteCommand(ArrayList tasks, int taskIndex) { * @throws CenaInvalidTaskIndexException if the task index is invalid */ @Override - public void execute() throws CenaInvalidTaskIndexException { + public String execute() throws CenaInvalidTaskIndexException { if (taskIndex < 0 || taskIndex >= tasks.size()) { throw new CenaInvalidTaskIndexException("The task index is invalid."); } Task removedTask = tasks.remove(taskIndex); Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Noted. I've removed this task:"); - System.out.println(" " + removedTask); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); + + StringBuilder sb = new StringBuilder(); + sb.append("____________________________________________________________\n"); + sb.append(" Noted. I've removed this task:\n"); + sb.append(" ").append(removedTask).append("\n"); + sb.append(" Now you have ").append(tasks.size()).append(" tasks in the list.\n"); + sb.append("____________________________________________________________\n"); + + return sb.toString(); +// System.out.println("____________________________________________________________"); +// System.out.println(" Noted. I've removed this task:"); +// System.out.println(" " + removedTask); +// System.out.println(" Now you have " + tasks.size() + " tasks in the list."); +// System.out.println("____________________________________________________________"); } } diff --git a/src/main/java/johncena/commands/EventCommand.java b/src/main/java/johncena/commands/EventCommand.java index 99e733c6ea..174e67f559 100644 --- a/src/main/java/johncena/commands/EventCommand.java +++ b/src/main/java/johncena/commands/EventCommand.java @@ -39,18 +39,27 @@ public EventCommand(ArrayList tasks, String description, String from, Stri * @throws CenaInvalidEventException if the description for the event is incorrect */ @Override - public void execute() throws CenaInvalidEventException { + public String execute() throws CenaInvalidEventException { if (description.isEmpty() || from.isEmpty() || to.isEmpty()) { throw new CenaInvalidEventException("Incorrect description for event. It should contain /from and /to."); } Task task = new Event(description, from, to); tasks.add(task); Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); + + StringBuilder sb = new StringBuilder(); + //sb.append("____________________________________________________________\n"); + sb.append(" Got it. I've added this task:\n"); + sb.append(" ").append(task).append("\n"); + sb.append(" Now you have ").append(tasks.size()).append(" tasks in the list.\n"); + //sb.append("____________________________________________________________\n"); + + return sb.toString(); +// System.out.println("____________________________________________________________"); +// System.out.println(" Got it. I've added this task:"); +// System.out.println(" " + task); +// System.out.println(" Now you have " + tasks.size() + " tasks in the list."); +// System.out.println("____________________________________________________________"); } } diff --git a/src/main/java/johncena/commands/FindCommand.java b/src/main/java/johncena/commands/FindCommand.java index 8c05921b9c..2eedcdb28c 100644 --- a/src/main/java/johncena/commands/FindCommand.java +++ b/src/main/java/johncena/commands/FindCommand.java @@ -30,16 +30,18 @@ public FindCommand(ArrayList tasks, String keyword) { * in their description and prints the matching tasks. */ @Override - public void execute() { - System.out.println("____________________________________________________________"); - System.out.println(" Here are the matching tasks in your list:"); + public String execute() { + StringBuilder sb = new StringBuilder(); + //sb.append("____________________________________________________________\n"); + sb.append(" Here are the matching tasks in your list:\n"); int index = 1; for (Task task : tasks) { if (task.getDescription().contains(keyword)) { - System.out.println(" " + index + "." + task); + sb.append(" ").append(index).append(".").append(task).append("\n"); } index++; } - System.out.println("____________________________________________________________"); + //sb.append("____________________________________________________________\n"); + return sb.toString(); } } diff --git a/src/main/java/johncena/commands/HelloCommand.java b/src/main/java/johncena/commands/HelloCommand.java index 535ae35207..a0ba704dc0 100644 --- a/src/main/java/johncena/commands/HelloCommand.java +++ b/src/main/java/johncena/commands/HelloCommand.java @@ -14,10 +14,17 @@ public class HelloCommand implements Command { * Executes the "hello" command. Prints a welcome message and the ASCII art logo. */ @Override - public void execute() { - System.out.println("____________________________________________________________"); - System.out.println("Hello from\n" + Logo.getLogo()); - System.out.println(" What can I do for you?"); - System.out.println("____________________________________________________________"); + public String execute() { + StringBuilder sb = new StringBuilder(); + //sb.append("____________________________________________________________\n"); + sb.append("Hello from\n").append(Logo.getLogo()).append("\n"); + sb.append(" What can I do for you?\n"); + //sb.append("____________________________________________________________\n"); + return sb.toString(); + +// System.out.println("____________________________________________________________"); +// System.out.println("Hello from\n" + Logo.getLogo()); +// System.out.println(" What can I do for you?"); +// System.out.println("____________________________________________________________"); } } diff --git a/src/main/java/johncena/commands/HelpCommand.java b/src/main/java/johncena/commands/HelpCommand.java index 0e79713b09..af6f311d45 100644 --- a/src/main/java/johncena/commands/HelpCommand.java +++ b/src/main/java/johncena/commands/HelpCommand.java @@ -12,20 +12,37 @@ public class HelpCommand implements Command { * Executes the "help" command. Displays the list of commands that the user can use. */ @Override - public void execute() { - System.out.println("____________________________________________________________"); - System.out.println("Here are the commands you can use:"); - System.out.println(" bye - Exits the program"); - System.out.println(" list - Lists all tasks"); - System.out.println(" mark [task number] - Marks a task as done"); - System.out.println(" unmark [task number] - Marks a task as not done"); - System.out.println(" delete [task number] - Deletes a task"); - System.out.println(" todo [description] - Adds a todo task"); - System.out.println(" deadline [description] /by [due date] - Adds a deadline task"); - System.out.println(" event [description] /from [start date] /to [end date] - Adds an event task"); - System.out.println(" on [date] - Lists all tasks on a specific date"); - System.out.println(" hello - Displays the welcome message"); - System.out.println(" help - Displays the list of commands"); - System.out.println("____________________________________________________________"); + public String execute() { + StringBuilder sb = new StringBuilder(); + //sb.append("____________________________________________________________\n"); + sb.append("Here are the commands you can use:\n"); + sb.append(" bye - Exits the program\n"); + sb.append(" list - Lists all tasks\n"); + sb.append(" mark [task number] - Marks a task as done\n"); + sb.append(" unmark [task number] - Marks a task as not done\n"); + sb.append(" delete [task number] - Deletes a task\n"); + sb.append(" todo [description] - Adds a todo task\n"); + sb.append(" deadline [description] /by [due date] - Adds a deadline task\n"); + sb.append(" event [description] /from [start date] /to [end date] - Adds an event task\n"); + sb.append(" on [date] - Lists all tasks on a specific date\n"); + sb.append(" hello - Displays the welcome message\n"); + sb.append(" help - Displays the list of commands\n"); + //sb.append("____________________________________________________________\n"); + return sb.toString(); + +// System.out.println("____________________________________________________________"); +// System.out.println("Here are the commands you can use:"); +// System.out.println(" bye - Exits the program"); +// System.out.println(" list - Lists all tasks"); +// System.out.println(" mark [task number] - Marks a task as done"); +// System.out.println(" unmark [task number] - Marks a task as not done"); +// System.out.println(" delete [task number] - Deletes a task"); +// System.out.println(" todo [description] - Adds a todo task"); +// System.out.println(" deadline [description] /by [due date] - Adds a deadline task"); +// System.out.println(" event [description] /from [start date] /to [end date] - Adds an event task"); +// System.out.println(" on [date] - Lists all tasks on a specific date"); +// System.out.println(" hello - Displays the welcome message"); +// System.out.println(" help - Displays the list of commands"); +// System.out.println("____________________________________________________________"); } } diff --git a/src/main/java/johncena/commands/ListCommand.java b/src/main/java/johncena/commands/ListCommand.java index feff170ea1..dfdeaa9d20 100644 --- a/src/main/java/johncena/commands/ListCommand.java +++ b/src/main/java/johncena/commands/ListCommand.java @@ -24,12 +24,23 @@ public ListCommand(ArrayList tasks) { * Executes the "list" command. Lists all tasks in the task list. */ @Override - public void execute() { - System.out.println("____________________________________________________________"); - System.out.println(" Here are the tasks in your list:"); + public String execute() { + + StringBuilder sb = new StringBuilder(); + //sb.append("____________________________________________________________\n"); + sb.append(" Here are the tasks in your list:\n"); for (int i = 0; i < tasks.size(); i++) { - System.out.println(" " + (i + 1) + "." + tasks.get(i)); + sb.append(" ").append(i + 1).append(".").append(tasks.get(i)).append("\n"); } - System.out.println("____________________________________________________________"); + //sb.append("____________________________________________________________\n"); + return sb.toString(); +// +// System.out.println("____________________________________________________________"); +// System.out.println(" Here are the tasks in your list:"); +// for (int i = 0; i < tasks.size(); i++) { +// System.out.println(" " + (i + 1) + "." + tasks.get(i)); +// } +// System.out.println("____________________________________________________________"); +// } } diff --git a/src/main/java/johncena/commands/MarkCommand.java b/src/main/java/johncena/commands/MarkCommand.java index ee8dd42a98..450e1b00f4 100644 --- a/src/main/java/johncena/commands/MarkCommand.java +++ b/src/main/java/johncena/commands/MarkCommand.java @@ -31,15 +31,25 @@ public MarkCommand(ArrayList tasks, int taskIndex) { * @throws CenaInvalidTaskIndexException if the task index is invalid */ @Override - public void execute() throws CenaInvalidTaskIndexException { + public String execute() throws CenaInvalidTaskIndexException { if (taskIndex < 0 || taskIndex >= tasks.size()) { throw new CenaInvalidTaskIndexException("The task index is invalid."); } tasks.get(taskIndex).markAsDone(); Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Nice! I've marked this task as done:"); - System.out.println(" " + tasks.get(taskIndex)); - System.out.println("____________________________________________________________"); + + StringBuilder sb = new StringBuilder(); + //sb.append("____________________________________________________________\n"); + sb.append(" Nice! I've marked this task as done:\n"); + sb.append(" ").append(tasks.get(taskIndex)).append("\n"); + //sb.append("____________________________________________________________\n"); + + return sb.toString(); + +// System.out.println("____________________________________________________________"); +// System.out.println(" Nice! I've marked this task as done:"); +// System.out.println(" " + tasks.get(taskIndex)); +// System.out.println("____________________________________________________________"); +// } } diff --git a/src/main/java/johncena/commands/OnCommand.java b/src/main/java/johncena/commands/OnCommand.java index acb4528d6a..0f2e5d58c7 100644 --- a/src/main/java/johncena/commands/OnCommand.java +++ b/src/main/java/johncena/commands/OnCommand.java @@ -32,17 +32,30 @@ public OnCommand(ArrayList tasks, String date) throws DateTimeParseExcepti * Executes the "on" command. Lists all tasks on the specified date. */ @Override - public void execute() { - System.out.println("____________________________________________________________"); - System.out.println(" Here are the tasks on " + targetDate.format(DateTimeFormatter.ofPattern("MMM d yyyy")) - + ":"); + public String execute() { + + StringBuilder sb = new StringBuilder(); + //sb.append("____________________________________________________________\n"); + sb.append(" Here are the tasks on ").append(targetDate.format(DateTimeFormatter.ofPattern("MMM d yyyy"))).append(":\n"); for (int i = 0; i < tasks.size(); i++) { Task task = tasks.get(i); if (task.occursOn(targetDate)) { - System.out.println(" " + (i + 1) + "." + task); + sb.append(" ").append(i + 1).append(".").append(task).append("\n"); } } - System.out.println("____________________________________________________________"); + //sb.append("____________________________________________________________\n"); + return sb.toString(); + +// System.out.println("____________________________________________________________"); +// System.out.println(" Here are the tasks on " + targetDate.format(DateTimeFormatter.ofPattern("MMM d yyyy")) +// + ":"); +// for (int i = 0; i < tasks.size(); i++) { +// Task task = tasks.get(i); +// if (task.occursOn(targetDate)) { +// System.out.println(" " + (i + 1) + "." + task); +// } +// } +// System.out.println("____________________________________________________________"); } } diff --git a/src/main/java/johncena/commands/TodoCommand.java b/src/main/java/johncena/commands/TodoCommand.java index aa91a7c4bc..97781a66e1 100644 --- a/src/main/java/johncena/commands/TodoCommand.java +++ b/src/main/java/johncena/commands/TodoCommand.java @@ -35,7 +35,7 @@ public TodoCommand(ArrayList tasks, String description) { * @throws CenaInvalidTodoException if the description of the todo is invalid */ @Override - public void execute() throws CenaEmptyDescriptionException, CenaInvalidTodoException { + public String execute() throws CenaEmptyDescriptionException, CenaInvalidTodoException { if (description.isEmpty()) { throw new CenaEmptyDescriptionException("The description of a todo cannot be empty."); } @@ -45,11 +45,22 @@ public void execute() throws CenaEmptyDescriptionException, CenaInvalidTodoExcep Task task = new Todo(description); tasks.add(task); Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" Got it. I've added this task:"); - System.out.println(" " + task); - System.out.println(" Now you have " + tasks.size() + " tasks in the list."); - System.out.println("____________________________________________________________"); + + StringBuilder sb = new StringBuilder(); + //sb.append("____________________________________________________________\n"); + sb.append(" Got it. I've added this task:\n"); + sb.append(" ").append(task).append("\n"); + sb.append(" Now you have ").append(tasks.size()).append(" tasks in the list.\n"); + //sb.append("____________________________________________________________\n"); + + return sb.toString(); + +// System.out.println("____________________________________________________________"); +// System.out.println(" Got it. I've added this task:"); +// System.out.println(" " + task); +// System.out.println(" Now you have " + tasks.size() + " tasks in the list."); +// System.out.println("____________________________________________________________"); +// } } diff --git a/src/main/java/johncena/commands/UnmarkCommand.java b/src/main/java/johncena/commands/UnmarkCommand.java index 3e363a8775..72b7751b25 100644 --- a/src/main/java/johncena/commands/UnmarkCommand.java +++ b/src/main/java/johncena/commands/UnmarkCommand.java @@ -31,16 +31,26 @@ public UnmarkCommand(ArrayList tasks, int taskIndex) { * @throws CenaInvalidTaskIndexException if the task index is invalid */ @Override - public void execute() throws CenaInvalidTaskIndexException { + public String execute() throws CenaInvalidTaskIndexException { if (taskIndex < 0 || taskIndex >= tasks.size()) { throw new CenaInvalidTaskIndexException("The task index is invalid."); } tasks.get(taskIndex).markAsNotDone(); Storage.saveTasks(tasks); - System.out.println("____________________________________________________________"); - System.out.println(" OK, I've marked this task as not done yet:"); - System.out.println(" " + tasks.get(taskIndex)); - System.out.println("____________________________________________________________"); + + StringBuilder sb = new StringBuilder(); + //sb.append("____________________________________________________________\n"); + sb.append(" OK, I've marked this task as not done yet:\n"); + sb.append(" ").append(tasks.get(taskIndex)).append("\n"); + //sb.append("____________________________________________________________\n"); + + return sb.toString(); + +// System.out.println("____________________________________________________________"); +// System.out.println(" OK, I've marked this task as not done yet:"); +// System.out.println(" " + tasks.get(taskIndex)); +// System.out.println("____________________________________________________________"); +// } } diff --git a/src/main/java/johncena/gui/DialogBox.java b/src/main/java/johncena/gui/DialogBox.java new file mode 100644 index 0000000000..45d3b23476 --- /dev/null +++ b/src/main/java/johncena/gui/DialogBox.java @@ -0,0 +1,60 @@ +package johncena.gui; + +import java.io.IOException; +import java.util.Collections; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; + +/** + * Represents a dialog box consisting of an ImageView to represent the speaker's face + * and a label containing text from the speaker. + */ +public class DialogBox extends HBox { + @FXML + private Label dialog; + @FXML + private ImageView displayPicture; + + private DialogBox(String text, Image img) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(MainWindow.class.getResource("/view/DialogBox.fxml")); + fxmlLoader.setController(this); + fxmlLoader.setRoot(this); + fxmlLoader.load(); + } catch (IOException e) { + e.printStackTrace(); + } + + dialog.setText(text); + displayPicture.setImage(img); + } + + /** + * Flips the dialog box such that the ImageView is on the left and text on the right. + */ + private void flip() { + ObservableList tmp = FXCollections.observableArrayList(this.getChildren()); + Collections.reverse(tmp); + getChildren().setAll(tmp); + setAlignment(Pos.TOP_LEFT); + } + + public static DialogBox getUserDialog(String text, Image img) { + return new DialogBox(text, img); + } + + public static DialogBox getJohnCenaDialog(String text, Image img) { + var db = new DialogBox(text, img); + db.flip(); + return db; + } +} diff --git a/src/main/java/johncena/gui/Main.java b/src/main/java/johncena/gui/Main.java new file mode 100644 index 0000000000..e56b007959 --- /dev/null +++ b/src/main/java/johncena/gui/Main.java @@ -0,0 +1,32 @@ +package johncena.gui; + +import java.io.IOException; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Scene; +import javafx.scene.layout.AnchorPane; +import javafx.stage.Stage; +import johncena.JohnCena; + +/** + * A GUI for Duke using FXML. + */ +public class Main extends Application { + + private JohnCena johnCena = new JohnCena(); + + @Override + public void start(Stage stage) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("/view/MainWindow.fxml")); + AnchorPane ap = fxmlLoader.load(); + Scene scene = new Scene(ap); + stage.setScene(scene); + fxmlLoader.getController().setJohnCena(johnCena); // inject the JohnCena instance + stage.show(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/johncena/gui/MainWindow.java b/src/main/java/johncena/gui/MainWindow.java new file mode 100644 index 0000000000..6da4dce038 --- /dev/null +++ b/src/main/java/johncena/gui/MainWindow.java @@ -0,0 +1,54 @@ +package johncena.gui; + +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.VBox; +import johncena.JohnCena; + +/** + * Controller for the main GUI. + */ +public class MainWindow extends AnchorPane { + @FXML + private ScrollPane scrollPane; + @FXML + private VBox dialogContainer; + @FXML + private TextField userInput; + @FXML + private Button sendButton; + + private JohnCena johnCena; + + private Image userImage = new Image(this.getClass().getResourceAsStream("/images/nerdglasses.png")); + private Image dukeImage = new Image(this.getClass().getResourceAsStream("/images/johncena.png")); + + @FXML + public void initialize() { + scrollPane.vvalueProperty().bind(dialogContainer.heightProperty()); + } + + /** Injects the JohnCena instance */ + public void setJohnCena(JohnCena johncena) { + johnCena = johncena; + } + + /** + * 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. + */ + @FXML + private void handleUserInput() { + String input = userInput.getText(); + String response = johnCena.getResponse(input); + dialogContainer.getChildren().addAll( + DialogBox.getUserDialog(input, userImage), + DialogBox.getJohnCenaDialog(response, dukeImage) + ); + userInput.clear(); + } +} diff --git a/src/main/java/johncena/parser/InputHandler.java b/src/main/java/johncena/parser/InputHandler.java index 6850b7a831..301d226816 100644 --- a/src/main/java/johncena/parser/InputHandler.java +++ b/src/main/java/johncena/parser/InputHandler.java @@ -46,7 +46,7 @@ public InputHandler(ArrayList tasks) { * @param input the user input * @throws CenaException if an exception occurs while executing the command */ - public void handleInput(String input) throws CenaException { + public Command handleInput(String input) throws CenaException { Command command = null; try { @@ -96,19 +96,20 @@ public void handleInput(String input) throws CenaException { throw new CenaUnknownCommandException("I'm sorry, but I don't know what that means :-("); } - if (command != null) { - command.execute(); - } +// } catch (CenaInvalidTaskIndexException | CenaInvalidDeadlineException | CenaInvalidEventException +// | DateTimeParseException e) { +// System.out.println("____________________________________________________________"); +// System.out.println(" OOPS!!! " + e.getMessage()); +// System.out.println("____________________________________________________________"); - } catch (CenaInvalidTaskIndexException | CenaInvalidDeadlineException | CenaInvalidEventException - | DateTimeParseException e) { - System.out.println("____________________________________________________________"); - System.out.println(" OOPS!!! " + e.getMessage()); - System.out.println("____________________________________________________________"); } catch (NumberFormatException e) { - System.out.println("____________________________________________________________"); - System.out.println(" OOPS!!! Task number must be a valid integer."); - System.out.println("____________________________________________________________"); + // System.out.println("____________________________________________________________"); + // System.out.println(" OOPS!!! Task number must be a valid integer."); + // System.out.println("____________________________________________________________"); + throw new CenaInvalidTaskIndexException("Task number must be a valid integer."); } + + return command; } } + diff --git a/src/main/resources/css/dialog-box.css b/src/main/resources/css/dialog-box.css new file mode 100644 index 0000000000..1486fa7899 --- /dev/null +++ b/src/main/resources/css/dialog-box.css @@ -0,0 +1,40 @@ +.label { + background:white; + -fx-background-color: background; + -fx-border-color: #d55e00 #009e73 #cc79a7 #0072b2; + -fx-border-width: 2px; + -fx-background-radius: 1em 1em 0 1em; + -fx-border-radius: 1em 1em 0 1em; + -fx-text-fill: ladder(background, white 49%, black 50%); +} + + +.reply-label { + -fx-background-radius: 1em 1em 1em 0; + -fx-border-radius: 1em 1em 1em 0; +} + +#displayPicture { + /* Shadow effect on image. */ + -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.2), 10, 0.5, 5, 5); + + /* Change size of image. */ + -fx-scale-x: 1; + -fx-scale-y: 1; + + /* Rotate image clockwise by degrees. */ + -fx-rotate: 0; +} + +/* Paste this below reply-label */ +.add-label { + -fx-background-color: yellow; +} + +.marked-label { + -fx-background-color: palegreen; +} + +.delete-label { + -fx-background-color: lightpink; +} \ No newline at end of file diff --git a/src/main/resources/css/main.css b/src/main/resources/css/main.css new file mode 100644 index 0000000000..dd1145f7e7 --- /dev/null +++ b/src/main/resources/css/main.css @@ -0,0 +1,47 @@ +.root { + main-color: rgb(237, 255, 242); /* Create a looked-up color called "main-color" within root. */ + -fx-background-color: main-color; +} + +.text-field { + -fx-background-color: #d9ffe2; + -fx-font: 20px "Arial"; +} + +.button { + -fx-background-color: mediumspringgreen; + -fx-font: italic bold 16px "Arial"; +} + +.button:hover { + -fx-background-color:cyan; + -fx-font-size: 18px; +} + +.button:pressed { + -fx-background-color:orange; + -fx-font-size: 20px; +} + +.scroll-pane, +.scroll-pane .viewport { + -fx-background-color: transparent; +} + +.scroll-bar { + -fx-font-size: 10px; /* Change width of scroll bar. */ + -fx-background-color: main-color; +} + +.scroll-bar .thumb { + -fx-background-color: #ff9cb4; + -fx-background-radius: 1em; +} + +/* Hides the increment and decrement buttons. */ +.scroll-bar .increment-button, +.scroll-bar .decrement-button { + -fx-pref-height: 0; + -fx-opacity: 0; +} + diff --git a/src/main/resources/images/johncena.png b/src/main/resources/images/johncena.png new file mode 100644 index 0000000000000000000000000000000000000000..0d163ed455cffa83f6c1e2f29ea722fecafb1a70 GIT binary patch literal 284653 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�xobEp%rNAT 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 Dw;cI! literal 0 HcmV?d00001 diff --git a/src/main/resources/images/nerdglasses.png b/src/main/resources/images/nerdglasses.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3f19e951d5fc9e4eff356bdb7e1a392cd4f803 GIT binary patch literal 144837 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 + + + + + + + + + + + + + diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml new file mode 100644 index 0000000000..a2bc58c7e2 --- /dev/null +++ b/src/main/resources/view/MainWindow.fxml @@ -0,0 +1,44 @@ + + + + + + + + + + + +