-
Notifications
You must be signed in to change notification settings - Fork 484
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ChangruHenryQian] iP #544
Open
ChangruHenryQian
wants to merge
59
commits into
nus-cs2103-AY2324S1:master
Choose a base branch
from
ChangruHenryQian:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 11 commits
Commits
Show all changes
59 commits
Select commit
Hold shift + click to select a range
28ad2b8
Add Gradle support
ed6d4d2
Bump gradle and lib version
Eclipse-Dominator 5080e17
Finish Level 0. Rename, Greet, Exit.
3d4a50f
Finish Level-1: Echo
fe29b0f
Finish Level 2. Add, List
02481a9
Finish Level 3. Mark as Done
91639a8
Finish Level 4. ToDos, Events, Deadlines
cab0141
Finish A-TextUiTesting
28266b3
Finish Level 5. Handle Errors
611f1ef
Finish Level 6. Delete
4197612
Finish Level 7. Save
c0ea8a2
Update data/duke.txt
bf86dc1
Merge branch 'branch-Level-7'
992ec01
Finish Level 8. Dates and Times
113e1d3
Merge branch 'branch-Level-8'
1f284c9
Finish A-MoreOOP: Use More OOP
92e988c
Fix bug on delete command
5c4a3ba
Finish A-Packages: Organize into Packages
d197fc2
Merge branch 'add-gradle-support'
e450bed
Finish A-Gradle: Use Gradle
2a0dedd
Finish A-JUnit: Add JUnit Tests
8ac5391
Finish A-Jar: Create a JAR File
dcc4829
Add part of Java Doc.
98baa49
Merge branch 'branch-A-JavaDoc'
cb8b5d6
Merge branch 'master' into branch-A-CodingStandard
a011a9e
Implement coding standard.
af45b36
Merge branch 'branch-A-CodingStandard'
b0af1ec
Update JavaDoc
1d67ccf
Merge branch 'branch-A-JavaDoc'
b47f650
Update JavaDoc
8e4c58e
Merge branch 'branch-A-JavaDoc'
c529dc9
Start Level 9. Find
b88d605
Merge branch 'master' into branch-Level-9
cfc25a9
Implement Level 9. Find
2a192a3
Merge branch 'branch-Level-9'
9ff4bbc
Start Level 10. GUI
76ab079
Implement Level 10. GUI
d1c94f8
Merge branch 'branch-Level-10'
3b3712a
Update build.gradle
b76decc
Implement A-Assertions
59658eb
Improve code quality
e20422e
Merge pull request #1 from ChangruHenryQian/branch-A-CodeQuality
ChangruHenryQian f1c1337
Merge branch 'master' into branch-A-Assertions
ed26f34
Merge pull request #2 from ChangruHenryQian/branch-A-Assertions
ChangruHenryQian a146f5a
Implement B-FixedDurationTasks
fe210a3
Add welcome message into GUI
b761c70
Add a representative screenshot
3f8b8db
Implement A-UserGuide: User Guide
9e2ec38
Update user guide
925e859
Implement CheckStyle
5c6a409
Add test cases
950bfdf
Update test cases
b02a0ee
Update test cases
bf0487d
Improve JavaDoc
bac1dfd
Update README.md
3600c25
Improve JavaDoc
fd641b2
Update user guide
c32f9db
Add test cases
5e157e9
Update JavaDoc
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
T | 1 | hihi | ||
T | 0 | hihihi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
public class Deadline extends Task { | ||
private String by; | ||
public Deadline(String description, String by) { | ||
super(description); | ||
this.by = by; | ||
} | ||
|
||
public Deadline(String description, boolean isDone, String by) { | ||
super(description, isDone); | ||
this.by = by; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "[D]" + super.toString() + " (by: " + this.by + ")"; | ||
} | ||
|
||
@Override | ||
public String toTxt() { | ||
return "D | " + super.toTxt() + " | " + this.by; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,172 @@ | ||
import java.util.ArrayList; | ||
import java.util.Scanner; | ||
|
||
import java.io.File; | ||
import java.io.FileNotFoundException; | ||
import java.io.FileWriter; | ||
import java.io.IOException; | ||
|
||
public class Duke { | ||
|
||
private Storage storage; | ||
private TaskList tasks; | ||
private Ui ui = new Ui(); | ||
private static final String filePath = "./data/duke.txt"; | ||
|
||
|
||
public static void main(String[] args) { | ||
String logo = " ____ _ \n" | ||
+ "| _ \\ _ _| | _____ \n" | ||
+ "| | | | | | | |/ / _ \\\n" | ||
+ "| |_| | |_| | < __/\n" | ||
+ "|____/ \\__,_|_|\\_\\___|\n"; | ||
System.out.println("Hello from\n" + logo); | ||
System.out.println("____________________________________________________________"); | ||
System.out.println(" Hello! I'm Jarvis"); | ||
System.out.println(" What can I do for you?"); | ||
System.out.println("____________________________________________________________"); | ||
|
||
|
||
ArrayList<Task> list; | ||
|
||
try { | ||
list = load(); | ||
} catch (IOException e) { | ||
throw new DukeException("Unable to find file with data."); | ||
} | ||
|
||
Scanner userInput = new Scanner(System.in); | ||
String command = userInput.nextLine(); | ||
while (!command.startsWith("bye")) { | ||
|
||
try{ | ||
if (command.startsWith("list")) { | ||
System.out.println("____________________________________________________________"); | ||
System.out.println(" Here are the tasks in your list:"); | ||
int counter = 0; | ||
while (counter != list.size()) { | ||
counter++; | ||
System.out.println(" " + counter + "." + list.get(counter - 1).toString()); | ||
} | ||
System.out.println("____________________________________________________________"); | ||
} else if (command.startsWith("mark")) { | ||
list.get(Integer.valueOf(command.split(" ")[1]) - 1).markAsDone(); | ||
System.out.println("____________________________________________________________"); | ||
System.out.println(" Nice! I've marked this task as done:"); | ||
System.out.println(" " + list.get(Integer.valueOf(command.split(" ")[1]) - 1).toString()); | ||
System.out.println("____________________________________________________________"); | ||
rewriteFile(list); | ||
} else if (command.startsWith("todo")) { | ||
if (command.split(" ", 2).length == 1) { | ||
throw new DukeException(" OOPS!!! The description of a todo cannot be empty."); | ||
} | ||
ToDo newToDo = new ToDo(command.split(" ", 2)[1]); | ||
list.add(newToDo); | ||
System.out.println("____________________________________________________________"); | ||
System.out.println(" Got it. I've added this task:"); | ||
System.out.println(" " + newToDo.toString()); | ||
System.out.println(" Now you have " + list.size() + " tasks in the list."); | ||
System.out.println("____________________________________________________________"); | ||
addToFile(list); | ||
} else if (command.startsWith("deadline")) { | ||
String deadline = command.split(" /by ", 2)[1]; | ||
String name = command.split(" /by ", 2)[0].split(" ", 2)[1]; | ||
Deadline newDeadline = new Deadline(deadline, name); | ||
list.add(newDeadline); | ||
System.out.println("____________________________________________________________"); | ||
System.out.println(" Got it. I've added this task:"); | ||
System.out.println(" " + newDeadline.toString()); | ||
System.out.println(" Now you have " + list.size() + " tasks in the list."); | ||
System.out.println("____________________________________________________________"); | ||
addToFile(list); | ||
} else if (command.startsWith("event")) { | ||
String startTime = command.split(" /from ", 2)[1] | ||
.split(" /to ", 2)[0]; | ||
String endTime = command.split(" /to ", 2)[1]; | ||
String name = command.split(" /from ", 2)[0].split(" ", 2)[1]; | ||
Event newEvent = new Event(name, startTime, endTime); | ||
list.add(newEvent); | ||
System.out.println("____________________________________________________________"); | ||
System.out.println(" Got it. I've added this task:"); | ||
System.out.println(" " + newEvent.toString()); | ||
System.out.println(" Now you have " + list.size() + " tasks in the list."); | ||
System.out.println("____________________________________________________________"); | ||
addToFile(list); | ||
} else if (command.startsWith("delete")) { | ||
Task re = list.remove(Integer.valueOf(command.split(" ")[1]) - 1); | ||
System.out.println("____________________________________________________________"); | ||
System.out.println(" Noted. I've removed this task:"); | ||
System.out.println(" " + re.toString()); | ||
System.out.println(" Now you have " + list.size() + " tasks in the list."); | ||
System.out.println("____________________________________________________________"); | ||
rewriteFile(list); | ||
} else { | ||
throw new DukeException(" OOPS!!! I'm sorry, but I don't know what that means :-("); | ||
} | ||
} catch (DukeException e) { | ||
System.out.println("____________________________________________________________"); | ||
System.out.println(" " + e.getMessage()); | ||
System.out.println("____________________________________________________________"); | ||
} finally { | ||
command = userInput.nextLine(); | ||
} | ||
} | ||
|
||
System.out.println("____________________________________________________________"); | ||
System.out.println(" Bye. Hope to see you again soon!"); | ||
System.out.println("____________________________________________________________"); | ||
} | ||
|
||
public static ArrayList<Task> load() throws IOException { | ||
File dir = new File("./data"); | ||
if (!dir.exists()) { | ||
dir.mkdir(); | ||
} | ||
File f = new File(filePath); | ||
f.createNewFile(); | ||
Scanner s = new Scanner(f); | ||
ArrayList<Task> tasks = new ArrayList<>(); | ||
while (s.hasNext()) { | ||
tasks.add(addTask(s.nextLine())); | ||
} | ||
return tasks; | ||
} | ||
|
||
private static Task addTask(String input) { | ||
String taskType = input.split(" \\| ")[0]; | ||
boolean isComplete = input.split(" \\| ")[1].equals("1"); | ||
String description = input.split(" \\| ")[2]; | ||
if (taskType.equals("T")) { | ||
return new ToDo(description, isComplete); | ||
} else if (taskType.equals("D")) { | ||
return new Deadline(description, isComplete, input.split(" \\| ")[3]); | ||
} else { | ||
return new Event(description, isComplete, input.split(" \\| ")[3], input.split(" \\| ")[4]); | ||
} | ||
} | ||
|
||
|
||
public static void addToFile(ArrayList<Task> list) throws DukeException { | ||
try { | ||
FileWriter fw = new FileWriter(filePath, true); | ||
if (list.size() == 1) { | ||
fw.write(list.get(0).toTxt()); | ||
} else { | ||
fw.write("\n" + list.get(list.size() - 1).toTxt()); | ||
} | ||
fw.close(); | ||
} catch (IOException e) { | ||
throw new DukeException("Unable to write to file."); | ||
} | ||
} | ||
|
||
public static void rewriteFile(ArrayList<Task> list) throws DukeException { | ||
try { | ||
FileWriter fw = new FileWriter(filePath); | ||
for (int i = 0; i < list.size(); i++) { | ||
if (i == list.size() - 1) { | ||
fw.write(list.get(i).toTxt()); | ||
} else { | ||
fw.write(list.get(i).toTxt() + "\n"); | ||
} | ||
} | ||
fw.close(); | ||
} catch (IOException e) { | ||
throw new DukeException("Unable to write to file."); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
public class DukeException extends RuntimeException{ | ||
public DukeException(String message) { | ||
super(message); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
public class Event extends Task{ | ||
private String startTime; | ||
private String endTime; | ||
public Event(String description, String startTime, String endTime) { | ||
super(description); | ||
this.startTime = startTime; | ||
this.endTime = endTime; | ||
} | ||
|
||
public Event(String description, boolean isDone, String startTime, String endTime) { | ||
super(description, isDone); | ||
this.startTime = startTime; | ||
this.endTime = endTime; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "[E]" + super.toString() + " (from: " + startTime + " to: " + endTime + ")"; | ||
} | ||
|
||
@Override | ||
public String toTxt() { | ||
return "E | " + super.toTxt() + " | " + this.startTime + " | " + this.endTime; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
public class Parser { | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
import java.io.File; | ||
import java.io.FileNotFoundException; | ||
import java.io.FileWriter; | ||
import java.io.IOException; | ||
import java.util.ArrayList; | ||
import java.util.Scanner; | ||
|
||
public class Storage { | ||
private String filePath; | ||
|
||
public Storage(String filePath) { | ||
this.filePath = filePath; | ||
} | ||
|
||
public ArrayList<Task> load() throws IOException { | ||
File dir = new File("./data"); | ||
if (!dir.exists()) { | ||
dir.mkdir(); | ||
} | ||
File f = new File(filePath); | ||
f.createNewFile(); | ||
Scanner s = new Scanner(f); | ||
ArrayList<Task> tasks = new ArrayList<>(); | ||
while (s.hasNext()) { | ||
tasks.add(addTask(s.nextLine())); | ||
} | ||
return tasks; | ||
} | ||
|
||
private Task addTask(String input) { | ||
String taskType = input.split(" \\| ")[0]; | ||
boolean isComplete = input.split(" \\| ")[1].equals("1"); | ||
String description = input.split(" \\| ")[2]; | ||
if (taskType.equals("T")) { | ||
return new ToDo(description, isComplete); | ||
} else if (taskType.equals("D")) { | ||
return new Deadline(description, isComplete, input.split(" \\| ")[3]); | ||
} else { | ||
return new Event(description, isComplete, input.split(" \\| ")[3], input.split(" \\| ")[4]); | ||
} | ||
} | ||
|
||
|
||
public void addToFile(ArrayList<Task> list) throws DukeException { | ||
try { | ||
FileWriter fw = new FileWriter(filePath, true); | ||
if (list.size() == 1) { | ||
fw.write(list.get(0).toTxt()); | ||
} else { | ||
fw.write("\n" + list.get(list.size() - 1).toTxt()); | ||
} | ||
fw.close(); | ||
} catch (IOException e) { | ||
throw new DukeException("Unable to write to file."); | ||
} | ||
} | ||
|
||
public void rewriteFile(ArrayList<Task> list) throws DukeException { | ||
try { | ||
FileWriter fw = new FileWriter(filePath); | ||
for (int i = 0; i < list.size(); i++) { | ||
if (i == list.size() - 1) { | ||
fw.write(list.get(i).toTxt()); | ||
} else { | ||
fw.write(list.get(i).toTxt() + "\n"); | ||
} | ||
} | ||
fw.close(); | ||
} catch (IOException e) { | ||
throw new DukeException("Unable to write to file."); | ||
} | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
public class Task { | ||
protected String description; | ||
protected boolean isDone; | ||
|
||
public Task(String description) { | ||
this.description = description; | ||
this.isDone = false; | ||
} | ||
|
||
public Task(String description, boolean isDone) { | ||
this.description = description; | ||
this.isDone = isDone; | ||
} | ||
|
||
public String getStatusIcon() { | ||
return (isDone ? "X" : " "); // mark done task with X | ||
} | ||
|
||
public void markAsDone() { | ||
this.isDone = true; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "[" + this.getStatusIcon() + "] " + this.description; | ||
} | ||
|
||
public String toTxt() { | ||
return (this.isDone ? "1" : "0") + " | " + this.description; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import java.util.ArrayList; | ||
|
||
public class TaskList { | ||
protected ArrayList<Task> tasks; | ||
|
||
public TaskList() { | ||
this.tasks = new ArrayList<>(); | ||
} | ||
|
||
public TaskList(ArrayList<Task> tasks) { | ||
this.tasks = tasks; | ||
} | ||
|
||
public boolean isEmpty() { | ||
return tasks.isEmpty(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
public class ToDo extends Task { | ||
public ToDo(String description) { | ||
super(description); | ||
} | ||
|
||
public ToDo(String description, boolean isDone) { | ||
super(description, isDone); | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "[T]" + super.toString(); | ||
} | ||
|
||
@Override | ||
public String toTxt() { | ||
return "T | " + super.toTxt(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
public class Ui { | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since it is a constant, may I suggest this change?