Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
68c58c1
Add Gradle support
May 24, 2020
03523ec
Bump gradle and lib version
Eclipse-Dominator Aug 5, 2023
81a9c53
build.gradle: Prevent generating a second JAR file
aureliony Jul 16, 2024
76366f1
Level-0
ary-ban Sep 5, 2025
64cf049
Level-1
ary-ban Sep 5, 2025
df1ccde
Level-2
ary-ban Sep 5, 2025
fa6d3c9
Level-3
ary-ban Sep 5, 2025
7f577cb
Level-4
ary-ban Sep 5, 2025
6b92bbd
A-TextUiTesting
ary-ban Sep 5, 2025
a20d5af
Level-5
ary-ban Sep 5, 2025
73f0d24
Level-6
ary-ban Sep 5, 2025
99fd833
Level-7
ary-ban Sep 7, 2025
fa102bf
Merge branch 'branch-Level-7': Level-7 Save
ary-ban Sep 7, 2025
ff20a04
Level-8
ary-ban Sep 7, 2025
4ed4613
Merge branch 'branch-Level-8': Level-8 Dates/Times
ary-ban Sep 7, 2025
36f93c7
A-MoreOOP
ary-ban Sep 7, 2025
4425c09
Merge branch 'A-MoreOOP'
ary-ban Sep 7, 2025
a9934f9
A-Packages
ary-ban Sep 8, 2025
1145bfb
Merge branch 'A-Packages'
ary-ban Sep 8, 2025
1baaf32
Merge upstream add-gradle-support (A-Gradle base): resolve runtest.sh…
ary-ban Sep 23, 2025
c7f1cbf
A-Gradle: integrate upstream Gradle support
ary-ban Sep 23, 2025
2e5310d
Merge branch 'A-Gradle': Gradle support
ary-ban Sep 23, 2025
bf74b9b
A-JUnit: add unit tests for Parser and TaskList
ary-ban Sep 24, 2025
5e17000
Merge branch 'A-JUnit': add JUnit tests
ary-ban Sep 24, 2025
2ef2ea0
A-Jar: runnable JAR
ary-ban Sep 24, 2025
45f6746
Merge branch 'A-Jar'
ary-ban Sep 24, 2025
cbf34b5
A-JavaDoc: add concise JavaDoc to public classes and methods
ary-ban Sep 24, 2025
448bdcd
Merge branch 'A-JavaDoc': API documentation
ary-ban Sep 24, 2025
0fea3e6
A-CodingStandard: style pass
ary-ban Sep 24, 2025
1007967
Merge branch 'A-CodingStandard': enforce coding standard
ary-ban Sep 24, 2025
7369324
Level-9: add 'find <keyword>' command
ary-ban Sep 24, 2025
08ccd4c
Merge branch 'Level-9': implement find
ary-ban Sep 24, 2025
6d6238f
Level-10: add JavaFX GUI
ary-ban Sep 25, 2025
3f4f0bd
Merge branch 'Level-10': GUI with JavaFX
ary-ban Sep 25, 2025
0d4f0d4
A-Assertions: Enable -ea and add defensive checks
ary-ban Sep 25, 2025
2e7496f
Merge branch 'A-Assertions': runtime assertions for core methods
ary-ban Sep 25, 2025
e60fff4
A-CodeQuality: Remove duplication in add messages
ary-ban Sep 25, 2025
c479a89
C-Help: Add 'help' command for usage summary
ary-ban Sep 25, 2025
77b1702
C-FriendlierSyntax: Add short aliases for commands
ary-ban Sep 25, 2025
7affd01
Merge branch 'C-FriendlierSyntax'
ary-ban Sep 25, 2025
b6f5f4f
A-AiAssisted: add AI usage notes
ary-ban Sep 25, 2025
68f007a
Merge branch 'A-AiAssisted': document AI usage
ary-ban Sep 25, 2025
ef25d1d
A-UserGuide: add Ui.png and brief user guide
ary-ban Sep 25, 2025
ee7aa42
Merge Branch 'A-UserGuide': docs site and guide
ary-ban Sep 25, 2025
25a6e2c
A-UserGuide: fix Ui.png link
ary-ban Sep 25, 2025
f7238fe
data file
ary-ban Sep 25, 2025
7fb198b
Merge branch 'A-UserGuide-FixUiPath': correct screenshot link
ary-ban Sep 25, 2025
63ce5df
A-FullCommitMessage: commit changes with full commit messages
ary-ban Sep 25, 2025
380012a
Merge branch 'A-FullCommitMessage'
ary-ban Sep 25, 2025
a5c1a94
Assertions: add short note in README about -ea
ary-ban Sep 25, 2025
262f838
Merge pull request #2 from ary-ban/A-Assertions-PR1
ary-ban Sep 25, 2025
3651d0f
A-CodeQuality: add brief note in README
ary-ban Sep 25, 2025
2c37e2d
Fix: force JavaFX software renderer on launch
ary-ban Oct 2, 2025
8bcefdf
UI: JavaFX tutorial baseline (FXML/CSS/dialog bubbles) + Docs: UG (GF…
ary-ban Oct 20, 2025
a1994ea
Merge branch 'release/final-fixes'
ary-ban Oct 20, 2025
eea47ab
Fix: Add alias 'h' for help in Parser
ary-ban Oct 22, 2025
b012022
Safety: Enforce non-null input in Parser methods
ary-ban Oct 22, 2025
10189ec
Robustness: Make Parser.parseIndex null-safe
ary-ban Oct 22, 2025
25ab4eb
Refactor: Extract containsIgnoreCase helper in TaskList
ary-ban Oct 22, 2025
35e572e
Safety: Guard against null message in Ui.showError
ary-ban Oct 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,7 @@ Prerequisites: JDK 17, update Intellij to the most recent version.
```

**Warning:** Keep the `src\main\java` folder as the root folder for Java files (i.e., don't rename those folders or move Java files to another folder outside of this folder path), as this is the default location some tools (e.g., Gradle) expect to find Java files.

**Dev note:** Assertions are enabled via -ea for run/tests.

**Note:** Reduced duplication in add messages.
70 changes: 70 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
plugins {
id 'application'
id 'com.github.johnrengelman.shadow' version '8.1.1'
id 'java'
id 'jacoco'
id 'org.openjfx.javafxplugin' version '0.0.14'
}

repositories {
mavenCentral()
}

java {
toolchain { languageVersion = JavaLanguageVersion.of(17) }
}

application {
mainClass = 'larry.gui.Launcher'
}

dependencies {
// Windows
implementation "org.openjfx:javafx-base:17.0.12:win"
implementation "org.openjfx:javafx-graphics:17.0.12:win"
implementation "org.openjfx:javafx-controls:17.0.12:win"
// macOS
implementation "org.openjfx:javafx-base:17.0.12:mac"
implementation "org.openjfx:javafx-graphics:17.0.12:mac"
implementation "org.openjfx:javafx-controls:17.0.12:mac"
// Linux
implementation "org.openjfx:javafx-base:17.0.12:linux"
implementation "org.openjfx:javafx-graphics:17.0.12:linux"
implementation "org.openjfx:javafx-controls:17.0.12:linux"

testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.2'
}

test {
useJUnitPlatform()
finalizedBy jacocoTestReport
}

jacoco {
toolVersion = '0.8.11'
}

jacocoTestReport {
dependsOn test
reports {
html.required = true
xml.required = true
csv.required = false
}
}

tasks.withType(JavaExec).configureEach {
jvmArgs += ['-Dprism.order=sw']
}

tasks.named('shadowJar') {
archiveFileName.set('larry.jar')
manifest { attributes 'Main-Class': application.mainClass.get() }
}

javafx {
version = '17.0.9' // or 17.0.11 / 22; keep it consistent with your Java 17
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
7 changes: 7 additions & 0 deletions data/larry.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
E|0|sync|2025-09-12 1400|2025-09-12 1600
T|0|read
T|0|read book
T|0|write essay
T|0|this
T|0|this and that
T|0|this and that today
11 changes: 11 additions & 0 deletions docs/AI.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# AI Assistance

**Tools used:** ChatGPT (reasoning, code review)

**Scope:** JavaFX wiring hints, command-alias parsing fix, and addition of Javadoc header comments. All code reviewed and tested locally.

**Details:**
- Received guidance on FXML/controller wiring, event handlers, resource paths, and basic CSS for the JavaFX UI.
- Got suggestions for parsing/aliasing commands and defensive checks.
- Used AI to draft and refine **Javadoc header comments** for public classes and methods (clarity, parameters, return values, and side-effects).
- Performed local verification of behavior and builds after applying changes.
130 changes: 116 additions & 14 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,132 @@
# Duke User Guide
# Larry

// Update the title above to match the actual product name
> “Your mind is for having ideas, not holding them.” — David Allen

// Product screenshot goes here
**Larry** is a simple, text-based task bot with a small JavaFX GUI. It lets you track **todos**, **deadlines**, and **events**, and saves them to disk so your list survives restarts.

// Product intro goes here
* Java 17
* Gradle build
* CLI **and** GUI
* Saves to `data/larry.txt`

## Adding deadlines
---

// Describe the action and its outcome.
## Screenshot

// Give examples of usage
![Larry GUI](./Ui.png)

Example: `keyword (optional arguments)`
---

// A description of the expected outcome goes here
## Quick Start

### GUI (recommended)

```bash
# from the repo root
./gradlew run
# Windows:
.\gradlew run
```
expected output

### JAR

1. Download the latest release JAR from the **Releases** page.
2. Double-click it **or** run:

```bash
java -jar larry.jar
```

---

## What Larry Can Do

* Add **todos**, **deadlines**, **events**
* List tasks
* Mark / unmark as done
* Delete tasks
* Find tasks by keyword
* Show help
* Exit safely (auto-saves)

> **Tip:** Type `help` any time to see a quick in-app summary.

---

## Date & Time Format (Important)

When entering dates/times for **deadlines** and **events**, Larry accepts:

* **Date only:** `yyyy-MM-dd`
*Example:* `2025-10-20`
* **Date & time:**
`yyyy-MM-dd HH:mm` (*Example:* `2025-10-20 18:30`)
`yyyy-MM-dd HHmm` (*Example:* `2025-10-20 1830`)

If parsing fails, Larry keeps your original text so you can fix it later.

---

## Commands

Type a command and press **Enter**.

| Action | Command & Format | Example |
| --------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| Show all tasks | `list` | `list` |
| Add a todo | `todo <description>` | `todo read CS2103T notes` |
| Add a deadline | `deadline <description> /by <yyyy-MM-dd[ HH:mm/HHmm]>` | `deadline iP submission /by 2025-10-20 18:00` |
| Add an event | `event <description> /from <yyyy-MM-dd[ HH:mm/HHmm]> /to <yyyy-MM-dd[ HH:mm/HHmm]>` | `event hackathon /from 2025-10-21 0900 /to 2025-10-21 1800` |
| Mark as done | `mark <index>` | `mark 2` |
| Unmark | `unmark <index>` | `unmark 2` |
| Delete | `delete <index>` | `delete 3` |
| Find by keyword | `find <keyword>` | `find cs2103t` |
| Help | `help` | `help` |
| Exit | `bye` | `bye` |

**Notes**

* Indexes are **1-based** (see `list` output).
* Descriptions can contain spaces.
* For **events**, `/from` should be earlier than or equal to `/to`.

---

## Examples

```text
todo buy milk
deadline project report /by 2025-10-20
deadline submission /by 2025-10-20 2359
event team meeting /from 2025-10-21 0900 /to 2025-10-21 1030
list
find report
mark 1
unmark 1
delete 2
bye
```

## Feature ABC
---

## Storage

* File: `data/larry.txt` (auto-created if missing)
* Changes save automatically when you modify tasks or exit.

---

## Troubleshooting

* **“Unknown command”** → Run `help` to see valid commands and formats.
* **Date rejected / looks wrong** → Re-enter using the formats above (e.g., `2025-10-20 1830`).
* **Nothing happens on Enter** → Click the input box and try again.
* **App doesn’t start** → Ensure **Java 17** is installed (`java -version`).

// Feature details
---

## Shortcuts & Tips

## Feature XYZ
* Use `list` to confirm indexes before `mark`, `unmark`, or `delete`.
* `find <keyword>` narrows results so you don’t mark/delete the wrong item.

// Feature details
Binary file added docs/Ui.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading