From 000de8e40c4bebd02b6b968dbf1705977e6aa4b7 Mon Sep 17 00:00:00 2001 From: John Ng <69422560+JohnNub@users.noreply.github.com> Date: Fri, 2 Oct 2020 14:15:23 +0800 Subject: [PATCH 001/336] Set theme jekyll-theme-slate --- docs/_config.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/_config.yml diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000000..c741881743 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-slate \ No newline at end of file From 9ff6c6a6bec013bc48d27e9d2820b3186b9f4f19 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Fri, 2 Oct 2020 14:52:23 +0800 Subject: [PATCH 002/336] first --- src/main/java/seedu/duke/Duke.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index 5c74e68d59..2b5a104e5a 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -19,3 +19,4 @@ public static void main(String[] args) { System.out.println("Hello " + in.nextLine()); } } +//nothing From b9244c4a8dc4cf3981d217ff798c11dcaf11ddb8 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 2 Oct 2020 14:55:30 +0800 Subject: [PATCH 003/336] Update AbountUs.md --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..61dfe58d45 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -6,4 +6,4 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | John Ng | [Github](https://github.com/JohnNub) | [Portfolio](docs/team/johnng.md) From 839bef0085530d6e16777fc86563d5eef610e7d2 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Fri, 2 Oct 2020 14:55:41 +0800 Subject: [PATCH 004/336] Varsha-AboutUs --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..08bc1e5184 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -6,4 +6,4 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Varsha MS | [Github](https://github.com/Varsha3006) | [Portfolio](docs/team/johndoe.md) From 8e386b77757f9b079a693766d4b7451aea9d97db Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Fri, 2 Oct 2020 14:56:51 +0800 Subject: [PATCH 005/336] first --- src/main/java/seedu/duke/Duke.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index 2b5a104e5a..de2e2e95dd 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -19,4 +19,4 @@ public static void main(String[] args) { System.out.println("Hello " + in.nextLine()); } } -//nothing +//nothing... From 6196026bf84e9f54201df4229060f1cc81e6c280 Mon Sep 17 00:00:00 2001 From: YeYutong Date: Fri, 2 Oct 2020 14:58:31 +0800 Subject: [PATCH 006/336] AboutUs --- docs/AboutUs.md | 2 +- docs/team/yeyutong.md | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 docs/team/yeyutong.md diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..371a38fba3 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -6,4 +6,4 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Ye Yutong | [Github](https://github.com/yeyutong811) | [Portfolio](docs/team/johndoe.md) diff --git a/docs/team/yeyutong.md b/docs/team/yeyutong.md new file mode 100644 index 0000000000..6168153704 --- /dev/null +++ b/docs/team/yeyutong.md @@ -0,0 +1,6 @@ +# Ye Yutong - Project Portfolio Page + +## Overview + + +### Summary of Contributions \ No newline at end of file From 31f32090074ee087c0184bf36c204dcaa1a66b7d Mon Sep 17 00:00:00 2001 From: John Date: Fri, 2 Oct 2020 15:40:45 +0800 Subject: [PATCH 007/336] Add Parser and UserInput Add clasess for parsing and managing user input for handing over to other commands. --- src/main/java/seedu/duke/backend/Parser.java | 77 +++++++++++++++++++ .../java/seedu/duke/backend/UserInput.java | 37 +++++++++ 2 files changed, 114 insertions(+) create mode 100644 src/main/java/seedu/duke/backend/Parser.java create mode 100644 src/main/java/seedu/duke/backend/UserInput.java diff --git a/src/main/java/seedu/duke/backend/Parser.java b/src/main/java/seedu/duke/backend/Parser.java new file mode 100644 index 0000000000..d0fc40164b --- /dev/null +++ b/src/main/java/seedu/duke/backend/Parser.java @@ -0,0 +1,77 @@ +package seedu.duke.backend; + +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +public class Parser { + Scanner in; + + public Parser() { + in = new Scanner(System.in); + } + + /** + * Given a string input, returns a sanitized and pre-processed UserInput object + * @param input The string to be processed + * @return UserInput object containing the command and all arguments + */ + public UserInput parse(String input) { + String userInput; + + userInput = sanitize(input); + // Regex looks silly, you have to escape the / so you type double \ to escape the \ used to escape the / + String[] output = userInput.split("\\/"); + UserInput ui; + Map map = new HashMap<>(); + if (output.length == 1) { + // There are no arguments supplied + // Check if the input has any other arguments + String tmp = output[0].trim(); + String cmd; + if (tmp.indexOf(' ') != -1) { + String arg = tmp.substring(tmp.indexOf(' ') + 1); + cmd = tmp.substring(0, tmp.indexOf(' ')); + map.put("", arg); + } else { + cmd = tmp; + } + ui = new UserInput(cmd, map); + } else { + String base = output[0].trim(); + if (base.indexOf(' ') != -1) { + String arg = base.substring(base.indexOf(' ') + 1); + base = base.substring(0, base.indexOf(' ')); + map.put("", arg); + } + for (int i = 1; i < output.length; i++) { + String tmp = output[i].trim(); + String key; + String val; + if (tmp.indexOf(' ') != -1) { + val = tmp.substring(tmp.indexOf(' ') + 1); + key = tmp.substring(0, tmp.indexOf(' ')); + } else { + val = ""; + key = tmp; + } + + map.put(key.trim().toLowerCase(), val.trim()); + } + ui = new UserInput(base, map); + } + return ui; + + } + + /** + * TODO implement string sanitization + * Cleans up the string to ensure that anything else is safe for the rest of the program to handle + * @param s String to be sanitized + * @return Sanitized string S + */ + public String sanitize(String s) { + return s; + } +} + diff --git a/src/main/java/seedu/duke/backend/UserInput.java b/src/main/java/seedu/duke/backend/UserInput.java new file mode 100644 index 0000000000..4ea57dc7d9 --- /dev/null +++ b/src/main/java/seedu/duke/backend/UserInput.java @@ -0,0 +1,37 @@ +package seedu.duke.backend; + +import java.util.Map; + +public class UserInput { + private String command; + private Map args; + + public UserInput(String c, Map a) { + command = c; + args = a; + } + + public String getCommand() { + return command; + } + + public void setCommand(String command) { + this.command = command; + } + + public Map getArgs() { + return args; + } + + public void setArgs(Map args) { + this.args = args; + } + + public String getArg(String s) { + return args.get(s); + } + + public int getNumArgs() { + return args.size(); + } +} From 9cecffdf804050629758b0ab77da17ce479f7b8f Mon Sep 17 00:00:00 2001 From: John Date: Fri, 2 Oct 2020 18:11:19 +0800 Subject: [PATCH 008/336] Modify Parser.java Corrected javadoc style to fix checkstyle error. --- src/main/java/seedu/duke/backend/Parser.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/duke/backend/Parser.java b/src/main/java/seedu/duke/backend/Parser.java index d0fc40164b..6b939cee21 100644 --- a/src/main/java/seedu/duke/backend/Parser.java +++ b/src/main/java/seedu/duke/backend/Parser.java @@ -12,7 +12,7 @@ public Parser() { } /** - * Given a string input, returns a sanitized and pre-processed UserInput object + * Given a string input, returns a sanitized and pre-processed UserInput object. * @param input The string to be processed * @return UserInput object containing the command and all arguments */ @@ -65,8 +65,8 @@ public UserInput parse(String input) { } /** - * TODO implement string sanitization - * Cleans up the string to ensure that anything else is safe for the rest of the program to handle + * TODO implement string sanitization. + * Cleans up the string to ensure that anything else is safe for the rest of the program to handle. * @param s String to be sanitized * @return Sanitized string S */ From 011e6075e23bb38692d7c1f2ad4f331d0e09072b Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Mon, 5 Oct 2020 21:08:46 +0800 Subject: [PATCH 009/336] Finance ver1.0 --- docs/AboutUs.md | 1 + src/main/java/seedu/duke/Duke.java | 1 - .../java/seedu/duke/Finance/FinanceLog.java | 40 +++++++++++++++++++ .../java/seedu/duke/Finance/Inventory.java | 30 ++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/main/java/seedu/duke/Finance/FinanceLog.java create mode 100644 src/main/java/seedu/duke/Finance/Inventory.java diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 3d7fdda6b3..7c02b303c2 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -8,3 +8,4 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | Ye Yutong | [Github](https://github.com/yeyutong811) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Ng | [Github](https://github.com/JohnNub) | [Portfolio](docs/team/johnng.md) ![](https://via.placeholder.com/100.png?text=Photo) | Varsha MS | [Github](https://github.com/Varsha3006) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Wang Zixin | [Github](https://github.com/WangZixin67) | [Portfolio](docs/team/johndoe.md) diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index de2e2e95dd..5c74e68d59 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -19,4 +19,3 @@ public static void main(String[] args) { System.out.println("Hello " + in.nextLine()); } } -//nothing... diff --git a/src/main/java/seedu/duke/Finance/FinanceLog.java b/src/main/java/seedu/duke/Finance/FinanceLog.java new file mode 100644 index 0000000000..e8721e7b4f --- /dev/null +++ b/src/main/java/seedu/duke/Finance/FinanceLog.java @@ -0,0 +1,40 @@ +package seedu.duke.Finance; + +public class FinanceLog { + public String[] finLog; + public float[] finLogVal; + public int finSize; + public float sum; + + public FinanceLog() { + finLog=new String[100]; + finLogVal=new float[100]; + finSize=0; + sum=0; + } + + public void addFin(String log, float val) { + finLog[finSize]=log; + finLogVal[finSize]=val; + finSize++; + sum=sum+val; + } + + public void delFin(int index) { + sum=sum-finLogVal[index-1]; + for (int i=index-1;i Date: Tue, 6 Oct 2020 22:29:59 +0800 Subject: [PATCH 010/336] finance ver1.1 --- .../seedu/duke/Finance/CommandFinance.java | 21 +++++++++++++ .../java/seedu/duke/Finance/FinanceLog.java | 8 ++--- .../java/seedu/duke/Finance/Inventory.java | 30 ------------------- 3 files changed, 25 insertions(+), 34 deletions(-) create mode 100644 src/main/java/seedu/duke/Finance/CommandFinance.java delete mode 100644 src/main/java/seedu/duke/Finance/Inventory.java diff --git a/src/main/java/seedu/duke/Finance/CommandFinance.java b/src/main/java/seedu/duke/Finance/CommandFinance.java new file mode 100644 index 0000000000..165ce9852e --- /dev/null +++ b/src/main/java/seedu/duke/Finance/CommandFinance.java @@ -0,0 +1,21 @@ +package seedu.duke.Finance; + +import seedu.duke.backend.UserInput; + +public class CommandFinance { + public void commandList (FinanceLog fl, UserInput ui) { + if (ui.getCommand().equals("summary")) { + fl.summary(); + } + else if (ui.getCommand().equals("addLog")) { + String input=ui.getArg(""); + String[] contents=input.trim().split(" "); + fl.addFin(contents[0],Integer.parseInt(contents[1])); + } + else if (ui.getCommand().equals("delLog")) { + String input=ui.getArg(""); + int index=Integer.parseInt(input.trim()); + fl.delFin(index); + } + } +} diff --git a/src/main/java/seedu/duke/Finance/FinanceLog.java b/src/main/java/seedu/duke/Finance/FinanceLog.java index e8721e7b4f..0d75457193 100644 --- a/src/main/java/seedu/duke/Finance/FinanceLog.java +++ b/src/main/java/seedu/duke/Finance/FinanceLog.java @@ -2,18 +2,18 @@ public class FinanceLog { public String[] finLog; - public float[] finLogVal; + public double[] finLogVal; public int finSize; - public float sum; + public double sum; public FinanceLog() { finLog=new String[100]; - finLogVal=new float[100]; + finLogVal=new double[100]; finSize=0; sum=0; } - public void addFin(String log, float val) { + public void addFin(String log, double val) { finLog[finSize]=log; finLogVal[finSize]=val; finSize++; diff --git a/src/main/java/seedu/duke/Finance/Inventory.java b/src/main/java/seedu/duke/Finance/Inventory.java deleted file mode 100644 index 72da6bb4e8..0000000000 --- a/src/main/java/seedu/duke/Finance/Inventory.java +++ /dev/null @@ -1,30 +0,0 @@ -package seedu.duke.Finance; - -public class Inventory { - private String[] list; - private int size; - - public Inventory() { - list=new String[100]; - size=0; - } - - public void addList(String input) { - list[size]=input; - size++; - } - - public void delList (int index) { - for (int i=index-1;i Date: Wed, 7 Oct 2020 18:13:44 +0800 Subject: [PATCH 011/336] Added add/delete/list members function. Have not integrate into Duke.main(). --- .../java/seedu/duke/hr/ExternalMember.java | 22 ++++ .../java/seedu/duke/hr/InternalMember.java | 25 ++++ src/main/java/seedu/duke/hr/Member.java | 40 +++++++ src/main/java/seedu/duke/hr/MemberList.java | 108 ++++++++++++++++++ 4 files changed, 195 insertions(+) create mode 100644 src/main/java/seedu/duke/hr/ExternalMember.java create mode 100644 src/main/java/seedu/duke/hr/InternalMember.java create mode 100644 src/main/java/seedu/duke/hr/Member.java create mode 100644 src/main/java/seedu/duke/hr/MemberList.java diff --git a/src/main/java/seedu/duke/hr/ExternalMember.java b/src/main/java/seedu/duke/hr/ExternalMember.java new file mode 100644 index 0000000000..48772d6ca2 --- /dev/null +++ b/src/main/java/seedu/duke/hr/ExternalMember.java @@ -0,0 +1,22 @@ +package seedu.duke.hr; + +/** + * unused in v1.0 + */ +public class ExternalMember extends Member { + public static int numOfExternalMembers = 0; + protected String organization; + + public ExternalMember(String name, int phone, String email){ + super(name, phone, email); + numOfMembers += 1; + } + + public void setOrganization (String orgName) { + organization = orgName; + } + + public String getOrganization() { + return this.organization; + } +} diff --git a/src/main/java/seedu/duke/hr/InternalMember.java b/src/main/java/seedu/duke/hr/InternalMember.java new file mode 100644 index 0000000000..9682c7be49 --- /dev/null +++ b/src/main/java/seedu/duke/hr/InternalMember.java @@ -0,0 +1,25 @@ +package seedu.duke.hr; + +/** + * unused in v1.0 + */ +public class InternalMember extends Member { + public static int numOfInternalMembers = 0; + protected String[] memberRoles; + + + public InternalMember(String name, int phone, String email) { + super(name, phone, email); + numOfMembers += 1; + } + + public void setMemberRole (String role) { + memberRoles[memberRoles.length] = role; + } + + public String[] getMemberRole() { + return this.memberRoles; + } + + +} diff --git a/src/main/java/seedu/duke/hr/Member.java b/src/main/java/seedu/duke/hr/Member.java new file mode 100644 index 0000000000..84d5f08d77 --- /dev/null +++ b/src/main/java/seedu/duke/hr/Member.java @@ -0,0 +1,40 @@ +package seedu.duke.hr; + +public class Member { + public static int numOfMembers = 0; + protected String memberName; + protected int memberPhone; + protected String memberEmail; + protected String[] memberRoles; + + public Member(String name, int phone, String email){ + this.memberName = name; + this.memberPhone = phone; + this.memberEmail = email; + numOfMembers += 1; + } + + public int getMemberPhone() { + return this.memberPhone; + } + + public String getMemberEmail() { + return this.memberEmail; + } + + public void setMemberRole (String role) { + memberRoles[memberRoles.length] = role; + } + + public String[] getMemberRole() { + return this.memberRoles; + } + + /** + * Prints task data in the desired form to be printed for user interaction. + * */ + public void printMember() { + System.out.format("name: %s |phone: %d |email: %s%n", this.memberName, this.getMemberPhone(), this.getMemberEmail()); + } + +} diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java new file mode 100644 index 0000000000..65b20e99ed --- /dev/null +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -0,0 +1,108 @@ +package seedu.duke.hr; + +import java.io.IOException; +import java.util.ArrayList; + +public class MemberList { + public static ArrayList members = new ArrayList<>(); + + public MemberList() { + } + + /** + * Add member to the list of tasks. + * + * @param line user input. + */ + public static void addMember(String line) { + try { + String[] memberDescription = line.split("n/|p/|e/", 3); + Member d = new Member(memberDescription[0], Integer.parseInt(memberDescription[1]), memberDescription[2]); + addMemberToList(d); + } catch (StringIndexOutOfBoundsException | ArrayIndexOutOfBoundsException | IOException e) { + System.out.println(" OOPS!!! The description of a member is incomplete."); + } + } + + /** + * Add ToDo object to the list of tasks. + * + * @param m Member object to be added. + * @throws IOException if any in/output error occurs. + */ + public static void addMemberToList(Member m) throws IOException { + members.add(m); + + System.out.println(" " + "Got it. I've added this member: "); + + System.out.format(" "); + m.printMember(); + + System.out.format(" Now you have %d member%s in your list.%n", Member.numOfMembers, + (Member.numOfMembers == 1) ? "" : "s"); + } + + /** + * Delete object from the list of tasks, based on task index. + * + * @param line user input. + */ + public static void deleteTask(String line) { + try { + line = line.trim(); + int startOfTaskIndex = line.indexOf(' ') + 1; + int taskIndex = Integer.parseInt(line.substring(startOfTaskIndex)) - 1; + + printRemovingTaskMessage(); + System.out.format(" "); + members.get(taskIndex).printMember();; + members.remove(taskIndex); + + Member.numOfMembers--; + printTaskRemovedMessage(); + } catch (IndexOutOfBoundsException e) { + System.out.println(""); + printTaskNotExistMessage(); + } + } + + /** + * Prints the existing task list. + */ + public static void printList(ArrayList tasks) { + if (Member.numOfMembers==0) { + //EmptyListException + System.out.println(" Dude, the list is empty! o_O"); + } else { + System.out.println(" Here is the list of your tasks: "); + for (int i = 0; i < Member.numOfMembers; i++) { + int index = i+1; + System.out.format(" %d.", index); + members.get(i).printMember(); + } + } + } + + /** + * Prints the messages to show that the task the user referred to is invalid. + */ + public static void printTaskNotExistMessage() { + System.out.println(" OOPS!!! The member does not exist."); + } + + /** + * Prints the messages to show that the task is successfully removed. + */ + public static void printTaskRemovedMessage() { + System.out.println(" Task removed successfully!"); + System.out.println(" Now you have " + Member.numOfMembers + " member" + (Member.numOfMembers>1?"s":"") + " in the list."); + } + + /** + * Prints the messages to show that the program is attempting to remove the task. + */ + public static void printRemovingTaskMessage() { + System.out.println(" Noted. I'll removed this member: "); + } + +} From 3103db49f1b6bd4f0586f572dc2ef8dbdabfdf6c Mon Sep 17 00:00:00 2001 From: John Date: Fri, 9 Oct 2020 14:12:20 +0800 Subject: [PATCH 012/336] Implement Parser, UserInput, UI and Command Add required backend classes to set up the basic framework required for the application to function. --- src/main/java/seedu/duke/Command.java | 32 +++++ src/main/java/seedu/duke/Duke.java | 10 +- src/main/java/seedu/duke/backend/Parser.java | 33 ++++- src/main/java/seedu/duke/backend/Ui.java | 113 ++++++++++++++++++ .../java/seedu/duke/backend/UserInput.java | 9 ++ .../java/seedu/duke/others/CommandBye.java | 27 +++++ .../java/seedu/duke/others/CommandHelp.java | 24 ++++ 7 files changed, 239 insertions(+), 9 deletions(-) create mode 100644 src/main/java/seedu/duke/Command.java create mode 100644 src/main/java/seedu/duke/backend/Ui.java create mode 100644 src/main/java/seedu/duke/others/CommandBye.java create mode 100644 src/main/java/seedu/duke/others/CommandHelp.java diff --git a/src/main/java/seedu/duke/Command.java b/src/main/java/seedu/duke/Command.java new file mode 100644 index 0000000000..660b7d2a6e --- /dev/null +++ b/src/main/java/seedu/duke/Command.java @@ -0,0 +1,32 @@ +package seedu.duke; + +import seedu.duke.backend.UserInput; + +public abstract class Command { + + public static final int NO_MATCH = -1; + public static final int ARGUMENT_ERR = 0; + public static final int ACCEPT = 1; + /** + * Checks if the supplied userInput is valid for the command. + * UserInput can contain any information so it's the command's job to ensure it is correct before acceptance + * Once accepted, the command should store a copy of the UserInput for execution + * @param UI The UserInput to Validate + * @return NO_MATCH if the command and category is incorrect, ARGUMENT_ERR if the argument supplied is incorrect. + * ACCEPT if the userInput is intended and correct for invoking this command. + */ + public int validate(UserInput UI){ + return NO_MATCH; + } + /** + * Runs the actual command processing. + * @return String message to be printed to the user. + */ + public abstract String execute(); + + /** + * Provides information about command usage + * @return The string to be printed to the user. + */ + public abstract String help(); +} diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index de2e2e95dd..51ad9a0b44 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -1,6 +1,6 @@ package seedu.duke; -import java.util.Scanner; +import seedu.duke.backend.Ui; public class Duke { /** @@ -13,10 +13,10 @@ public static void main(String[] args) { + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); - System.out.println("What is your name?"); - - Scanner in = new Scanner(System.in); - System.out.println("Hello " + in.nextLine()); + Ui ui = new Ui(); + while(!Ui.shouldShutdown()) { + ui.run(); + } } } //nothing... diff --git a/src/main/java/seedu/duke/backend/Parser.java b/src/main/java/seedu/duke/backend/Parser.java index 6b939cee21..e8e71cfe75 100644 --- a/src/main/java/seedu/duke/backend/Parser.java +++ b/src/main/java/seedu/duke/backend/Parser.java @@ -2,19 +2,17 @@ import java.util.HashMap; import java.util.Map; -import java.util.Scanner; public class Parser { - Scanner in; public Parser() { - in = new Scanner(System.in); + } /** * Given a string input, returns a sanitized and pre-processed UserInput object. * @param input The string to be processed - * @return UserInput object containing the command and all arguments + * @return UserInput object containing the command, category and all arguments */ public UserInput parse(String input) { String userInput; @@ -24,6 +22,13 @@ public UserInput parse(String input) { String[] output = userInput.split("\\/"); UserInput ui; Map map = new HashMap<>(); + String category = checkCategory(output); + if (!category.equals("")) { + // Trim is still required as indexOf ' ' may hit a blank space before the category + // This removes the category from the command if it exists + String tmp = output[0].trim(); + output[0] = tmp.substring(tmp.indexOf(' ') + 1); + } if (output.length == 1) { // There are no arguments supplied // Check if the input has any other arguments @@ -44,6 +49,7 @@ public UserInput parse(String input) { base = base.substring(0, base.indexOf(' ')); map.put("", arg); } + // Convert the / arguments into a map for (int i = 1; i < output.length; i++) { String tmp = output[i].trim(); String key; @@ -60,10 +66,29 @@ public UserInput parse(String input) { } ui = new UserInput(base, map); } + ui.setCategory(category); return ui; } + /** + * Given any split output, finds if the output contains a string that indicates the category. + * Shorthand categories are supported. + * @param output The split string output + * @return The category of the command + */ + public String checkCategory(String[] output) { + String tmp = output[0].trim().toLowerCase(); + if (tmp.startsWith("hr ") || tmp.startsWith("h ")) { + return "hr"; + } else if (tmp.startsWith("finance ") || tmp.startsWith("f ")) { + return "finance"; + } else if (tmp.startsWith("event ") || tmp.startsWith("e ")) { + return "event"; + } + return ""; + } + /** * TODO implement string sanitization. * Cleans up the string to ensure that anything else is safe for the rest of the program to handle. diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java new file mode 100644 index 0000000000..3c364440d5 --- /dev/null +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -0,0 +1,113 @@ +package seedu.duke.backend; + +import seedu.duke.Command; +import seedu.duke.others.CommandBye; +import seedu.duke.others.CommandHelp; + +import java.util.ArrayList; +import java.util.Scanner; + +public class Ui { + private Scanner sc; + private Parser p; + private static ArrayList commandList = new ArrayList<>(); + private static boolean shutdown = false; + + public Ui() { + sc = new Scanner(System.in); + p = new Parser(); + initializeCommands(); + } + + public void run() { + String inStr = sc.nextLine(); + UserInput userInput = p.parse(inStr); + /*System.out.println("Category: "+userInput.getCategory()); + System.out.println("Command: "+userInput.getCommand()); + System.out.println("Num Args: "+userInput.getNumArgs()); + System.out.println("Args: "+userInput.getArgs());*/ + Command cmd = findCommand(userInput); + if (cmd != null) { + printOutput(cmd.execute()); + } else { + printOutput("No such command. Try 'help' for a list of commands."); + } + } + + public Command findCommand(UserInput ui) { + for (Command c : commandList) { + int result = c.validate(ui); + if (result == Command.ARGUMENT_ERR) { + printError(c.help()); + return null; + } else if (result == Command.ACCEPT) { + return c; + } + } + return null; + } + + /** + * Returns if the loop should exit + * @return true if the program should terminate + */ + public static boolean shouldShutdown() { + return shutdown; + } + + public static void setShutdown(boolean shut) { + shutdown = shut; + } + + /** + * Utility function for printing errors triggered by other classes + * @param text The string to be printed + */ + public void printError(String text) { + printOutput(text, true); + } + + private static void printOutput(String text) { + printOutput(text, false); + } + + /** + * Prints the output with the divider lines and the supplied text + * Option to make the text non instant for extra effect + * @param text string to be printed + * @param isInstant whether the string is printed instantly + */ + private static void printOutput(String text, boolean isInstant) { + final String UNDERSCORES = "____________________________________________________________"; + System.out.println(UNDERSCORES); + // Split text according to the lines to format. + String[] lines = text.split("\\r?\\n"); + for (String s : lines) { + if (isInstant) { + System.out.println(" " + s); + } else { + System.out.print(" "); + // charAt is constant time lookup so we do that instead of splitting strings. + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + System.out.print(c); + try { + Thread.sleep(5); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + System.out.print(System.lineSeparator()); + } + } + System.out.println(UNDERSCORES); + } + + /** + * Creates a list of commands for the program to check through + */ + private static void initializeCommands() { + commandList.add(new CommandHelp()); + commandList.add(new CommandBye()); + } +} diff --git a/src/main/java/seedu/duke/backend/UserInput.java b/src/main/java/seedu/duke/backend/UserInput.java index 4ea57dc7d9..57ce59def6 100644 --- a/src/main/java/seedu/duke/backend/UserInput.java +++ b/src/main/java/seedu/duke/backend/UserInput.java @@ -5,6 +5,7 @@ public class UserInput { private String command; private Map args; + private String category; public UserInput(String c, Map a) { command = c; @@ -34,4 +35,12 @@ public String getArg(String s) { public int getNumArgs() { return args.size(); } + + public String getCategory() { + return category; + } + + public void setCategory(String s) { + category = s; + } } diff --git a/src/main/java/seedu/duke/others/CommandBye.java b/src/main/java/seedu/duke/others/CommandBye.java new file mode 100644 index 0000000000..0f868d01c5 --- /dev/null +++ b/src/main/java/seedu/duke/others/CommandBye.java @@ -0,0 +1,27 @@ +package seedu.duke.others; + +import seedu.duke.Command; +import seedu.duke.backend.Ui; +import seedu.duke.backend.UserInput; + +public class CommandBye extends Command { + @Override + public String execute() { + Ui.setShutdown(true); + return "See you next time!"; + } + + @Override + public int validate(UserInput userInput) { + if (userInput.getCategory().equals("") && userInput.getCommand().equalsIgnoreCase("bye")) { + return ACCEPT; + } else { + return NO_MATCH; + } + } + + @Override + public String help() { + return ""; + } +} diff --git a/src/main/java/seedu/duke/others/CommandHelp.java b/src/main/java/seedu/duke/others/CommandHelp.java new file mode 100644 index 0000000000..0770b7e07c --- /dev/null +++ b/src/main/java/seedu/duke/others/CommandHelp.java @@ -0,0 +1,24 @@ +package seedu.duke.others; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandHelp extends Command { + @Override + public String execute() { + return "Commands: hr add, hr delete, events add, events delete, finance add, finance delete, help, bye"; + } + + public int validate(UserInput UI) { + if (UI.getCategory().equals("") && UI.getCommand().equalsIgnoreCase("help")) { + return ACCEPT; + } else { + return NO_MATCH; + } + } + + @Override + public String help() { + return ""; + } +} From c4ec7490ba6ba5281028b75f9a7f3aba4c2cac99 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 9 Oct 2020 15:03:15 +0800 Subject: [PATCH 013/336] Resolve coding standard errors. Tidy up formatting of variables and names. --- src/main/java/seedu/duke/Command.java | 9 ++++++--- src/main/java/seedu/duke/Duke.java | 2 +- src/main/java/seedu/duke/backend/Ui.java | 17 +++++++++-------- .../java/seedu/duke/others/CommandHelp.java | 4 ++-- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/main/java/seedu/duke/Command.java b/src/main/java/seedu/duke/Command.java index 660b7d2a6e..3fc9d9fa9c 100644 --- a/src/main/java/seedu/duke/Command.java +++ b/src/main/java/seedu/duke/Command.java @@ -7,17 +7,20 @@ public abstract class Command { public static final int NO_MATCH = -1; public static final int ARGUMENT_ERR = 0; public static final int ACCEPT = 1; + private UserInput savedInput; // Variable for saving the given user input + /** * Checks if the supplied userInput is valid for the command. * UserInput can contain any information so it's the command's job to ensure it is correct before acceptance * Once accepted, the command should store a copy of the UserInput for execution - * @param UI The UserInput to Validate + * @param input The UserInput to Validate * @return NO_MATCH if the command and category is incorrect, ARGUMENT_ERR if the argument supplied is incorrect. * ACCEPT if the userInput is intended and correct for invoking this command. */ - public int validate(UserInput UI){ + public int validate(UserInput input) { return NO_MATCH; } + /** * Runs the actual command processing. * @return String message to be printed to the user. @@ -25,7 +28,7 @@ public int validate(UserInput UI){ public abstract String execute(); /** - * Provides information about command usage + * Provides information about command usage. * @return The string to be printed to the user. */ public abstract String help(); diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index 51ad9a0b44..50a57ec240 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -14,7 +14,7 @@ public static void main(String[] args) { + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); Ui ui = new Ui(); - while(!Ui.shouldShutdown()) { + while (!Ui.shouldShutdown()) { ui.run(); } } diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index 3c364440d5..fab89486cc 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -9,19 +9,20 @@ public class Ui { private Scanner sc; - private Parser p; + private Parser parser; private static ArrayList commandList = new ArrayList<>(); private static boolean shutdown = false; + private static final String UNDERSCORES = "____________________________________________________________"; public Ui() { sc = new Scanner(System.in); - p = new Parser(); + parser = new Parser(); initializeCommands(); } public void run() { String inStr = sc.nextLine(); - UserInput userInput = p.parse(inStr); + UserInput userInput = parser.parse(inStr); /*System.out.println("Category: "+userInput.getCategory()); System.out.println("Command: "+userInput.getCommand()); System.out.println("Num Args: "+userInput.getNumArgs()); @@ -48,7 +49,7 @@ public Command findCommand(UserInput ui) { } /** - * Returns if the loop should exit + * Returns if the loop should exit. * @return true if the program should terminate */ public static boolean shouldShutdown() { @@ -60,7 +61,7 @@ public static void setShutdown(boolean shut) { } /** - * Utility function for printing errors triggered by other classes + * Utility function for printing errors triggered by other classes. * @param text The string to be printed */ public void printError(String text) { @@ -72,13 +73,13 @@ private static void printOutput(String text) { } /** - * Prints the output with the divider lines and the supplied text + * Prints the output with the divider lines and the supplied text. * Option to make the text non instant for extra effect * @param text string to be printed * @param isInstant whether the string is printed instantly */ private static void printOutput(String text, boolean isInstant) { - final String UNDERSCORES = "____________________________________________________________"; + System.out.println(UNDERSCORES); // Split text according to the lines to format. String[] lines = text.split("\\r?\\n"); @@ -104,7 +105,7 @@ private static void printOutput(String text, boolean isInstant) { } /** - * Creates a list of commands for the program to check through + * Creates a list of commands for the program to check through. */ private static void initializeCommands() { commandList.add(new CommandHelp()); diff --git a/src/main/java/seedu/duke/others/CommandHelp.java b/src/main/java/seedu/duke/others/CommandHelp.java index 0770b7e07c..4dbdb41ffe 100644 --- a/src/main/java/seedu/duke/others/CommandHelp.java +++ b/src/main/java/seedu/duke/others/CommandHelp.java @@ -9,8 +9,8 @@ public String execute() { return "Commands: hr add, hr delete, events add, events delete, finance add, finance delete, help, bye"; } - public int validate(UserInput UI) { - if (UI.getCategory().equals("") && UI.getCommand().equalsIgnoreCase("help")) { + public int validate(UserInput input) { + if (input.getCategory().equals("") && input.getCommand().equalsIgnoreCase("help")) { return ACCEPT; } else { return NO_MATCH; From ce0e9617ea540240e7ee452d413d1d0e3dfc6c45 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 9 Oct 2020 15:47:34 +0800 Subject: [PATCH 014/336] Update text-ui-test files. Correct for compliance with automated testing checks --- text-ui-test/EXPECTED.TXT | 11 +++++++++-- text-ui-test/input.txt | 4 +++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 892cb6cae7..e2bafcc1c0 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -5,5 +5,12 @@ Hello from | |_| | |_| | < __/ |____/ \__,_|_|\_\___| -What is your name? -Hello James Gosling +____________________________________________________________ + No such command. Try 'help' for a list of commands. +____________________________________________________________ +____________________________________________________________ + Commands: hr add, hr delete, events add, events delete, finance add, finance delete, help, bye +____________________________________________________________ +____________________________________________________________ + See you next time! +____________________________________________________________ diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index f6ec2e9f95..51109742ef 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1 +1,3 @@ -James Gosling \ No newline at end of file +James Gosling +help +bye \ No newline at end of file From 03d5fe76825d7bd590b7300d6a5b3b44233edd3b Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Fri, 9 Oct 2020 20:10:22 +0800 Subject: [PATCH 015/336] complete ver1.0 --- .../seedu/duke/Finance/CommandFinance.java | 21 ------------ .../seedu/duke/Finance/CommandFinanceAdd.java | 32 +++++++++++++++++++ .../seedu/duke/Finance/CommandFinanceDel.java | 32 +++++++++++++++++++ .../duke/Finance/CommandFinanceSummary.java | 30 +++++++++++++++++ .../java/seedu/duke/Finance/FinanceLog.java | 20 +++++++++++- src/main/java/seedu/duke/backend/Ui.java | 11 ++++++- 6 files changed, 123 insertions(+), 23 deletions(-) delete mode 100644 src/main/java/seedu/duke/Finance/CommandFinance.java create mode 100644 src/main/java/seedu/duke/Finance/CommandFinanceAdd.java create mode 100644 src/main/java/seedu/duke/Finance/CommandFinanceDel.java create mode 100644 src/main/java/seedu/duke/Finance/CommandFinanceSummary.java diff --git a/src/main/java/seedu/duke/Finance/CommandFinance.java b/src/main/java/seedu/duke/Finance/CommandFinance.java deleted file mode 100644 index 165ce9852e..0000000000 --- a/src/main/java/seedu/duke/Finance/CommandFinance.java +++ /dev/null @@ -1,21 +0,0 @@ -package seedu.duke.Finance; - -import seedu.duke.backend.UserInput; - -public class CommandFinance { - public void commandList (FinanceLog fl, UserInput ui) { - if (ui.getCommand().equals("summary")) { - fl.summary(); - } - else if (ui.getCommand().equals("addLog")) { - String input=ui.getArg(""); - String[] contents=input.trim().split(" "); - fl.addFin(contents[0],Integer.parseInt(contents[1])); - } - else if (ui.getCommand().equals("delLog")) { - String input=ui.getArg(""); - int index=Integer.parseInt(input.trim()); - fl.delFin(index); - } - } -} diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java b/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java new file mode 100644 index 0000000000..58e27f57ed --- /dev/null +++ b/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java @@ -0,0 +1,32 @@ +package seedu.duke.Finance; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandFinanceAdd extends Command { + FinanceLog finLog; + UserInput userinput; + public CommandFinanceAdd(FinanceLog fl) { + finLog=fl; + } + @Override + public String execute() { + String input=userinput.getArg(""); + String[] contents=input.trim().split(" "); + finLog.addFin(contents[0],Double.parseDouble(contents[1])); + return null; + } + + @Override + public String help() { + return null; + } + + public int validate(UserInput ui) { + if (ui.getCategory().equals("finance")&&ui.getCommand().equalsIgnoreCase("addlog")) { + userinput=ui; + return ACCEPT; + } + return NO_MATCH; + } +} diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceDel.java b/src/main/java/seedu/duke/Finance/CommandFinanceDel.java new file mode 100644 index 0000000000..151c4d8893 --- /dev/null +++ b/src/main/java/seedu/duke/Finance/CommandFinanceDel.java @@ -0,0 +1,32 @@ +package seedu.duke.Finance; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandFinanceDel extends Command { + FinanceLog finLog; + UserInput userinput; + public CommandFinanceDel(FinanceLog fl) { + finLog=fl; + } + @Override + public String execute() { + String input=userinput.getArg(""); + int index=Integer.parseInt(input.trim()); + finLog.delFin(index); + return null; + } + + @Override + public String help() { + return null; + } + + public int validate(UserInput ui) { + if (ui.getCategory().equals("finance")&&ui.getCommand().equalsIgnoreCase("dellog")) { + userinput=ui; + return ACCEPT; + } + return NO_MATCH; + } +} diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java b/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java new file mode 100644 index 0000000000..c1d9da075f --- /dev/null +++ b/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java @@ -0,0 +1,30 @@ +package seedu.duke.Finance; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandFinanceSummary extends Command { + FinanceLog finlog; + UserInput userinput; + public CommandFinanceSummary(FinanceLog fl) { + finlog=fl; + } + @Override + public String execute() { + finlog.summary(); + return null; + } + + @Override + public String help() { + return null; + } + + public int validate(UserInput ui) { + if (ui.getCategory().equals("finance")&&ui.getCommand().equalsIgnoreCase("summary")) { + userinput=ui; + return ACCEPT; + } + return NO_MATCH; + } +} diff --git a/src/main/java/seedu/duke/Finance/FinanceLog.java b/src/main/java/seedu/duke/Finance/FinanceLog.java index 0d75457193..80ced146f2 100644 --- a/src/main/java/seedu/duke/Finance/FinanceLog.java +++ b/src/main/java/seedu/duke/Finance/FinanceLog.java @@ -14,13 +14,19 @@ public FinanceLog() { } public void addFin(String log, double val) { + System.out.println("Got it! I've added this into the list!"); finLog[finSize]=log; finLogVal[finSize]=val; finSize++; + System.out.println("\t"+finSize+"."+finLog[finSize-1]+" $"+finLogVal[finSize-1]); sum=sum+val; + showSum(); + System.out.println(); } public void delFin(int index) { + System.out.println("Got it! I will delete this task!"); + System.out.println("\t"+index+"."+finLog[index-1]+" $"+finLogVal[index-1]); sum=sum-finLogVal[index-1]; for (int i=index-1;i1) { + System.out.println("There are "+finSize+" logs in the list"); + } + else { + System.out.println("There is "+finSize+" logs in the list"); + } } } diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index fab89486cc..3590e1e874 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -1,6 +1,10 @@ package seedu.duke.backend; import seedu.duke.Command; +import seedu.duke.Finance.CommandFinanceAdd; +import seedu.duke.Finance.CommandFinanceDel; +import seedu.duke.Finance.CommandFinanceSummary; +import seedu.duke.Finance.FinanceLog; import seedu.duke.others.CommandBye; import seedu.duke.others.CommandHelp; @@ -8,6 +12,7 @@ import java.util.Scanner; public class Ui { + private static FinanceLog fl; private Scanner sc; private Parser parser; private static ArrayList commandList = new ArrayList<>(); @@ -17,6 +22,7 @@ public class Ui { public Ui() { sc = new Scanner(System.in); parser = new Parser(); + fl=new FinanceLog(); initializeCommands(); } @@ -79,7 +85,7 @@ private static void printOutput(String text) { * @param isInstant whether the string is printed instantly */ private static void printOutput(String text, boolean isInstant) { - + if (text==null) return; System.out.println(UNDERSCORES); // Split text according to the lines to format. String[] lines = text.split("\\r?\\n"); @@ -110,5 +116,8 @@ private static void printOutput(String text, boolean isInstant) { private static void initializeCommands() { commandList.add(new CommandHelp()); commandList.add(new CommandBye()); + commandList.add(new CommandFinanceSummary(fl)); + commandList.add(new CommandFinanceAdd(fl)); + commandList.add(new CommandFinanceDel(fl)); } } From 2498203b603fa272a84bf680d6e48f5feff6d893 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Sat, 10 Oct 2020 01:07:40 +0800 Subject: [PATCH 016/336] Did some minor changes --- src/main/java/seedu/duke/Duke.java | 2 +- .../seedu/duke/Event/CommandEventAdd.java | 31 +++++++++++++++++ .../seedu/duke/Event/CommandEventDel.java | 33 +++++++++++++++++++ src/main/java/seedu/duke/backend/Ui.java | 7 +++- src/test/java/seedu/duke/DukeTest.java | 5 +++ 5 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 src/main/java/seedu/duke/Event/CommandEventAdd.java create mode 100644 src/main/java/seedu/duke/Event/CommandEventDel.java diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java index 50a57ec240..20e1ab4952 100644 --- a/src/main/java/seedu/duke/Duke.java +++ b/src/main/java/seedu/duke/Duke.java @@ -19,4 +19,4 @@ public static void main(String[] args) { } } } -//nothing... + diff --git a/src/main/java/seedu/duke/Event/CommandEventAdd.java b/src/main/java/seedu/duke/Event/CommandEventAdd.java new file mode 100644 index 0000000000..522cad70a8 --- /dev/null +++ b/src/main/java/seedu/duke/Event/CommandEventAdd.java @@ -0,0 +1,31 @@ +package seedu.duke.Event; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandEventAdd extends Command{ + UserInput userInput; + //EventClass event; + //public static ArrayList tasks = new ArrayList<>(); + + + + @Override + public String execute() { + // event.addEvent(); + return null; + } + + + public int validate(UserInput ui) { + if (userInput.getCategory().equals("event") && userInput.getCommand().equalsIgnoreCase("addEvent")) { + userInput = ui; + return ACCEPT; + } else return NO_MATCH; + } + + @Override + public String help() { + return null; + } +} diff --git a/src/main/java/seedu/duke/Event/CommandEventDel.java b/src/main/java/seedu/duke/Event/CommandEventDel.java new file mode 100644 index 0000000000..06b7029e18 --- /dev/null +++ b/src/main/java/seedu/duke/Event/CommandEventDel.java @@ -0,0 +1,33 @@ +package seedu.duke.Event; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandEventDel extends Command { + UserInput userInput; + //EventClass event; + + // public CommandEventDel(EventClass ev) { + // event = ev; + // } + @Override + public String execute() { + // String input = userInput.getArg(""); + //int index = Integer.parseInt(input.trim()); + // event.delEvent(index); + return null; + } + + @Override + public String help() { + return null; + } + + public int validate(UserInput ui) { + if (userInput.getCategory().equals("event") && userInput.getCommand().equalsIgnoreCase("delEvent")) { + userInput = ui; + return ACCEPT; + } else return NO_MATCH; + } +} + diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index fab89486cc..efe6f39119 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -1,6 +1,8 @@ package seedu.duke.backend; import seedu.duke.Command; +import seedu.duke.Event.CommandEventAdd; +import seedu.duke.Event.CommandEventDel; import seedu.duke.others.CommandBye; import seedu.duke.others.CommandHelp; @@ -14,6 +16,7 @@ public class Ui { private static boolean shutdown = false; private static final String UNDERSCORES = "____________________________________________________________"; + public Ui() { sc = new Scanner(System.in); parser = new Parser(); @@ -79,7 +82,7 @@ private static void printOutput(String text) { * @param isInstant whether the string is printed instantly */ private static void printOutput(String text, boolean isInstant) { - + if (text==null) return; System.out.println(UNDERSCORES); // Split text according to the lines to format. String[] lines = text.split("\\r?\\n"); @@ -110,5 +113,7 @@ private static void printOutput(String text, boolean isInstant) { private static void initializeCommands() { commandList.add(new CommandHelp()); commandList.add(new CommandBye()); + // commandList.add(new CommandEventAdd(ev)); + // commandList.add(new CommandEventDel(ev)); } } diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java index 2dda5fd651..8492e3101e 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/DukeTest.java @@ -5,6 +5,11 @@ import org.junit.jupiter.api.Test; class DukeTest { + static final String LOGO = " ____ _ \n" + + " | _ \\ _ _| | _____ \n" + + " | | | | | | | |/ / _ \\\n" + + " | |_| | |_| | < __/\n" + + " |____/ \\__,_|_|\\_\\___|\n"; @Test public void sampleTest() { assertTrue(true); From d2d87f916198fa023e807361f3bd3ca1a41405af Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sat, 10 Oct 2020 19:57:00 +0800 Subject: [PATCH 017/336] addMember --- src/main/java/seedu/duke/backend/Ui.java | 2 + .../java/seedu/duke/hr/CommandAddMember.java | 40 ++++++++ .../java/seedu/duke/hr/ExternalMember.java | 22 ----- .../java/seedu/duke/hr/InternalMember.java | 25 ----- src/main/java/seedu/duke/hr/Member.java | 17 ++-- src/main/java/seedu/duke/hr/MemberList.java | 99 +------------------ .../java/seedu/duke/others/CommandHelp.java | 1 + 7 files changed, 51 insertions(+), 155 deletions(-) create mode 100644 src/main/java/seedu/duke/hr/CommandAddMember.java delete mode 100644 src/main/java/seedu/duke/hr/ExternalMember.java delete mode 100644 src/main/java/seedu/duke/hr/InternalMember.java diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index fab89486cc..d839d89ede 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -1,6 +1,7 @@ package seedu.duke.backend; import seedu.duke.Command; +import seedu.duke.hr.CommandAddMember; import seedu.duke.others.CommandBye; import seedu.duke.others.CommandHelp; @@ -110,5 +111,6 @@ private static void printOutput(String text, boolean isInstant) { private static void initializeCommands() { commandList.add(new CommandHelp()); commandList.add(new CommandBye()); + commandList.add(new CommandAddMember()); } } diff --git a/src/main/java/seedu/duke/hr/CommandAddMember.java b/src/main/java/seedu/duke/hr/CommandAddMember.java new file mode 100644 index 0000000000..a0f9666b5a --- /dev/null +++ b/src/main/java/seedu/duke/hr/CommandAddMember.java @@ -0,0 +1,40 @@ +package seedu.duke.hr; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; +public class CommandAddMember extends Command { + + private UserInput savedInput; + + @Override + public int validate(UserInput input) { + this.savedInput = input; + if (input.getCategory().equals("hr") && input.getCommand().equalsIgnoreCase("add")) { + if (input.getNumArgs() == 4) { + if ((input.getArg("n")!= null)&&(input.getArg("p")!= null)&&(input.getArg("e")!= null) + &&(input.getArg("r")!= null)) { + return ACCEPT; + } + } + return ARGUMENT_ERR; + } else { + return NO_MATCH; + } + } + + @Override + public String execute() { + int phone = Integer.parseInt(savedInput.getArg("p")); + Member m = new Member(savedInput.getArg("n"),phone, savedInput.getArg("e"), savedInput.getArg("r")); + MemberList.addToList(m); + String output = "Got it. I've added this member: \n" + m.toString() + "\n" + + "Now you have " + Member.numOfMembers + " member" + ((Member.numOfMembers == 1) ? "" : "s") + + " in the list.\n"; + return output; + } + + @Override + public String help() { + return ""; + } +} diff --git a/src/main/java/seedu/duke/hr/ExternalMember.java b/src/main/java/seedu/duke/hr/ExternalMember.java deleted file mode 100644 index 48772d6ca2..0000000000 --- a/src/main/java/seedu/duke/hr/ExternalMember.java +++ /dev/null @@ -1,22 +0,0 @@ -package seedu.duke.hr; - -/** - * unused in v1.0 - */ -public class ExternalMember extends Member { - public static int numOfExternalMembers = 0; - protected String organization; - - public ExternalMember(String name, int phone, String email){ - super(name, phone, email); - numOfMembers += 1; - } - - public void setOrganization (String orgName) { - organization = orgName; - } - - public String getOrganization() { - return this.organization; - } -} diff --git a/src/main/java/seedu/duke/hr/InternalMember.java b/src/main/java/seedu/duke/hr/InternalMember.java deleted file mode 100644 index 9682c7be49..0000000000 --- a/src/main/java/seedu/duke/hr/InternalMember.java +++ /dev/null @@ -1,25 +0,0 @@ -package seedu.duke.hr; - -/** - * unused in v1.0 - */ -public class InternalMember extends Member { - public static int numOfInternalMembers = 0; - protected String[] memberRoles; - - - public InternalMember(String name, int phone, String email) { - super(name, phone, email); - numOfMembers += 1; - } - - public void setMemberRole (String role) { - memberRoles[memberRoles.length] = role; - } - - public String[] getMemberRole() { - return this.memberRoles; - } - - -} diff --git a/src/main/java/seedu/duke/hr/Member.java b/src/main/java/seedu/duke/hr/Member.java index 84d5f08d77..c157ebf3f1 100644 --- a/src/main/java/seedu/duke/hr/Member.java +++ b/src/main/java/seedu/duke/hr/Member.java @@ -5,12 +5,13 @@ public class Member { protected String memberName; protected int memberPhone; protected String memberEmail; - protected String[] memberRoles; + protected String memberRole; - public Member(String name, int phone, String email){ + public Member(String name, int phone, String email, String role){ this.memberName = name; this.memberPhone = phone; this.memberEmail = email; + this.memberRole = role; numOfMembers += 1; } @@ -22,19 +23,15 @@ public String getMemberEmail() { return this.memberEmail; } - public void setMemberRole (String role) { - memberRoles[memberRoles.length] = role; - } - - public String[] getMemberRole() { - return this.memberRoles; + public String getMemberRole() { + return this.memberRole; } /** * Prints task data in the desired form to be printed for user interaction. * */ - public void printMember() { - System.out.format("name: %s |phone: %d |email: %s%n", this.memberName, this.getMemberPhone(), this.getMemberEmail()); + public String toString() { + return "name: "+ this.memberName + " |phone: "+ this.getMemberPhone()+ " |email: "+this.getMemberEmail()+ " |role: " + this.getMemberRole(); } } diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java index 65b20e99ed..b6d9b8c04d 100644 --- a/src/main/java/seedu/duke/hr/MemberList.java +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -1,108 +1,11 @@ package seedu.duke.hr; -import java.io.IOException; import java.util.ArrayList; public class MemberList { public static ArrayList members = new ArrayList<>(); - public MemberList() { - } - - /** - * Add member to the list of tasks. - * - * @param line user input. - */ - public static void addMember(String line) { - try { - String[] memberDescription = line.split("n/|p/|e/", 3); - Member d = new Member(memberDescription[0], Integer.parseInt(memberDescription[1]), memberDescription[2]); - addMemberToList(d); - } catch (StringIndexOutOfBoundsException | ArrayIndexOutOfBoundsException | IOException e) { - System.out.println(" OOPS!!! The description of a member is incomplete."); - } - } - - /** - * Add ToDo object to the list of tasks. - * - * @param m Member object to be added. - * @throws IOException if any in/output error occurs. - */ - public static void addMemberToList(Member m) throws IOException { + public static void addToList(Member m) { members.add(m); - - System.out.println(" " + "Got it. I've added this member: "); - - System.out.format(" "); - m.printMember(); - - System.out.format(" Now you have %d member%s in your list.%n", Member.numOfMembers, - (Member.numOfMembers == 1) ? "" : "s"); - } - - /** - * Delete object from the list of tasks, based on task index. - * - * @param line user input. - */ - public static void deleteTask(String line) { - try { - line = line.trim(); - int startOfTaskIndex = line.indexOf(' ') + 1; - int taskIndex = Integer.parseInt(line.substring(startOfTaskIndex)) - 1; - - printRemovingTaskMessage(); - System.out.format(" "); - members.get(taskIndex).printMember();; - members.remove(taskIndex); - - Member.numOfMembers--; - printTaskRemovedMessage(); - } catch (IndexOutOfBoundsException e) { - System.out.println(""); - printTaskNotExistMessage(); - } - } - - /** - * Prints the existing task list. - */ - public static void printList(ArrayList tasks) { - if (Member.numOfMembers==0) { - //EmptyListException - System.out.println(" Dude, the list is empty! o_O"); - } else { - System.out.println(" Here is the list of your tasks: "); - for (int i = 0; i < Member.numOfMembers; i++) { - int index = i+1; - System.out.format(" %d.", index); - members.get(i).printMember(); - } - } - } - - /** - * Prints the messages to show that the task the user referred to is invalid. - */ - public static void printTaskNotExistMessage() { - System.out.println(" OOPS!!! The member does not exist."); } - - /** - * Prints the messages to show that the task is successfully removed. - */ - public static void printTaskRemovedMessage() { - System.out.println(" Task removed successfully!"); - System.out.println(" Now you have " + Member.numOfMembers + " member" + (Member.numOfMembers>1?"s":"") + " in the list."); - } - - /** - * Prints the messages to show that the program is attempting to remove the task. - */ - public static void printRemovingTaskMessage() { - System.out.println(" Noted. I'll removed this member: "); - } - } diff --git a/src/main/java/seedu/duke/others/CommandHelp.java b/src/main/java/seedu/duke/others/CommandHelp.java index 4dbdb41ffe..39f82babb6 100644 --- a/src/main/java/seedu/duke/others/CommandHelp.java +++ b/src/main/java/seedu/duke/others/CommandHelp.java @@ -19,6 +19,7 @@ public int validate(UserInput input) { @Override public String help() { + return ""; } } From ed5fe5d564e53682480692d410aca83ef020a2fd Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sat, 10 Oct 2020 21:47:51 +0800 Subject: [PATCH 018/336] listMembers --- src/main/java/seedu/duke/backend/Ui.java | 2 ++ .../java/seedu/duke/hr/CommandViewMember.java | 29 +++++++++++++++++++ src/main/java/seedu/duke/hr/MemberList.java | 15 ++++++++++ .../java/seedu/duke/others/CommandHelp.java | 2 +- 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/main/java/seedu/duke/hr/CommandViewMember.java diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index d839d89ede..b8d77e912a 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -2,6 +2,7 @@ import seedu.duke.Command; import seedu.duke.hr.CommandAddMember; +import seedu.duke.hr.CommandViewMember; import seedu.duke.others.CommandBye; import seedu.duke.others.CommandHelp; @@ -112,5 +113,6 @@ private static void initializeCommands() { commandList.add(new CommandHelp()); commandList.add(new CommandBye()); commandList.add(new CommandAddMember()); + commandList.add(new CommandViewMember()); } } diff --git a/src/main/java/seedu/duke/hr/CommandViewMember.java b/src/main/java/seedu/duke/hr/CommandViewMember.java new file mode 100644 index 0000000000..0cf732497f --- /dev/null +++ b/src/main/java/seedu/duke/hr/CommandViewMember.java @@ -0,0 +1,29 @@ +package seedu.duke.hr; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; +public class CommandViewMember extends Command { + + private UserInput savedInput; + + @Override + public int validate(UserInput input) { + this.savedInput = input; + if (input.getCategory().equals("hr") && input.getCommand().equalsIgnoreCase("list")) { + return ACCEPT; + } else { + return NO_MATCH; + } + } + + @Override + public String execute() { + String output = MemberList.listMembers(); + return output; + } + + @Override + public String help() { + return ""; + } +} diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java index b6d9b8c04d..a7e9543593 100644 --- a/src/main/java/seedu/duke/hr/MemberList.java +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -8,4 +8,19 @@ public class MemberList { public static void addToList(Member m) { members.add(m); } + + public static String listMembers() { + String output; + if (Member.numOfMembers==0) { + output = "Dude, the member list is empty! o_O"; + } else { + output = "Here is the list of members in your CCA: \n"; + for (int i = 0; i < Member.numOfMembers; i++) { + int index = i+1; + output = output.concat(index + "."); + output = output.concat(members.get(i).toString() + "\n"); + } + } + return output; + } } diff --git a/src/main/java/seedu/duke/others/CommandHelp.java b/src/main/java/seedu/duke/others/CommandHelp.java index 39f82babb6..7fa95b4a20 100644 --- a/src/main/java/seedu/duke/others/CommandHelp.java +++ b/src/main/java/seedu/duke/others/CommandHelp.java @@ -6,7 +6,7 @@ public class CommandHelp extends Command { @Override public String execute() { - return "Commands: hr add, hr delete, events add, events delete, finance add, finance delete, help, bye"; + return "Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, help, bye"; } public int validate(UserInput input) { From 143445d7f36b6b1436aa3d421a1480174dec6547 Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sun, 11 Oct 2020 02:06:01 +0800 Subject: [PATCH 019/336] delete member --- src/main/java/seedu/duke/backend/Ui.java | 2 ++ .../java/seedu/duke/hr/CommandDelMember.java | 35 +++++++++++++++++++ src/main/java/seedu/duke/hr/MemberList.java | 15 ++++++++ 3 files changed, 52 insertions(+) create mode 100644 src/main/java/seedu/duke/hr/CommandDelMember.java diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index b8d77e912a..fd834c74d3 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -2,6 +2,7 @@ import seedu.duke.Command; import seedu.duke.hr.CommandAddMember; +import seedu.duke.hr.CommandDelMember; import seedu.duke.hr.CommandViewMember; import seedu.duke.others.CommandBye; import seedu.duke.others.CommandHelp; @@ -114,5 +115,6 @@ private static void initializeCommands() { commandList.add(new CommandBye()); commandList.add(new CommandAddMember()); commandList.add(new CommandViewMember()); + commandList.add(new CommandDelMember()); } } diff --git a/src/main/java/seedu/duke/hr/CommandDelMember.java b/src/main/java/seedu/duke/hr/CommandDelMember.java new file mode 100644 index 0000000000..c3472cd578 --- /dev/null +++ b/src/main/java/seedu/duke/hr/CommandDelMember.java @@ -0,0 +1,35 @@ +package seedu.duke.hr; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; +public class CommandDelMember extends Command { + + private UserInput savedInput; + + @Override + public int validate(UserInput input) { + this.savedInput = input; + if (input.getCategory().equals("hr") && input.getCommand().equalsIgnoreCase("delete")) { + if (input.getNumArgs() == 1) { + if ((input.getArg("")!= null)) { + return ACCEPT; + } + } + return ARGUMENT_ERR; + } else { + return NO_MATCH; + } + } + + @Override + public String execute() { + int index = Integer.parseInt(savedInput.getArg("")); + String output = MemberList.deleteFromList(index-1); + return output; + } + + @Override + public String help() { + return ""; + } +} \ No newline at end of file diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java index a7e9543593..83c936f560 100644 --- a/src/main/java/seedu/duke/hr/MemberList.java +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -23,4 +23,19 @@ public static String listMembers() { } return output; } + + public static String deleteFromList(int index) { + String output; + try { + output = "Noted. I'll remove this member: \n"; + output = output.concat(members.get(index).toString() + "\n"); + members.remove(index); + Member.numOfMembers--; + output = output.concat("Now you have " + Member.numOfMembers + " member"); + output = output.concat(((Member.numOfMembers > 1)?"s":"") + " in the list.\n"); + } catch (IndexOutOfBoundsException e) { + output = "OOPS!!! The member does not exist.\n"; + } + return output; + } } From 2c409b7dd9916c9e84e752afad6aaf4b812c790b Mon Sep 17 00:00:00 2001 From: John Date: Sun, 11 Oct 2020 13:45:43 +0800 Subject: [PATCH 020/336] Add Exception Classes Add exception classes to fix a bug when a command fails due to invalid arguments. This new method also provides better extensibility of code with dedicated handling routines for each type of command result. --- .../java/seedu/duke/DukeArgumentException.java | 4 ++++ src/main/java/seedu/duke/DukeException.java | 4 ++++ .../java/seedu/duke/DukeNoMatchException.java | 4 ++++ src/main/java/seedu/duke/backend/Ui.java | 16 ++++++++++------ 4 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 src/main/java/seedu/duke/DukeArgumentException.java create mode 100644 src/main/java/seedu/duke/DukeException.java create mode 100644 src/main/java/seedu/duke/DukeNoMatchException.java diff --git a/src/main/java/seedu/duke/DukeArgumentException.java b/src/main/java/seedu/duke/DukeArgumentException.java new file mode 100644 index 0000000000..461043fada --- /dev/null +++ b/src/main/java/seedu/duke/DukeArgumentException.java @@ -0,0 +1,4 @@ +package seedu.duke; + +public class DukeArgumentException extends DukeException{ +} diff --git a/src/main/java/seedu/duke/DukeException.java b/src/main/java/seedu/duke/DukeException.java new file mode 100644 index 0000000000..e324a92b11 --- /dev/null +++ b/src/main/java/seedu/duke/DukeException.java @@ -0,0 +1,4 @@ +package seedu.duke; + +public class DukeException extends Exception { +} diff --git a/src/main/java/seedu/duke/DukeNoMatchException.java b/src/main/java/seedu/duke/DukeNoMatchException.java new file mode 100644 index 0000000000..cafa3907d2 --- /dev/null +++ b/src/main/java/seedu/duke/DukeNoMatchException.java @@ -0,0 +1,4 @@ +package seedu.duke; + +public class DukeNoMatchException extends DukeException{ +} diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index fab89486cc..6c77bbb0a6 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -1,6 +1,8 @@ package seedu.duke.backend; import seedu.duke.Command; +import seedu.duke.DukeArgumentException; +import seedu.duke.DukeNoMatchException; import seedu.duke.others.CommandBye; import seedu.duke.others.CommandHelp; @@ -27,25 +29,27 @@ public void run() { System.out.println("Command: "+userInput.getCommand()); System.out.println("Num Args: "+userInput.getNumArgs()); System.out.println("Args: "+userInput.getArgs());*/ - Command cmd = findCommand(userInput); - if (cmd != null) { + try { + Command cmd = findCommand(userInput); printOutput(cmd.execute()); - } else { + } catch (DukeArgumentException ae) { + // Placeholder if additional routine is required when user enters incorrect parameters + } catch (DukeNoMatchException ne){ printOutput("No such command. Try 'help' for a list of commands."); } } - public Command findCommand(UserInput ui) { + public Command findCommand(UserInput ui) throws DukeArgumentException, DukeNoMatchException { for (Command c : commandList) { int result = c.validate(ui); if (result == Command.ARGUMENT_ERR) { printError(c.help()); - return null; + throw new DukeArgumentException(); } else if (result == Command.ACCEPT) { return c; } } - return null; + throw new DukeNoMatchException(); } /** From 2528570daf1050ad5424d05ef96fb33c8e22ce2c Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sun, 11 Oct 2020 14:10:39 +0800 Subject: [PATCH 021/336] Debugged and add in comments --- .../java/seedu/duke/hr/CommandAddMember.java | 11 +++++-- .../java/seedu/duke/hr/CommandDelMember.java | 15 ++++++++-- .../java/seedu/duke/hr/CommandViewMember.java | 7 ++++- src/main/java/seedu/duke/hr/MemberList.java | 29 +++++++++++++++++++ 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/src/main/java/seedu/duke/hr/CommandAddMember.java b/src/main/java/seedu/duke/hr/CommandAddMember.java index a0f9666b5a..c999d64fcc 100644 --- a/src/main/java/seedu/duke/hr/CommandAddMember.java +++ b/src/main/java/seedu/duke/hr/CommandAddMember.java @@ -2,6 +2,12 @@ import seedu.duke.Command; import seedu.duke.backend.UserInput; +import static seedu.duke.hr.MemberList.isInteger; + +/** + * Represents add member command. + */ + public class CommandAddMember extends Command { private UserInput savedInput; @@ -12,7 +18,7 @@ public int validate(UserInput input) { if (input.getCategory().equals("hr") && input.getCommand().equalsIgnoreCase("add")) { if (input.getNumArgs() == 4) { if ((input.getArg("n")!= null)&&(input.getArg("p")!= null)&&(input.getArg("e")!= null) - &&(input.getArg("r")!= null)) { + &&(input.getArg("r")!= null) && isInteger(input.getArg("p"))) { return ACCEPT; } } @@ -35,6 +41,7 @@ public String execute() { @Override public String help() { - return ""; + + return "You can use 'hr add' command this way:\n" + "hr add /n NAME /p PHONE_NUMBER (INTEGER) /e EMAIL /ROLE\n"; } } diff --git a/src/main/java/seedu/duke/hr/CommandDelMember.java b/src/main/java/seedu/duke/hr/CommandDelMember.java index c3472cd578..5b5ddffa61 100644 --- a/src/main/java/seedu/duke/hr/CommandDelMember.java +++ b/src/main/java/seedu/duke/hr/CommandDelMember.java @@ -2,16 +2,24 @@ import seedu.duke.Command; import seedu.duke.backend.UserInput; + +import static seedu.duke.hr.MemberList.isInteger; + +/** + * Represents delete member command. + */ public class CommandDelMember extends Command { private UserInput savedInput; + private int index; @Override public int validate(UserInput input) { this.savedInput = input; if (input.getCategory().equals("hr") && input.getCommand().equalsIgnoreCase("delete")) { if (input.getNumArgs() == 1) { - if ((input.getArg("")!= null)) { + if ((input.getArg("")!= null) && isInteger(input.getArg(""))) { + return ACCEPT; } } @@ -23,13 +31,14 @@ public int validate(UserInput input) { @Override public String execute() { - int index = Integer.parseInt(savedInput.getArg("")); + index = Integer.parseInt(savedInput.getArg("")); String output = MemberList.deleteFromList(index-1); return output; } @Override public String help() { - return ""; + return "You can use 'hr delete' command this way:\n" + "hr delete MEMBER_INDEX (INTEGER)\n"; } + } \ No newline at end of file diff --git a/src/main/java/seedu/duke/hr/CommandViewMember.java b/src/main/java/seedu/duke/hr/CommandViewMember.java index 0cf732497f..3e2a72ddc3 100644 --- a/src/main/java/seedu/duke/hr/CommandViewMember.java +++ b/src/main/java/seedu/duke/hr/CommandViewMember.java @@ -2,6 +2,10 @@ import seedu.duke.Command; import seedu.duke.backend.UserInput; + +/** + * Represents view member command. + */ public class CommandViewMember extends Command { private UserInput savedInput; @@ -24,6 +28,7 @@ public String execute() { @Override public String help() { - return ""; + + return "You can use 'hr list' command this way:\n" + "hr list\n"; } } diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java index 83c936f560..4731e1f96e 100644 --- a/src/main/java/seedu/duke/hr/MemberList.java +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -5,10 +5,19 @@ public class MemberList { public static ArrayList members = new ArrayList<>(); + /** + * Adds member to the arraylist. + * @param m member to be added. + */ public static void addToList(Member m) { + members.add(m); } + /** + * Returns the list of members. + * @return output error message or member list + */ public static String listMembers() { String output; if (Member.numOfMembers==0) { @@ -24,6 +33,11 @@ public static String listMembers() { return output; } + /** + * Deletes the member from the arraylist. + * @param index index of member to be deleted. + * @return output error message or info of deleted member. + */ public static String deleteFromList(int index) { String output; try { @@ -31,6 +45,7 @@ public static String deleteFromList(int index) { output = output.concat(members.get(index).toString() + "\n"); members.remove(index); Member.numOfMembers--; + System.out.println("numOfMember = " + Member.numOfMembers + "\n"); output = output.concat("Now you have " + Member.numOfMembers + " member"); output = output.concat(((Member.numOfMembers > 1)?"s":"") + " in the list.\n"); } catch (IndexOutOfBoundsException e) { @@ -38,4 +53,18 @@ public static String deleteFromList(int index) { } return output; } + + /** + * Checks whether input can be parsed into an integer. + * @param s input to be checked + * @return true if input can be parsed as an integer, false if input cannot be parsed as an integer. + */ + public static boolean isInteger(String s) { + try{ + int index = Integer.parseInt(s); + return true; + }catch (NumberFormatException ex) { + return false; + } + } } From 1e52ee8556bb527dc8d453780fd26f4f7e90748c Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sun, 11 Oct 2020 14:29:16 +0800 Subject: [PATCH 022/336] Edited EXPECT.txt and input.txt --- src/main/java/seedu/duke/hr/MemberList.java | 1 - text-ui-test/EXPECTED.TXT | 16 +++++++++++++++- text-ui-test/input.txt | 3 +++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java index 4731e1f96e..514483a813 100644 --- a/src/main/java/seedu/duke/hr/MemberList.java +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -45,7 +45,6 @@ public static String deleteFromList(int index) { output = output.concat(members.get(index).toString() + "\n"); members.remove(index); Member.numOfMembers--; - System.out.println("numOfMember = " + Member.numOfMembers + "\n"); output = output.concat("Now you have " + Member.numOfMembers + " member"); output = output.concat(((Member.numOfMembers > 1)?"s":"") + " in the list.\n"); } catch (IndexOutOfBoundsException e) { diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index e2bafcc1c0..c5fadbbb73 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -9,7 +9,21 @@ ____________________________________________________________ No such command. Try 'help' for a list of commands. ____________________________________________________________ ____________________________________________________________ - Commands: hr add, hr delete, events add, events delete, finance add, finance delete, help, bye + Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, help, bye +____________________________________________________________ +____________________________________________________________ + Got it. I've added this member: + name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member + Now you have 1 member in the list. +____________________________________________________________ +____________________________________________________________ + Here is the list of members in your CCA: + 1.name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member +____________________________________________________________ +____________________________________________________________ + Noted. I'll remove this member: + name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member + Now you have 0 member in the list. ____________________________________________________________ ____________________________________________________________ See you next time! diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 51109742ef..b610df2749 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1,3 +1,6 @@ James Gosling help +hr add /n James Gosling /p 11111111 /e 111111@gmail.com /r member +hr list +hr delete 1 bye \ No newline at end of file From 1d2c8121b3894f371c3bc42235b2ea293f456d12 Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sun, 11 Oct 2020 14:37:10 +0800 Subject: [PATCH 023/336] Improved style. --- src/main/java/seedu/duke/hr/CommandAddMember.java | 6 +++--- src/main/java/seedu/duke/hr/CommandDelMember.java | 2 +- src/main/java/seedu/duke/hr/Member.java | 8 ++++++-- src/main/java/seedu/duke/hr/MemberList.java | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/seedu/duke/hr/CommandAddMember.java b/src/main/java/seedu/duke/hr/CommandAddMember.java index c999d64fcc..0dcd34af5b 100644 --- a/src/main/java/seedu/duke/hr/CommandAddMember.java +++ b/src/main/java/seedu/duke/hr/CommandAddMember.java @@ -17,8 +17,8 @@ public int validate(UserInput input) { this.savedInput = input; if (input.getCategory().equals("hr") && input.getCommand().equalsIgnoreCase("add")) { if (input.getNumArgs() == 4) { - if ((input.getArg("n")!= null)&&(input.getArg("p")!= null)&&(input.getArg("e")!= null) - &&(input.getArg("r")!= null) && isInteger(input.getArg("p"))) { + if ((input.getArg("n")!= null) && (input.getArg("p") != null) && (input.getArg("e") != null) + && (input.getArg("r") != null) && isInteger(input.getArg("p"))) { return ACCEPT; } } @@ -31,7 +31,7 @@ public int validate(UserInput input) { @Override public String execute() { int phone = Integer.parseInt(savedInput.getArg("p")); - Member m = new Member(savedInput.getArg("n"),phone, savedInput.getArg("e"), savedInput.getArg("r")); + Member m = new Member(savedInput.getArg("n"), phone, savedInput.getArg("e"), savedInput.getArg("r")); MemberList.addToList(m); String output = "Got it. I've added this member: \n" + m.toString() + "\n" + "Now you have " + Member.numOfMembers + " member" + ((Member.numOfMembers == 1) ? "" : "s") diff --git a/src/main/java/seedu/duke/hr/CommandDelMember.java b/src/main/java/seedu/duke/hr/CommandDelMember.java index 5b5ddffa61..70d66e8bff 100644 --- a/src/main/java/seedu/duke/hr/CommandDelMember.java +++ b/src/main/java/seedu/duke/hr/CommandDelMember.java @@ -18,7 +18,7 @@ public int validate(UserInput input) { this.savedInput = input; if (input.getCategory().equals("hr") && input.getCommand().equalsIgnoreCase("delete")) { if (input.getNumArgs() == 1) { - if ((input.getArg("")!= null) && isInteger(input.getArg(""))) { + if ((input.getArg("") != null) && isInteger(input.getArg(""))) { return ACCEPT; } diff --git a/src/main/java/seedu/duke/hr/Member.java b/src/main/java/seedu/duke/hr/Member.java index c157ebf3f1..cf5c774e7c 100644 --- a/src/main/java/seedu/duke/hr/Member.java +++ b/src/main/java/seedu/duke/hr/Member.java @@ -7,7 +7,7 @@ public class Member { protected String memberEmail; protected String memberRole; - public Member(String name, int phone, String email, String role){ + public Member(String name, int phone, String email, String role) { this.memberName = name; this.memberPhone = phone; this.memberEmail = email; @@ -16,14 +16,17 @@ public Member(String name, int phone, String email, String role){ } public int getMemberPhone() { + return this.memberPhone; } public String getMemberEmail() { + return this.memberEmail; } public String getMemberRole() { + return this.memberRole; } @@ -31,7 +34,8 @@ public String getMemberRole() { * Prints task data in the desired form to be printed for user interaction. * */ public String toString() { - return "name: "+ this.memberName + " |phone: "+ this.getMemberPhone()+ " |email: "+this.getMemberEmail()+ " |role: " + this.getMemberRole(); + return "name: " + this.memberName + " |phone: " + this.getMemberPhone() + " |email: " + this.getMemberEmail() + + " |role: " + this.getMemberRole(); } } diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java index 514483a813..ec866138f5 100644 --- a/src/main/java/seedu/duke/hr/MemberList.java +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -25,7 +25,7 @@ public static String listMembers() { } else { output = "Here is the list of members in your CCA: \n"; for (int i = 0; i < Member.numOfMembers; i++) { - int index = i+1; + int index = i + 1; output = output.concat(index + "."); output = output.concat(members.get(i).toString() + "\n"); } @@ -62,7 +62,7 @@ public static boolean isInteger(String s) { try{ int index = Integer.parseInt(s); return true; - }catch (NumberFormatException ex) { + }catch (NumberFormatException e) { return false; } } From 1e2e55f03e582b96c3fe410d11600ddd558aa7dd Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sun, 11 Oct 2020 14:42:28 +0800 Subject: [PATCH 024/336] checkstyle --- src/main/java/seedu/duke/hr/CommandAddMember.java | 2 +- src/main/java/seedu/duke/hr/CommandDelMember.java | 2 +- src/main/java/seedu/duke/hr/Member.java | 4 ++-- src/main/java/seedu/duke/hr/MemberList.java | 8 ++++---- src/main/java/seedu/duke/others/CommandHelp.java | 3 ++- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/seedu/duke/hr/CommandAddMember.java b/src/main/java/seedu/duke/hr/CommandAddMember.java index 0dcd34af5b..2ef4e3e17d 100644 --- a/src/main/java/seedu/duke/hr/CommandAddMember.java +++ b/src/main/java/seedu/duke/hr/CommandAddMember.java @@ -17,7 +17,7 @@ public int validate(UserInput input) { this.savedInput = input; if (input.getCategory().equals("hr") && input.getCommand().equalsIgnoreCase("add")) { if (input.getNumArgs() == 4) { - if ((input.getArg("n")!= null) && (input.getArg("p") != null) && (input.getArg("e") != null) + if ((input.getArg("n") != null) && (input.getArg("p") != null) && (input.getArg("e") != null) && (input.getArg("r") != null) && isInteger(input.getArg("p"))) { return ACCEPT; } diff --git a/src/main/java/seedu/duke/hr/CommandDelMember.java b/src/main/java/seedu/duke/hr/CommandDelMember.java index 70d66e8bff..830e8c484a 100644 --- a/src/main/java/seedu/duke/hr/CommandDelMember.java +++ b/src/main/java/seedu/duke/hr/CommandDelMember.java @@ -32,7 +32,7 @@ public int validate(UserInput input) { @Override public String execute() { index = Integer.parseInt(savedInput.getArg("")); - String output = MemberList.deleteFromList(index-1); + String output = MemberList.deleteFromList(index - 1); return output; } diff --git a/src/main/java/seedu/duke/hr/Member.java b/src/main/java/seedu/duke/hr/Member.java index cf5c774e7c..d2a1b66d11 100644 --- a/src/main/java/seedu/duke/hr/Member.java +++ b/src/main/java/seedu/duke/hr/Member.java @@ -34,8 +34,8 @@ public String getMemberRole() { * Prints task data in the desired form to be printed for user interaction. * */ public String toString() { - return "name: " + this.memberName + " |phone: " + this.getMemberPhone() + " |email: " + this.getMemberEmail() + - " |role: " + this.getMemberRole(); + return "name: " + this.memberName + " |phone: " + this.getMemberPhone() + " |email: " + this.getMemberEmail() + + " |role: " + this.getMemberRole(); } } diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java index ec866138f5..16f9add47c 100644 --- a/src/main/java/seedu/duke/hr/MemberList.java +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -20,7 +20,7 @@ public static void addToList(Member m) { */ public static String listMembers() { String output; - if (Member.numOfMembers==0) { + if (Member.numOfMembers == 0) { output = "Dude, the member list is empty! o_O"; } else { output = "Here is the list of members in your CCA: \n"; @@ -46,7 +46,7 @@ public static String deleteFromList(int index) { members.remove(index); Member.numOfMembers--; output = output.concat("Now you have " + Member.numOfMembers + " member"); - output = output.concat(((Member.numOfMembers > 1)?"s":"") + " in the list.\n"); + output = output.concat(((Member.numOfMembers > 1) ? "s" : "") + " in the list.\n"); } catch (IndexOutOfBoundsException e) { output = "OOPS!!! The member does not exist.\n"; } @@ -59,10 +59,10 @@ public static String deleteFromList(int index) { * @return true if input can be parsed as an integer, false if input cannot be parsed as an integer. */ public static boolean isInteger(String s) { - try{ + try { int index = Integer.parseInt(s); return true; - }catch (NumberFormatException e) { + } catch (NumberFormatException e) { return false; } } diff --git a/src/main/java/seedu/duke/others/CommandHelp.java b/src/main/java/seedu/duke/others/CommandHelp.java index 7fa95b4a20..1ce4e5a4cf 100644 --- a/src/main/java/seedu/duke/others/CommandHelp.java +++ b/src/main/java/seedu/duke/others/CommandHelp.java @@ -6,7 +6,8 @@ public class CommandHelp extends Command { @Override public String execute() { - return "Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, help, bye"; + return "Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, " + + "help, bye"; } public int validate(UserInput input) { From aa06f33647c062e1f5e42b79956fe464e3e274d0 Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sun, 11 Oct 2020 14:45:01 +0800 Subject: [PATCH 025/336] checkstyle3 --- src/main/java/seedu/duke/others/CommandHelp.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/duke/others/CommandHelp.java b/src/main/java/seedu/duke/others/CommandHelp.java index 1ce4e5a4cf..b9da640326 100644 --- a/src/main/java/seedu/duke/others/CommandHelp.java +++ b/src/main/java/seedu/duke/others/CommandHelp.java @@ -6,8 +6,8 @@ public class CommandHelp extends Command { @Override public String execute() { - return "Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, " + - "help, bye"; + return "Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, " + + "help, bye"; } public int validate(UserInput input) { From a2314944b804d13739ebc8ba9a71ca440ee907ab Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sun, 11 Oct 2020 15:02:44 +0800 Subject: [PATCH 026/336] checkstyle4 --- src/main/java/seedu/duke/others/CommandHelp.java | 2 +- text-ui-test/EXPECTED.TXT | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/duke/others/CommandHelp.java b/src/main/java/seedu/duke/others/CommandHelp.java index b9da640326..82e144a816 100644 --- a/src/main/java/seedu/duke/others/CommandHelp.java +++ b/src/main/java/seedu/duke/others/CommandHelp.java @@ -6,7 +6,7 @@ public class CommandHelp extends Command { @Override public String execute() { - return "Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, " + return "Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, " + "help, bye"; } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index c5fadbbb73..07df049b7a 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -21,7 +21,7 @@ ____________________________________________________________ 1.name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member ____________________________________________________________ ____________________________________________________________ - Noted. I'll remove this member: + Noted. I'll remove this member: name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member Now you have 0 member in the list. ____________________________________________________________ From 732d9264668d2d9b6bb91a339aaa1d5aab4d2f2e Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sun, 11 Oct 2020 15:04:21 +0800 Subject: [PATCH 027/336] checkstyle5 --- text-ui-test/EXPECTED.TXT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 07df049b7a..c5fadbbb73 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -21,7 +21,7 @@ ____________________________________________________________ 1.name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member ____________________________________________________________ ____________________________________________________________ - Noted. I'll remove this member: + Noted. I'll remove this member: name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member Now you have 0 member in the list. ____________________________________________________________ From 54dea12f78aeaffc7a3f6f30950614872d891cc9 Mon Sep 17 00:00:00 2001 From: YeYutong Date: Sun, 11 Oct 2020 15:09:25 +0800 Subject: [PATCH 028/336] checkstyle6 --- src/main/java/seedu/duke/hr/CommandAddMember.java | 2 +- src/main/java/seedu/duke/hr/MemberList.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/duke/hr/CommandAddMember.java b/src/main/java/seedu/duke/hr/CommandAddMember.java index 2ef4e3e17d..ad96e760c0 100644 --- a/src/main/java/seedu/duke/hr/CommandAddMember.java +++ b/src/main/java/seedu/duke/hr/CommandAddMember.java @@ -33,7 +33,7 @@ public String execute() { int phone = Integer.parseInt(savedInput.getArg("p")); Member m = new Member(savedInput.getArg("n"), phone, savedInput.getArg("e"), savedInput.getArg("r")); MemberList.addToList(m); - String output = "Got it. I've added this member: \n" + m.toString() + "\n" + String output = "Got it. I've added this member:\n" + m.toString() + "\n" + "Now you have " + Member.numOfMembers + " member" + ((Member.numOfMembers == 1) ? "" : "s") + " in the list.\n"; return output; diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java index 16f9add47c..eb3a173c7a 100644 --- a/src/main/java/seedu/duke/hr/MemberList.java +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -23,7 +23,7 @@ public static String listMembers() { if (Member.numOfMembers == 0) { output = "Dude, the member list is empty! o_O"; } else { - output = "Here is the list of members in your CCA: \n"; + output = "Here is the list of members in your CCA:\n"; for (int i = 0; i < Member.numOfMembers; i++) { int index = i + 1; output = output.concat(index + "."); @@ -41,7 +41,7 @@ public static String listMembers() { public static String deleteFromList(int index) { String output; try { - output = "Noted. I'll remove this member: \n"; + output = "Noted. I'll remove this member:\n"; output = output.concat(members.get(index).toString() + "\n"); members.remove(index); Member.numOfMembers--; From 56385dabedff149433e748d018c2a730c655c84f Mon Sep 17 00:00:00 2001 From: John Date: Sun, 11 Oct 2020 15:38:11 +0800 Subject: [PATCH 029/336] Resolve merge conflict --- src/main/java/seedu/duke/backend/Ui.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index 2c78232639..073ce51f90 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -1,14 +1,11 @@ package seedu.duke.backend; import seedu.duke.Command; -<<<<<<< HEAD import seedu.duke.DukeArgumentException; import seedu.duke.DukeNoMatchException; -======= import seedu.duke.hr.CommandAddMember; import seedu.duke.hr.CommandDelMember; import seedu.duke.hr.CommandViewMember; ->>>>>>> 205e60ba9777d030247a2d171f8f08398c97e4f3 import seedu.duke.others.CommandBye; import seedu.duke.others.CommandHelp; From 240f1ba3a43d82c47041977debaf94f5bf03d54e Mon Sep 17 00:00:00 2001 From: John Date: Sun, 11 Oct 2020 15:46:58 +0800 Subject: [PATCH 030/336] Resolve merge conflict --- src/main/java/seedu/duke/backend/Ui.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index 073ce51f90..424ec4bb4a 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -37,8 +37,10 @@ public void run() { printOutput(cmd.execute()); } catch (DukeArgumentException ae) { // Placeholder if additional routine is required when user enters incorrect parameters - } catch (DukeNoMatchException ne){ + } catch (DukeNoMatchException ne) { printOutput("No such command. Try 'help' for a list of commands."); + } catch (Exception e) { + printOutput("Command execution failed with an unhandled error!", true); } } From 9b9f08abb8aa08e2774084980067cba7c9c668be Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Sun, 11 Oct 2020 19:16:01 +0800 Subject: [PATCH 031/336] Done Version 1. Added add,delete and list for event package. --- .../seedu/duke/Event/CommandEventAdd.java | 28 +++++---- .../seedu/duke/Event/CommandEventDel.java | 30 +++++----- .../seedu/duke/Event/CommandEventList.java | 29 ++++++++++ src/main/java/seedu/duke/Event/Event.java | 33 +++++++++++ src/main/java/seedu/duke/Event/EventList.java | 58 +++++++++++++++++++ 5 files changed, 154 insertions(+), 24 deletions(-) create mode 100644 src/main/java/seedu/duke/Event/CommandEventList.java create mode 100644 src/main/java/seedu/duke/Event/Event.java create mode 100644 src/main/java/seedu/duke/Event/EventList.java diff --git a/src/main/java/seedu/duke/Event/CommandEventAdd.java b/src/main/java/seedu/duke/Event/CommandEventAdd.java index 522cad70a8..53fa91c6ac 100644 --- a/src/main/java/seedu/duke/Event/CommandEventAdd.java +++ b/src/main/java/seedu/duke/Event/CommandEventAdd.java @@ -3,27 +3,33 @@ import seedu.duke.Command; import seedu.duke.backend.UserInput; -public class CommandEventAdd extends Command{ - UserInput userInput; - //EventClass event; - //public static ArrayList tasks = new ArrayList<>(); - +public class CommandEventAdd extends Command{ + private UserInput userInput; @Override public String execute() { - // event.addEvent(); - return null; + Event m = new Event(userInput.getArg("n"), userInput.getArg("d"), userInput.getArg("t")); + String output = EventList.addEvent(m); + return output; } - + @Override public int validate(UserInput ui) { + userInput = ui; if (userInput.getCategory().equals("event") && userInput.getCommand().equalsIgnoreCase("addEvent")) { - userInput = ui; - return ACCEPT; - } else return NO_MATCH; + if (ui.getNumArgs() == 3) { + if ((ui.getArg("n") != null) && (ui.getArg("d") != null) && (ui.getArg("t") != null)){ + return ACCEPT; + } + } + return ARGUMENT_ERR; + } else { + return NO_MATCH; + } } + @Override public String help() { return null; diff --git a/src/main/java/seedu/duke/Event/CommandEventDel.java b/src/main/java/seedu/duke/Event/CommandEventDel.java index 06b7029e18..82bfe045ad 100644 --- a/src/main/java/seedu/duke/Event/CommandEventDel.java +++ b/src/main/java/seedu/duke/Event/CommandEventDel.java @@ -4,18 +4,14 @@ import seedu.duke.backend.UserInput; public class CommandEventDel extends Command { - UserInput userInput; - //EventClass event; + private UserInput userInput; + int index; - // public CommandEventDel(EventClass ev) { - // event = ev; - // } @Override public String execute() { - // String input = userInput.getArg(""); - //int index = Integer.parseInt(input.trim()); - // event.delEvent(index); - return null; + index = Integer.parseInt(userInput.getArg("")); + String output = EventList.deleteEvent(index-1); + return output; } @Override @@ -23,11 +19,19 @@ public String help() { return null; } + @Override public int validate(UserInput ui) { - if (userInput.getCategory().equals("event") && userInput.getCommand().equalsIgnoreCase("delEvent")) { - userInput = ui; - return ACCEPT; - } else return NO_MATCH; + userInput = ui; + if (ui.getCategory().equals("event") && ui.getCommand().equalsIgnoreCase("delEvent")) { + if (ui.getNumArgs() == 1) { + if ((ui.getArg("") != null)){ + return ACCEPT; + } + } + return ARGUMENT_ERR; + } else { + return NO_MATCH; + } } } diff --git a/src/main/java/seedu/duke/Event/CommandEventList.java b/src/main/java/seedu/duke/Event/CommandEventList.java new file mode 100644 index 0000000000..63c56aca97 --- /dev/null +++ b/src/main/java/seedu/duke/Event/CommandEventList.java @@ -0,0 +1,29 @@ +package seedu.duke.Event; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandEventList extends Command { + private UserInput userInput; + + @Override + public String execute() { + String output = EventList.printEventList(); + return output; + } + + @Override + public int validate(UserInput input) { + this.userInput = input; + if (input.getCategory().equals("event") && input.getCommand().equalsIgnoreCase("listEvent")) { + return ACCEPT; + } else { + return NO_MATCH; + } + } + + @Override + public String help() { + return null; + } +} diff --git a/src/main/java/seedu/duke/Event/Event.java b/src/main/java/seedu/duke/Event/Event.java new file mode 100644 index 0000000000..9060245e55 --- /dev/null +++ b/src/main/java/seedu/duke/Event/Event.java @@ -0,0 +1,33 @@ +package seedu.duke.Event; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +public class Event { + public String eventName; + public String eventTime; + protected LocalDate date; + + + public Event(String name, String Date, String time){ + this.eventName = name; + this.eventTime = time; + this.setEventDate(LocalDate.parse(Date)); + } + + + public void setEventDate(LocalDate date) { + this.date = date; + } + + + /** + * Returns the string format of the event. + * + * @return String format of event. + */ + public String printEvent() { + return "Event Name: " + this.eventName + "\nDate: " + date.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + "\nTime: " + this.eventTime +"\n"; + } + +} diff --git a/src/main/java/seedu/duke/Event/EventList.java b/src/main/java/seedu/duke/Event/EventList.java new file mode 100644 index 0000000000..f5d5712738 --- /dev/null +++ b/src/main/java/seedu/duke/Event/EventList.java @@ -0,0 +1,58 @@ +package seedu.duke.Event; + + +import java.util.ArrayList; + +public class EventList { + public static ArrayList events = new ArrayList<>(); + + /** + * Adds member to the arraylist. + * @param event event to be added in the list. + */ + public static String addEvent(Event event) { + String userOutput; + events.add(event); + userOutput = "Got it. I've added this Event:\n" + event.printEvent() + "\n" + + "Now you have " + events.size() + " events in the list.\n"; + + return userOutput; + } + + /** + * + * @param index index to be deleted from list + * + */ + public static String deleteEvent(int index) { + String userOutput; + try { + userOutput = "I'll remove this Event:\n"; + userOutput = userOutput.concat(events.get(index).printEvent() + "\n"); + events.remove(index); + userOutput = userOutput.concat("Now you have " + events.size() + " event in the list"); + } catch (IndexOutOfBoundsException e) { + userOutput = "OOPS!!! The event does not exist.Please try our help command!\n"; + } + return userOutput; + } + + public static String printEventList() { + String userOutput; + if (events.size() == 0) { + userOutput = ("Oops! The event list is empty!"); + } else { + userOutput = "Here are the current events in your list:\n"; + + for (Event event : events) { + userOutput = userOutput.concat(events.indexOf(event) + 1 + "."); + userOutput = userOutput.concat(event.printEvent()); + } + } + return userOutput; + } + + +} + + From 8ef83bafe2bd170586bae79c32f1d568f4521d93 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Sun, 11 Oct 2020 19:29:44 +0800 Subject: [PATCH 032/336] updated code --- src/main/java/seedu/duke/backend/Ui.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index efe6f39119..4d8ba74090 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -3,6 +3,7 @@ import seedu.duke.Command; import seedu.duke.Event.CommandEventAdd; import seedu.duke.Event.CommandEventDel; +import seedu.duke.Event.CommandEventList; import seedu.duke.others.CommandBye; import seedu.duke.others.CommandHelp; @@ -16,7 +17,6 @@ public class Ui { private static boolean shutdown = false; private static final String UNDERSCORES = "____________________________________________________________"; - public Ui() { sc = new Scanner(System.in); parser = new Parser(); @@ -82,7 +82,7 @@ private static void printOutput(String text) { * @param isInstant whether the string is printed instantly */ private static void printOutput(String text, boolean isInstant) { - if (text==null) return; + if(text == null) return; System.out.println(UNDERSCORES); // Split text according to the lines to format. String[] lines = text.split("\\r?\\n"); @@ -113,7 +113,9 @@ private static void printOutput(String text, boolean isInstant) { private static void initializeCommands() { commandList.add(new CommandHelp()); commandList.add(new CommandBye()); - // commandList.add(new CommandEventAdd(ev)); - // commandList.add(new CommandEventDel(ev)); + commandList.add(new CommandEventAdd()); + commandList.add(new CommandEventDel()); + commandList.add(new CommandEventList()); } } + From 49f85b5890d8cb8578f313af7d1ceceff9826e30 Mon Sep 17 00:00:00 2001 From: Varsha3006 <60425261+Varsha3006@users.noreply.github.com> Date: Sun, 11 Oct 2020 19:40:51 +0800 Subject: [PATCH 033/336] Update Ui.java --- src/main/java/seedu/duke/backend/Ui.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index 4880740469..6845c078ea 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -128,6 +128,6 @@ private static void initializeCommands() { commandList.add(new CommandAddMember()); commandList.add(new CommandViewMember()); commandList.add(new CommandDelMember()); - + } } From 41a768a8378f87a472f34153eac5af59be3085e1 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Sun, 11 Oct 2020 19:56:18 +0800 Subject: [PATCH 034/336] CheckStyle update --- src/main/java/seedu/duke/Event/CommandEventAdd.java | 6 +++--- src/main/java/seedu/duke/Event/CommandEventDel.java | 6 +++--- src/main/java/seedu/duke/Event/CommandEventList.java | 2 +- src/main/java/seedu/duke/Event/Event.java | 9 +++++---- src/main/java/seedu/duke/Event/EventList.java | 5 ++--- src/main/java/seedu/duke/backend/Ui.java | 10 ++++++---- 6 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/main/java/seedu/duke/Event/CommandEventAdd.java b/src/main/java/seedu/duke/Event/CommandEventAdd.java index 53fa91c6ac..89fb482f7b 100644 --- a/src/main/java/seedu/duke/Event/CommandEventAdd.java +++ b/src/main/java/seedu/duke/Event/CommandEventAdd.java @@ -1,10 +1,10 @@ -package seedu.duke.Event; +package seedu.duke.event; import seedu.duke.Command; import seedu.duke.backend.UserInput; -public class CommandEventAdd extends Command{ +public class CommandEventAdd extends Command { private UserInput userInput; @Override @@ -19,7 +19,7 @@ public int validate(UserInput ui) { userInput = ui; if (userInput.getCategory().equals("event") && userInput.getCommand().equalsIgnoreCase("addEvent")) { if (ui.getNumArgs() == 3) { - if ((ui.getArg("n") != null) && (ui.getArg("d") != null) && (ui.getArg("t") != null)){ + if ((ui.getArg("n") != null) && (ui.getArg("d") != null) && (ui.getArg("t") != null)) { return ACCEPT; } } diff --git a/src/main/java/seedu/duke/Event/CommandEventDel.java b/src/main/java/seedu/duke/Event/CommandEventDel.java index 82bfe045ad..d6c76c3dd6 100644 --- a/src/main/java/seedu/duke/Event/CommandEventDel.java +++ b/src/main/java/seedu/duke/Event/CommandEventDel.java @@ -1,4 +1,4 @@ -package seedu.duke.Event; +package seedu.duke.event; import seedu.duke.Command; import seedu.duke.backend.UserInput; @@ -10,7 +10,7 @@ public class CommandEventDel extends Command { @Override public String execute() { index = Integer.parseInt(userInput.getArg("")); - String output = EventList.deleteEvent(index-1); + String output = EventList.deleteEvent(index - 1); return output; } @@ -24,7 +24,7 @@ public int validate(UserInput ui) { userInput = ui; if (ui.getCategory().equals("event") && ui.getCommand().equalsIgnoreCase("delEvent")) { if (ui.getNumArgs() == 1) { - if ((ui.getArg("") != null)){ + if ((ui.getArg("") != null)) { return ACCEPT; } } diff --git a/src/main/java/seedu/duke/Event/CommandEventList.java b/src/main/java/seedu/duke/Event/CommandEventList.java index 63c56aca97..df407422b5 100644 --- a/src/main/java/seedu/duke/Event/CommandEventList.java +++ b/src/main/java/seedu/duke/Event/CommandEventList.java @@ -1,4 +1,4 @@ -package seedu.duke.Event; +package seedu.duke.event; import seedu.duke.Command; import seedu.duke.backend.UserInput; diff --git a/src/main/java/seedu/duke/Event/Event.java b/src/main/java/seedu/duke/Event/Event.java index 9060245e55..9eb324f23e 100644 --- a/src/main/java/seedu/duke/Event/Event.java +++ b/src/main/java/seedu/duke/Event/Event.java @@ -1,4 +1,4 @@ -package seedu.duke.Event; +package seedu.duke.event; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -9,10 +9,10 @@ public class Event { protected LocalDate date; - public Event(String name, String Date, String time){ + public Event(String name, String date, String time) { this.eventName = name; this.eventTime = time; - this.setEventDate(LocalDate.parse(Date)); + this.setEventDate(LocalDate.parse(date)); } @@ -27,7 +27,8 @@ public void setEventDate(LocalDate date) { * @return String format of event. */ public String printEvent() { - return "Event Name: " + this.eventName + "\nDate: " + date.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + "\nTime: " + this.eventTime +"\n"; + return "Event Name: " + this.eventName + "\nDate: " + + date.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + "\nTime: " + this.eventTime + "\n"; } } diff --git a/src/main/java/seedu/duke/Event/EventList.java b/src/main/java/seedu/duke/Event/EventList.java index f5d5712738..5df1b4dd87 100644 --- a/src/main/java/seedu/duke/Event/EventList.java +++ b/src/main/java/seedu/duke/Event/EventList.java @@ -1,4 +1,4 @@ -package seedu.duke.Event; +package seedu.duke.event; import java.util.ArrayList; @@ -20,9 +20,8 @@ public static String addEvent(Event event) { } /** - * + * To delete an event based on the given index * @param index index to be deleted from list - * */ public static String deleteEvent(int index) { String userOutput; diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index 4d8ba74090..1eb6309e0c 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -1,9 +1,9 @@ package seedu.duke.backend; import seedu.duke.Command; -import seedu.duke.Event.CommandEventAdd; -import seedu.duke.Event.CommandEventDel; -import seedu.duke.Event.CommandEventList; +import seedu.duke.event.CommandEventAdd; +import seedu.duke.event.CommandEventDel; +import seedu.duke.event.CommandEventList; import seedu.duke.others.CommandBye; import seedu.duke.others.CommandHelp; @@ -82,7 +82,9 @@ private static void printOutput(String text) { * @param isInstant whether the string is printed instantly */ private static void printOutput(String text, boolean isInstant) { - if(text == null) return; + if(text == null) { + return; + } System.out.println(UNDERSCORES); // Split text according to the lines to format. String[] lines = text.split("\\r?\\n"); From 3e365a9cc968e9ede559ac0e98611f1bec999b37 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Sun, 11 Oct 2020 19:58:10 +0800 Subject: [PATCH 035/336] checkStyle update --- src/main/java/seedu/duke/others/CommandHelp.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/seedu/duke/others/CommandHelp.java b/src/main/java/seedu/duke/others/CommandHelp.java index 4dbdb41ffe..9ce3cb58c4 100644 --- a/src/main/java/seedu/duke/others/CommandHelp.java +++ b/src/main/java/seedu/duke/others/CommandHelp.java @@ -6,9 +6,10 @@ public class CommandHelp extends Command { @Override public String execute() { - return "Commands: hr add, hr delete, events add, events delete, finance add, finance delete, help, bye"; + return "Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, " + + "help, bye"; } - +@Override public int validate(UserInput input) { if (input.getCategory().equals("") && input.getCommand().equalsIgnoreCase("help")) { return ACCEPT; @@ -19,6 +20,7 @@ public int validate(UserInput input) { @Override public String help() { + return ""; } -} +} \ No newline at end of file From 3e27a1787f449217627cf2c90403966328083a4c Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Sun, 11 Oct 2020 20:07:44 +0800 Subject: [PATCH 036/336] CheckStyle2 --- src/main/java/seedu/duke/Event/Event.java | 4 ++-- src/main/java/seedu/duke/Event/EventList.java | 2 +- src/main/java/seedu/duke/backend/Ui.java | 2 +- src/main/java/seedu/duke/others/CommandHelp.java | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/seedu/duke/Event/Event.java b/src/main/java/seedu/duke/Event/Event.java index 9eb324f23e..3492e6876a 100644 --- a/src/main/java/seedu/duke/Event/Event.java +++ b/src/main/java/seedu/duke/Event/Event.java @@ -27,8 +27,8 @@ public void setEventDate(LocalDate date) { * @return String format of event. */ public String printEvent() { - return "Event Name: " + this.eventName + "\nDate: " + - date.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + "\nTime: " + this.eventTime + "\n"; + return "Event Name: " + this.eventName + "\nDate: " + + date.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + "\nTime: " + this.eventTime + "\n"; } } diff --git a/src/main/java/seedu/duke/Event/EventList.java b/src/main/java/seedu/duke/Event/EventList.java index 5df1b4dd87..e78af9058e 100644 --- a/src/main/java/seedu/duke/Event/EventList.java +++ b/src/main/java/seedu/duke/Event/EventList.java @@ -20,7 +20,7 @@ public static String addEvent(Event event) { } /** - * To delete an event based on the given index + * To delete an event based on the given index. * @param index index to be deleted from list */ public static String deleteEvent(int index) { diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index 96581eddd9..b5f8ed0196 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -91,7 +91,7 @@ private static void printOutput(String text) { * @param isInstant whether the string is printed instantly */ private static void printOutput(String text, boolean isInstant) { - if(text == null) { + if (text == null) { return; } System.out.println(UNDERSCORES); diff --git a/src/main/java/seedu/duke/others/CommandHelp.java b/src/main/java/seedu/duke/others/CommandHelp.java index 9ce3cb58c4..0e8f371a73 100644 --- a/src/main/java/seedu/duke/others/CommandHelp.java +++ b/src/main/java/seedu/duke/others/CommandHelp.java @@ -9,7 +9,8 @@ public String execute() { return "Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, " + "help, bye"; } -@Override + + @Override public int validate(UserInput input) { if (input.getCategory().equals("") && input.getCommand().equalsIgnoreCase("help")) { return ACCEPT; From de374b46f76a292c5b0b4da843db103d6a13f422 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Sun, 11 Oct 2020 20:21:23 +0800 Subject: [PATCH 037/336] checkStyle update --- src/test/java/seedu/duke/DukeTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java index 8492e3101e..f966855a5c 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/DukeTest.java @@ -10,6 +10,7 @@ class DukeTest { + " | | | | | | | |/ / _ \\\n" + " | |_| | |_| | < __/\n" + " |____/ \\__,_|_|\\_\\___|\n"; + @Test public void sampleTest() { assertTrue(true); From b382c26e767d02ef45c678d859f4fe7186b94cd2 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Sun, 11 Oct 2020 21:58:55 +0800 Subject: [PATCH 038/336] Version 1.0 --- .../seedu/duke/Finance/CommandFinanceAdd.java | 13 ++- .../seedu/duke/Finance/CommandFinanceDel.java | 11 +-- .../duke/Finance/CommandFinanceSummary.java | 11 +-- .../java/seedu/duke/Finance/FinanceList.java | 69 ++++++++++++++ .../java/seedu/duke/Finance/FinanceLog.java | 90 ++++++++++--------- src/main/java/seedu/duke/backend/Ui.java | 11 ++- src/main/java/seedu/duke/hr/MemberList.java | 1 - 7 files changed, 134 insertions(+), 72 deletions(-) create mode 100644 src/main/java/seedu/duke/Finance/FinanceList.java diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java b/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java index 58e27f57ed..4613b4cf9b 100644 --- a/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java +++ b/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java @@ -4,22 +4,21 @@ import seedu.duke.backend.UserInput; public class CommandFinanceAdd extends Command { - FinanceLog finLog; + UserInput userinput; - public CommandFinanceAdd(FinanceLog fl) { - finLog=fl; - } + @Override public String execute() { String input=userinput.getArg(""); String[] contents=input.trim().split(" "); - finLog.addFin(contents[0],Double.parseDouble(contents[1])); - return null; + FinanceLog fl = new FinanceLog(contents[0],Double.parseDouble(contents[1])); + String output = FinanceList.addLog(fl); + return output; } @Override public String help() { - return null; + return "The format input to add a finance log is: hr addLog title value"; } public int validate(UserInput ui) { diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceDel.java b/src/main/java/seedu/duke/Finance/CommandFinanceDel.java index 151c4d8893..c3e067d25a 100644 --- a/src/main/java/seedu/duke/Finance/CommandFinanceDel.java +++ b/src/main/java/seedu/duke/Finance/CommandFinanceDel.java @@ -4,22 +4,19 @@ import seedu.duke.backend.UserInput; public class CommandFinanceDel extends Command { - FinanceLog finLog; UserInput userinput; - public CommandFinanceDel(FinanceLog fl) { - finLog=fl; - } + @Override public String execute() { String input=userinput.getArg(""); int index=Integer.parseInt(input.trim()); - finLog.delFin(index); - return null; + String output = FinanceList.dellog(index); + return output; } @Override public String help() { - return null; + return "The format of input to delete a log is: finance delLog index"; } public int validate(UserInput ui) { diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java b/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java index c1d9da075f..9ce695b8ed 100644 --- a/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java +++ b/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java @@ -4,20 +4,17 @@ import seedu.duke.backend.UserInput; public class CommandFinanceSummary extends Command { - FinanceLog finlog; UserInput userinput; - public CommandFinanceSummary(FinanceLog fl) { - finlog=fl; - } + @Override public String execute() { - finlog.summary(); - return null; + String output = FinanceList.summary(); + return output; } @Override public String help() { - return null; + return "The format of input to show finance list is: finance summary"; } public int validate(UserInput ui) { diff --git a/src/main/java/seedu/duke/Finance/FinanceList.java b/src/main/java/seedu/duke/Finance/FinanceList.java new file mode 100644 index 0000000000..db7c12c29e --- /dev/null +++ b/src/main/java/seedu/duke/Finance/FinanceList.java @@ -0,0 +1,69 @@ +package seedu.duke.Finance; + +import java.util.ArrayList; +import java.util.concurrent.ExecutionException; + +public class FinanceList { + public static ArrayList financeLogs = new ArrayList(); + + /** + * Add one log into the finance list + * @param fl the new finance log user wants to add + * @return the output when it successfully add one log + */ + public static String addLog(FinanceLog fl) { + financeLogs.add(fl); + String output1 = "Got it! I've added this to the list.\n"; + String output2 = fl.toString(); + String output3; + if (fl.getSize() > 1) { + output3 = "There are " + fl.getSize() + " logs in the list now.\n"; + } else { + output3 = "There is " + fl.getSize() + " log in the list now.\n"; + } + String output = output1 + output2 + output3; + return output; + } + + /** + * Delete one particular log from the list + * @param index the index of the log which user wants to delete + * @return the output when successfully delete a log + */ + public static String dellog(int index) { + try { + String output1 = "Got it! I've removed this from list.\n"; + financeLogs.remove(index - 1); + FinanceLog.finSize--; + String output2; + if (FinanceLog.finSize > 1) { + output2 = "There are " + FinanceLog.finSize + " logs in the list now.\n"; + } else { + output2 = "There is " + FinanceLog.finSize + " log in the list now.\n"; + } + String output = output1 + output2; + return output; + } + catch (IndexOutOfBoundsException e) { + System.out.println("Your index input does not exist in the list"); + } + return null; + } + + /** + * Show the all the logs in the list and shows the total budget amount + * @return the finance list + */ + public static String summary() { + if (FinanceLog.getSize()==0) { + return "Sorry, your finance list is empty.\n"; + } + String output = "Here is the list:\n"; + for (int i=0;i1) { - System.out.println("There are "+finSize+" logs in the list"); - } - else { - System.out.println("There is "+finSize+" logs in the list"); - } + /** + * Form a formatted string for a finance log + * @return the string of a formatted finance log + */ + public String toString() { + return "\t"+ finSize +"."+finLog+" $"+finLogVal+"\n"; } } diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index 71a2d4b0e8..06887873f7 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -26,7 +26,6 @@ public class Ui { public Ui() { sc = new Scanner(System.in); parser = new Parser(); - fl=new FinanceLog(); initializeCommands(); } @@ -44,9 +43,9 @@ public void run() { // Placeholder if additional routine is required when user enters incorrect parameters } catch (DukeNoMatchException ne) { printOutput("No such command. Try 'help' for a list of commands."); - } catch (Exception e) { + } /*catch (Exception e) { printOutput("Command execution failed with an unhandled error!", true); - } + }*/ } public Command findCommand(UserInput ui) throws DukeArgumentException, DukeNoMatchException { @@ -124,9 +123,9 @@ private static void printOutput(String text, boolean isInstant) { private static void initializeCommands() { commandList.add(new CommandHelp()); commandList.add(new CommandBye()); - commandList.add(new CommandFinanceSummary(fl)); - commandList.add(new CommandFinanceAdd(fl)); - commandList.add(new CommandFinanceDel(fl)); + commandList.add(new CommandFinanceSummary()); + commandList.add(new CommandFinanceAdd()); + commandList.add(new CommandFinanceDel()); commandList.add(new CommandAddMember()); commandList.add(new CommandViewMember()); commandList.add(new CommandDelMember()); diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java index eb3a173c7a..1a14e73825 100644 --- a/src/main/java/seedu/duke/hr/MemberList.java +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -10,7 +10,6 @@ public class MemberList { * @param m member to be added. */ public static void addToList(Member m) { - members.add(m); } From e3ae3918bc06a8f92bc65f287c411559bebc7b80 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Sun, 11 Oct 2020 22:58:32 +0800 Subject: [PATCH 039/336] Wang Zixin Finance version1.0 --- .../seedu/duke/Finance/CommandFinanceAdd.java | 11 +++--- .../seedu/duke/Finance/CommandFinanceDel.java | 10 +++--- .../duke/Finance/CommandFinanceSummary.java | 6 ++-- .../java/seedu/duke/Finance/FinanceList.java | 34 +++++++++---------- .../java/seedu/duke/Finance/FinanceLog.java | 14 ++++---- src/main/java/seedu/duke/backend/Ui.java | 12 ++++--- src/test/java/seedu/duke/DukeTest.java | 4 +-- 7 files changed, 46 insertions(+), 45 deletions(-) diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java b/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java index 4613b4cf9b..f30d9e4f41 100644 --- a/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java +++ b/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java @@ -1,16 +1,15 @@ -package seedu.duke.Finance; +package seedu.duke.finance; import seedu.duke.Command; import seedu.duke.backend.UserInput; public class CommandFinanceAdd extends Command { - UserInput userinput; @Override public String execute() { - String input=userinput.getArg(""); - String[] contents=input.trim().split(" "); + String input = userinput.getArg(""); + String[] contents = input.trim().split(" "); FinanceLog fl = new FinanceLog(contents[0],Double.parseDouble(contents[1])); String output = FinanceList.addLog(fl); return output; @@ -22,8 +21,8 @@ public String help() { } public int validate(UserInput ui) { - if (ui.getCategory().equals("finance")&&ui.getCommand().equalsIgnoreCase("addlog")) { - userinput=ui; + if (ui.getCategory().equals("finance") && ui.getCommand().equalsIgnoreCase("addlog")) { + userinput = ui; return ACCEPT; } return NO_MATCH; diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceDel.java b/src/main/java/seedu/duke/Finance/CommandFinanceDel.java index c3e067d25a..d246eceae4 100644 --- a/src/main/java/seedu/duke/Finance/CommandFinanceDel.java +++ b/src/main/java/seedu/duke/Finance/CommandFinanceDel.java @@ -1,4 +1,4 @@ -package seedu.duke.Finance; +package seedu.duke.finance; import seedu.duke.Command; import seedu.duke.backend.UserInput; @@ -8,8 +8,8 @@ public class CommandFinanceDel extends Command { @Override public String execute() { - String input=userinput.getArg(""); - int index=Integer.parseInt(input.trim()); + String input = userinput.getArg(""); + int index = Integer.parseInt(input.trim()); String output = FinanceList.dellog(index); return output; } @@ -20,8 +20,8 @@ public String help() { } public int validate(UserInput ui) { - if (ui.getCategory().equals("finance")&&ui.getCommand().equalsIgnoreCase("dellog")) { - userinput=ui; + if (ui.getCategory().equals("finance") && ui.getCommand().equalsIgnoreCase("dellog")) { + userinput = ui; return ACCEPT; } return NO_MATCH; diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java b/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java index 9ce695b8ed..d9b43e9aca 100644 --- a/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java +++ b/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java @@ -1,4 +1,4 @@ -package seedu.duke.Finance; +package seedu.duke.finance; import seedu.duke.Command; import seedu.duke.backend.UserInput; @@ -18,8 +18,8 @@ public String help() { } public int validate(UserInput ui) { - if (ui.getCategory().equals("finance")&&ui.getCommand().equalsIgnoreCase("summary")) { - userinput=ui; + if (ui.getCategory().equals("finance") && ui.getCommand().equalsIgnoreCase("summary")) { + userinput = ui; return ACCEPT; } return NO_MATCH; diff --git a/src/main/java/seedu/duke/Finance/FinanceList.java b/src/main/java/seedu/duke/Finance/FinanceList.java index db7c12c29e..7427b0c978 100644 --- a/src/main/java/seedu/duke/Finance/FinanceList.java +++ b/src/main/java/seedu/duke/Finance/FinanceList.java @@ -1,4 +1,4 @@ -package seedu.duke.Finance; +package seedu.duke.finance; import java.util.ArrayList; import java.util.concurrent.ExecutionException; @@ -7,26 +7,26 @@ public class FinanceList { public static ArrayList financeLogs = new ArrayList(); /** - * Add one log into the finance list + * Add one log into the finance list. * @param fl the new finance log user wants to add * @return the output when it successfully add one log */ public static String addLog(FinanceLog fl) { - financeLogs.add(fl); - String output1 = "Got it! I've added this to the list.\n"; - String output2 = fl.toString(); - String output3; - if (fl.getSize() > 1) { - output3 = "There are " + fl.getSize() + " logs in the list now.\n"; - } else { - output3 = "There is " + fl.getSize() + " log in the list now.\n"; - } - String output = output1 + output2 + output3; - return output; + financeLogs.add(fl); + String output = "Got it! I've added this to the list.\n"; + String output1 = fl.toString(); + String output2; + if (fl.getSize() > 1) { + output2 = "There are " + fl.getSize() + " logs in the list now.\n"; + } else { + output2 = "There is " + fl.getSize() + " log in the list now.\n"; + } + output = output + output1 + output2; + return output; } /** - * Delete one particular log from the list + * Delete one particular log from the list. * @param index the index of the log which user wants to delete * @return the output when successfully delete a log */ @@ -51,15 +51,15 @@ public static String dellog(int index) { } /** - * Show the all the logs in the list and shows the total budget amount + * Show the all the logs in the list and shows the total budget amount. * @return the finance list */ public static String summary() { - if (FinanceLog.getSize()==0) { + if (FinanceLog.getSize() == 0) { return "Sorry, your finance list is empty.\n"; } String output = "Here is the list:\n"; - for (int i=0;i Date: Sun, 11 Oct 2020 23:08:38 +0800 Subject: [PATCH 040/336] Wang Zixin Finance version 1.0 --- src/main/java/seedu/duke/Finance/FinanceList.java | 11 +++++------ src/main/java/seedu/duke/Finance/FinanceLog.java | 6 +++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/seedu/duke/Finance/FinanceList.java b/src/main/java/seedu/duke/Finance/FinanceList.java index 7427b0c978..971f5df22b 100644 --- a/src/main/java/seedu/duke/Finance/FinanceList.java +++ b/src/main/java/seedu/duke/Finance/FinanceList.java @@ -32,7 +32,6 @@ public static String addLog(FinanceLog fl) { */ public static String dellog(int index) { try { - String output1 = "Got it! I've removed this from list.\n"; financeLogs.remove(index - 1); FinanceLog.finSize--; String output2; @@ -41,10 +40,10 @@ public static String dellog(int index) { } else { output2 = "There is " + FinanceLog.finSize + " log in the list now.\n"; } + String output1 = "Got it! I've removed this from list.\n"; String output = output1 + output2; return output; - } - catch (IndexOutOfBoundsException e) { + } catch (IndexOutOfBoundsException e) { System.out.println("Your index input does not exist in the list"); } return null; @@ -60,10 +59,10 @@ public static String summary() { } String output = "Here is the list:\n"; for (int i = 0;i < FinanceLog.getSize();i++) { - output = output.concat("\t"+(i+1)+"." +financeLogs.get(i).getLog()+" $"+ - financeLogs.get(i).getLogVal()+"\n"); + output = output.concat("\t"+(i + 1)+"." + financeLogs.get(i).getLog() + " $" + + financeLogs.get(i).getLogVal() + "\n"); } - output = output.concat("Total budget: $"+String.format("%.2f",FinanceLog.getSum())+"\n"); + output = output.concat("Total budget: $" + String.format("%.2f",FinanceLog.getSum()) + "\n"); return output; } } diff --git a/src/main/java/seedu/duke/Finance/FinanceLog.java b/src/main/java/seedu/duke/Finance/FinanceLog.java index 0d363a827a..d7947dfe45 100644 --- a/src/main/java/seedu/duke/Finance/FinanceLog.java +++ b/src/main/java/seedu/duke/Finance/FinanceLog.java @@ -3,8 +3,8 @@ public class FinanceLog { private String finLog; private double finLogVal; - public static int finSize=0; - public static double sum=0; + public static int finSize = 0; + public static double sum = 0; /** * Create a new finance log. @@ -55,6 +55,6 @@ public static double getSum() { * @return the string of a formatted finance log */ public String toString() { - return "\t"+ finSize +"."+finLog+" $"+finLogVal+"\n"; + return "\t" + finSize + "." + finLog + " $" + finLogVal + "\n"; } } From 1337448b9da87a0f245b471c1bbd8351c5f84164 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Sun, 11 Oct 2020 23:16:01 +0800 Subject: [PATCH 041/336] Wang Zixin Finance version 1.0 --- src/main/java/seedu/duke/Finance/FinanceList.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/duke/Finance/FinanceList.java b/src/main/java/seedu/duke/Finance/FinanceList.java index 971f5df22b..f6e0f3b436 100644 --- a/src/main/java/seedu/duke/Finance/FinanceList.java +++ b/src/main/java/seedu/duke/Finance/FinanceList.java @@ -59,8 +59,8 @@ public static String summary() { } String output = "Here is the list:\n"; for (int i = 0;i < FinanceLog.getSize();i++) { - output = output.concat("\t"+(i + 1)+"." + financeLogs.get(i).getLog() + " $" + - financeLogs.get(i).getLogVal() + "\n"); + output = output.concat("\t" + (i + 1) + "." + financeLogs.get(i).getLog() + " $" + + financeLogs.get(i).getLogVal() + "\n"); } output = output.concat("Total budget: $" + String.format("%.2f",FinanceLog.getSum()) + "\n"); return output; From c63b438990b0f34adab81826e16cd291e405c112 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Sun, 11 Oct 2020 23:23:26 +0800 Subject: [PATCH 042/336] Wang Zixin Finance version1.0 --- src/test/java/seedu/duke/DukeTest.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java index 09b1514e52..0c01b371a1 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/DukeTest.java @@ -21,18 +21,18 @@ public void sampleTest() { @Test public void testFinance() { - String expected1 = "Got it! I've added this to the list.\n" + - "\t1.write $12.5\n" + - "There is 1 log in the list now.\n"; + String expected1 = "Got it! I've added this to the list.\n" + + "\t1.write $12.5\n" + + "There is 1 log in the list now.\n"; String actual1 = FinanceList.addLog(new FinanceLog("write",12.5)); assertEquals(expected1,actual1); - String expected2 = "Here is the list:\n" + - "\t1.write $12.5\n" + - "Total budget: $12.50\n"; + String expected2 = "Here is the list:\n" + + "\t1.write $12.5\n" + + "Total budget: $12.50\n"; String actual2 = FinanceList.summary(); assertEquals(expected2,actual2); - String expected3 = "Got it! I've removed this from list.\n" + - "There is 0 log in the list now.\n"; + String expected3 = "Got it! I've removed this from list.\n" + + "There is 0 log in the list now.\n"; String actual3 = FinanceList.dellog(1); assertEquals(expected3,actual3); } From e7948b387c335c28db8d22e371385d7fdb927e70 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Sun, 11 Oct 2020 23:46:53 +0800 Subject: [PATCH 043/336] Added one Junit Test --- src/test/java/seedu/duke/event/EventTest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/test/java/seedu/duke/event/EventTest.java diff --git a/src/test/java/seedu/duke/event/EventTest.java b/src/test/java/seedu/duke/event/EventTest.java new file mode 100644 index 0000000000..a751bf912a --- /dev/null +++ b/src/test/java/seedu/duke/event/EventTest.java @@ -0,0 +1,19 @@ +package seedu.duke.event; + +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; + + +import static org.junit.jupiter.api.Assertions.*; + +class EventTest { + + @Test + void testPrintEvent() { + Event event = new Event("PR meeting", "2000-06-30", "8pm"); + assertEquals("Event Name: " + "PR meeting" + "\nDate: " + + "Jun 30 2000" + "\nTime: " + "8pm" + "\n", event.printEvent()); + } + +} \ No newline at end of file From cb32f0aef2907299be76571d0d32f04cc5706e03 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Mon, 12 Oct 2020 10:34:29 +0800 Subject: [PATCH 044/336] Wang Zixin Finance version1.0 --- src/main/java/seedu/duke/backend/Ui.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index 0278ef64fe..cfaf745ee2 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -46,9 +46,9 @@ public void run() { // Placeholder if additional routine is required when user enters incorrect parameters } catch (DukeNoMatchException ne) { printOutput("No such command. Try 'help' for a list of commands."); - } /*catch (Exception e) { + } catch (Exception e) { printOutput("Command execution failed with an unhandled error!", true); - }*/ + } } public Command findCommand(UserInput ui) throws DukeArgumentException, DukeNoMatchException { From 1b90c0682278109a0c43af917f3b1ec406b3fe46 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Tue, 13 Oct 2020 10:08:52 +0800 Subject: [PATCH 045/336] Wang Zixin Finance version1.0 --- src/main/java/seedu/duke/backend/Ui.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index cfaf745ee2..86fa6c241b 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -19,7 +19,6 @@ import java.util.Scanner; public class Ui { - private static FinanceLog fl; private Scanner sc; private Parser parser; private static ArrayList commandList = new ArrayList<>(); From 0502f72d04261fb92bd3add8a57c2451bad30bdb Mon Sep 17 00:00:00 2001 From: John Date: Tue, 13 Oct 2020 17:24:19 +0800 Subject: [PATCH 046/336] Implement JUnit Tests for Parser Implement JUnit Test cases 1-5 and resolve bug where argument "" was not properly trimmed. --- src/main/java/seedu/duke/backend/Parser.java | 8 +-- src/test/java/seedu/duke/DukeTest.java | 76 ++++++++++++++++++-- 2 files changed, 75 insertions(+), 9 deletions(-) diff --git a/src/main/java/seedu/duke/backend/Parser.java b/src/main/java/seedu/duke/backend/Parser.java index a726283762..f87862b1fd 100644 --- a/src/main/java/seedu/duke/backend/Parser.java +++ b/src/main/java/seedu/duke/backend/Parser.java @@ -35,8 +35,8 @@ public UserInput parse(String input) { String tmp = output[0].trim(); String cmd; if (tmp.indexOf(' ') != -1) { - String arg = tmp.substring(tmp.indexOf(' ') + 1); - cmd = tmp.substring(0, tmp.indexOf(' ')); + String arg = tmp.substring(tmp.indexOf(' ') + 1).trim(); + cmd = tmp.substring(0, tmp.indexOf(' ')).trim(); map.put("", arg); } else { cmd = tmp; @@ -45,8 +45,8 @@ public UserInput parse(String input) { } else { String base = output[0].trim(); if (base.indexOf(' ') != -1) { - String arg = base.substring(base.indexOf(' ') + 1); - base = base.substring(0, base.indexOf(' ')); + String arg = base.substring(base.indexOf(' ') + 1).trim(); + base = base.substring(0, base.indexOf(' ')).trim(); map.put("", arg); } // Convert the / arguments into a map diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java index 0c01b371a1..dcd42c5163 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/DukeTest.java @@ -4,9 +4,15 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; + import seedu.duke.finance.FinanceList; import seedu.duke.finance.FinanceLog; +import seedu.duke.backend.Parser; +import seedu.duke.backend.UserInput; + +import java.util.HashMap; + class DukeTest { static final String LOGO = " ____ _ \n" + " | _ \\ _ _| | _____ \n" @@ -24,16 +30,76 @@ public void testFinance() { String expected1 = "Got it! I've added this to the list.\n" + "\t1.write $12.5\n" + "There is 1 log in the list now.\n"; - String actual1 = FinanceList.addLog(new FinanceLog("write",12.5)); - assertEquals(expected1,actual1); + String actual1 = FinanceList.addLog(new FinanceLog("write", 12.5)); + assertEquals(expected1, actual1); String expected2 = "Here is the list:\n" + "\t1.write $12.5\n" + "Total budget: $12.50\n"; String actual2 = FinanceList.summary(); - assertEquals(expected2,actual2); - String expected3 = "Got it! I've removed this from list.\n" + assertEquals(expected2, actual2); + String expected3 = "Got it! I've removed this from list.\n" + "There is 0 log in the list now.\n"; String actual3 = FinanceList.dellog(1); - assertEquals(expected3,actual3); + assertEquals(expected3, actual3); + } + + @Test + public void testParser() { + // Base Case + Parser p = new Parser(); + String test1 = "foo 2"; + HashMap arg1 = new HashMap<>(); + arg1.put("", "2"); + UserInput expected1 = new UserInput("foo", arg1); + expected1.setCategory(""); + assertEquals(p.parse(test1).getArgs(),expected1.getArgs()); + assertEquals(p.parse(test1).getCategory(),expected1.getCategory()); + assertEquals(p.parse(test1).getCommand(),expected1.getCommand()); + + // Space & Repetition test + String test2 = "fOo 2 2 2"; + HashMap arg2 = new HashMap<>(); + arg2.put("", "2 2 2"); + UserInput expected2 = new UserInput("fOo", arg2); + expected2.setCategory(""); + assertEquals(p.parse(test2).getArgs(),expected2.getArgs()); + assertEquals(p.parse(test2).getCategory(),expected2.getCategory()); + assertEquals(p.parse(test2).getCommand(),expected2.getCommand()); + + // Category and extra argument test + String test3 = "hr do something /a1 2 3"; + HashMap arg3 = new HashMap<>(); + arg3.put("", "something"); + arg3.put("a1", "2 3"); + UserInput expected3 = new UserInput("do", arg3); + expected3.setCategory("hr"); + assertEquals(p.parse(test3).getArgs(),expected3.getArgs()); + assertEquals(p.parse(test3).getCategory(),expected3.getCategory()); + assertEquals(p.parse(test3).getCommand(),expected3.getCommand()); + + // Capitalization & trimming test + String test4 = " eVeNt AdD mYeVenT 9000 / arg some arg /a2 /a3 another"; + HashMap arg4 = new HashMap<>(); + arg4.put("", "mYeVenT 9000"); + arg4.put("arg", "some arg"); + arg4.put("a2", ""); + arg4.put("a3", "another"); + UserInput expected4 = new UserInput("AdD", arg4); + expected4.setCategory("event"); + assertEquals(p.parse(test4).getArgs(),expected4.getArgs()); + assertEquals(p.parse(test4).getCategory(),expected4.getCategory()); + assertEquals(p.parse(test4).getCommand(),expected4.getCommand()); + + // Shorthand category, Accented Character and Argument Precedence test + String test5 = " f testCase\350 \350" + + "/ arg some arg / arg /arg precedence test"; + HashMap arg5 = new HashMap<>(); + arg5.put("", "\350"); + arg5.put("arg", "precedence test"); + UserInput expected5 = new UserInput("testCase\350", arg5); + expected5.setCategory("finance"); + assertEquals(p.parse(test5).getArgs(),expected5.getArgs()); + assertEquals(p.parse(test5).getCategory(),expected5.getCategory()); + assertEquals(p.parse(test5).getCommand(),expected5.getCommand()); } } From 2261c5ccbb0bbcfbc2cb3d0b1528917843663b22 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 13 Oct 2020 17:26:04 +0800 Subject: [PATCH 047/336] Tidy JUnit Test Code --- src/test/java/seedu/duke/DukeTest.java | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java index dcd42c5163..ce02680fe9 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/DukeTest.java @@ -52,9 +52,9 @@ public void testParser() { arg1.put("", "2"); UserInput expected1 = new UserInput("foo", arg1); expected1.setCategory(""); - assertEquals(p.parse(test1).getArgs(),expected1.getArgs()); - assertEquals(p.parse(test1).getCategory(),expected1.getCategory()); - assertEquals(p.parse(test1).getCommand(),expected1.getCommand()); + assertEquals(p.parse(test1).getArgs(), expected1.getArgs()); + assertEquals(p.parse(test1).getCategory(), expected1.getCategory()); + assertEquals(p.parse(test1).getCommand(), expected1.getCommand()); // Space & Repetition test String test2 = "fOo 2 2 2"; @@ -62,9 +62,9 @@ public void testParser() { arg2.put("", "2 2 2"); UserInput expected2 = new UserInput("fOo", arg2); expected2.setCategory(""); - assertEquals(p.parse(test2).getArgs(),expected2.getArgs()); - assertEquals(p.parse(test2).getCategory(),expected2.getCategory()); - assertEquals(p.parse(test2).getCommand(),expected2.getCommand()); + assertEquals(p.parse(test2).getArgs(), expected2.getArgs()); + assertEquals(p.parse(test2).getCategory(), expected2.getCategory()); + assertEquals(p.parse(test2).getCommand(), expected2.getCommand()); // Category and extra argument test String test3 = "hr do something /a1 2 3"; @@ -73,9 +73,9 @@ public void testParser() { arg3.put("a1", "2 3"); UserInput expected3 = new UserInput("do", arg3); expected3.setCategory("hr"); - assertEquals(p.parse(test3).getArgs(),expected3.getArgs()); - assertEquals(p.parse(test3).getCategory(),expected3.getCategory()); - assertEquals(p.parse(test3).getCommand(),expected3.getCommand()); + assertEquals(p.parse(test3).getArgs(), expected3.getArgs()); + assertEquals(p.parse(test3).getCategory(), expected3.getCategory()); + assertEquals(p.parse(test3).getCommand(), expected3.getCommand()); // Capitalization & trimming test String test4 = " eVeNt AdD mYeVenT 9000 / arg some arg /a2 /a3 another"; @@ -86,9 +86,9 @@ public void testParser() { arg4.put("a3", "another"); UserInput expected4 = new UserInput("AdD", arg4); expected4.setCategory("event"); - assertEquals(p.parse(test4).getArgs(),expected4.getArgs()); - assertEquals(p.parse(test4).getCategory(),expected4.getCategory()); - assertEquals(p.parse(test4).getCommand(),expected4.getCommand()); + assertEquals(p.parse(test4).getArgs(), expected4.getArgs()); + assertEquals(p.parse(test4).getCategory(), expected4.getCategory()); + assertEquals(p.parse(test4).getCommand(), expected4.getCommand()); // Shorthand category, Accented Character and Argument Precedence test String test5 = " f testCase\350 \350" + @@ -98,8 +98,8 @@ public void testParser() { arg5.put("arg", "precedence test"); UserInput expected5 = new UserInput("testCase\350", arg5); expected5.setCategory("finance"); - assertEquals(p.parse(test5).getArgs(),expected5.getArgs()); - assertEquals(p.parse(test5).getCategory(),expected5.getCategory()); - assertEquals(p.parse(test5).getCommand(),expected5.getCommand()); + assertEquals(p.parse(test5).getArgs(), expected5.getArgs()); + assertEquals(p.parse(test5).getCategory(), expected5.getCategory()); + assertEquals(p.parse(test5).getCommand(), expected5.getCommand()); } } From 747cba24992bfe77e8b5cce6759e1b5a4341da5e Mon Sep 17 00:00:00 2001 From: John Date: Tue, 13 Oct 2020 17:32:50 +0800 Subject: [PATCH 048/336] Fix variable social distancing --- src/test/java/seedu/duke/DukeTest.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java index ce02680fe9..be2ee25657 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/DukeTest.java @@ -47,38 +47,39 @@ public void testFinance() { public void testParser() { // Base Case Parser p = new Parser(); - String test1 = "foo 2"; + HashMap arg1 = new HashMap<>(); arg1.put("", "2"); UserInput expected1 = new UserInput("foo", arg1); expected1.setCategory(""); + String test1 = "foo 2"; assertEquals(p.parse(test1).getArgs(), expected1.getArgs()); assertEquals(p.parse(test1).getCategory(), expected1.getCategory()); assertEquals(p.parse(test1).getCommand(), expected1.getCommand()); // Space & Repetition test - String test2 = "fOo 2 2 2"; + HashMap arg2 = new HashMap<>(); arg2.put("", "2 2 2"); UserInput expected2 = new UserInput("fOo", arg2); expected2.setCategory(""); + String test2 = "fOo 2 2 2"; assertEquals(p.parse(test2).getArgs(), expected2.getArgs()); assertEquals(p.parse(test2).getCategory(), expected2.getCategory()); assertEquals(p.parse(test2).getCommand(), expected2.getCommand()); // Category and extra argument test - String test3 = "hr do something /a1 2 3"; HashMap arg3 = new HashMap<>(); arg3.put("", "something"); arg3.put("a1", "2 3"); UserInput expected3 = new UserInput("do", arg3); expected3.setCategory("hr"); + String test3 = "hr do something /a1 2 3"; assertEquals(p.parse(test3).getArgs(), expected3.getArgs()); assertEquals(p.parse(test3).getCategory(), expected3.getCategory()); assertEquals(p.parse(test3).getCommand(), expected3.getCommand()); // Capitalization & trimming test - String test4 = " eVeNt AdD mYeVenT 9000 / arg some arg /a2 /a3 another"; HashMap arg4 = new HashMap<>(); arg4.put("", "mYeVenT 9000"); arg4.put("arg", "some arg"); @@ -86,18 +87,19 @@ public void testParser() { arg4.put("a3", "another"); UserInput expected4 = new UserInput("AdD", arg4); expected4.setCategory("event"); + String test4 = " eVeNt AdD mYeVenT 9000 / arg some arg /a2 /a3 another"; assertEquals(p.parse(test4).getArgs(), expected4.getArgs()); assertEquals(p.parse(test4).getCategory(), expected4.getCategory()); assertEquals(p.parse(test4).getCommand(), expected4.getCommand()); // Shorthand category, Accented Character and Argument Precedence test - String test5 = " f testCase\350 \350" + - "/ arg some arg / arg /arg precedence test"; HashMap arg5 = new HashMap<>(); arg5.put("", "\350"); arg5.put("arg", "precedence test"); UserInput expected5 = new UserInput("testCase\350", arg5); expected5.setCategory("finance"); + String test5 = " f testCase\350 \350" + + "/ arg some arg / arg /arg precedence test"; assertEquals(p.parse(test5).getArgs(), expected5.getArgs()); assertEquals(p.parse(test5).getCategory(), expected5.getCategory()); assertEquals(p.parse(test5).getCommand(), expected5.getCommand()); From 6f450b3ee8272d4be7f5204e5f0e9179b3ead468 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 13 Oct 2020 22:36:53 +0800 Subject: [PATCH 049/336] Add getters and setters to Event --- src/main/java/seedu/duke/Event/Event.java | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/duke/Event/Event.java b/src/main/java/seedu/duke/Event/Event.java index 3492e6876a..d51c4865e4 100644 --- a/src/main/java/seedu/duke/Event/Event.java +++ b/src/main/java/seedu/duke/Event/Event.java @@ -4,8 +4,8 @@ import java.time.format.DateTimeFormatter; public class Event { - public String eventName; - public String eventTime; + protected String eventName; + protected String eventTime; protected LocalDate date; @@ -20,6 +20,25 @@ public void setEventDate(LocalDate date) { this.date = date; } + public String getEventName() { + return eventName; + } + + public void setEventName(String eventName) { + this.eventName = eventName; + } + + public String getEventTime() { + return eventTime; + } + + public void setEventTime(String eventTime) { + this.eventTime = eventTime; + } + + public LocalDate getEventDate() { + return date; + } /** * Returns the string format of the event. From 0d1a6eb3b9ac2874ae24065b3da5b108242d8b4c Mon Sep 17 00:00:00 2001 From: John Date: Wed, 14 Oct 2020 00:11:57 +0800 Subject: [PATCH 050/336] Implement FileManager Initial version of FileManager --- .../java/seedu/duke/backend/FileManager.java | 183 ++++++++++++++++++ src/main/java/seedu/duke/hr/Member.java | 4 + 2 files changed, 187 insertions(+) create mode 100644 src/main/java/seedu/duke/backend/FileManager.java diff --git a/src/main/java/seedu/duke/backend/FileManager.java b/src/main/java/seedu/duke/backend/FileManager.java new file mode 100644 index 0000000000..55bc2fe65c --- /dev/null +++ b/src/main/java/seedu/duke/backend/FileManager.java @@ -0,0 +1,183 @@ +package seedu.duke.backend; + +import seedu.duke.event.Event; +import seedu.duke.event.EventList; +import seedu.duke.finance.FinanceList; +import seedu.duke.finance.FinanceLog; +import seedu.duke.hr.Member; +import seedu.duke.hr.MemberList; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; + +public class FileManager { + // Todo support RFC 4180 CSV standard and handle rogue characters + private static final String HEADERS_MEMBERS = "Name,Phone,Email,Role"; + private static final String HEADERS_FINANCE = "Name,Value"; + private static final String HEADERS_EVENT = "Name,Date,Time"; + + private String path; // if not the working directory, path should end with a slash + + public FileManager(String path) { + this.path = path; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + /** + * Saves data from all the different lists to disk. + * @throws IOException Any one of the files encounters a write error + */ + public void saveAll() throws IOException { + saveEvent(path + "events.csv"); + saveFinance(path + "finance.csv"); + saveMembers(path + "members.csv"); + } + + /** + * Saves all the events currently in memory to a csv file. + * @param fileName The name of the file, including the path if necessary + * @throws IOException The file cannot be written to + */ + public void saveEvent(String fileName) throws IOException { + String writeOutput = HEADERS_EVENT; + for (Event e : EventList.events) { + writeOutput += e.getEventName() + ","; + writeOutput += e.getEventDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ","; + writeOutput += e.getEventTime() + "\n"; + } + saveFile(fileName, writeOutput); + } + + /** + * Saves all the finance logs currently in memory to a csv file. + * @param fileName The name of the file, including the path if necessary + * @throws IOException The file cannot be written to + */ + public void saveFinance(String fileName) throws IOException { + String writeOutput = HEADERS_FINANCE; + for (FinanceLog f : FinanceList.financeLogs) { + writeOutput += f.getLog() + ","; + writeOutput += f.getLogVal() + "\n"; + } + saveFile(fileName, writeOutput); + } + + /** + * Saves all the members currently in memory to a csv file. + * @param fileName The name of the file, including the path if necessary + * @throws IOException The file cannot be written to + */ + public void saveMembers(String fileName) throws IOException { + + String writeOutput = HEADERS_MEMBERS; + for (Member m : MemberList.members) { + writeOutput += m.getMemberName() + ","; + writeOutput += m.getMemberPhone() + ","; + writeOutput += m.getMemberEmail() + ","; + writeOutput += m.getMemberRole() + "\n"; + } + saveFile(fileName, writeOutput); + } + + /** + * Generic method for saving string to a specified file. + * @param fileName The name of the file, including the path if necessary + * @param data String to write to the file + * @throws IOException The file cannot be written to + */ + public static void saveFile(String fileName, String data) throws IOException { + FileWriter fw = new FileWriter(fileName); + fw.write(data); + fw.flush(); + fw.close(); + } + + /** + * Opens a file and interprets the content as if it's a csv file. + * @param filename The name of the file, including the path if necessary + * @param headers if not null, verifies a matching header to the parameter, otherwise aborts + * @return A HashMap containing the header and all column entries under the header as an ArrayList + * @throws IOException If the file cannot be found or a read error is encountered + */ + public static HashMap> readFile(String filename, String headers) throws IOException { + BufferedReader csvReader = new BufferedReader(new FileReader(filename)); + HashMap> map = new HashMap<>(); + String row; + boolean header = true; + //int rowCount = 0; + String[] headerOrder = null; + while ((row = csvReader.readLine()) != null) { + String[] data = row.split(","); + if (header) { + // Process file header + if (!row.equalsIgnoreCase(headers)) { + return null; + } + for (String s : data) { + map.put(s, new ArrayList()); + } + headerOrder = data; + header = false; + continue; + } + int i = 0; + for (String s : data) { + map.get(headerOrder[i]).add(s); + } + if (i != headerOrder.length) { + // Column mismatch! + return null; + } + } + return map; + } + + public static HashMap> readFile(String filename) throws IOException { + return readFile(filename, null); + } + + public static void readFinance(String filename) throws IOException { + HashMap> data = readFile(filename); + // Validate size of any column + int rows = data.get("Name").size(); + for (int i = 0; i < rows; i++) { + FinanceLog tmp = new FinanceLog(data.get("Name").get(i), Double.parseDouble(data.get("Value").get(i))); + FinanceList.financeLogs.add(tmp); + } + } + + public static void readEvents(String filename) throws IOException { + HashMap> data = readFile(filename); + // Validate size of any column + int rows = data.get("Name").size(); + for (int i = 0; i < rows; i++) { + Event tmp = new Event(data.get("Name").get(i), data.get("Date").get(i), data.get("Time").get(i)); + EventList.events.add(tmp); + } + } + + public static void readMembers(String filename) throws IOException { + HashMap> data = readFile(filename); + // Validate size of any column + int rows = data.get("Name").size(); + for (int i = 0; i < rows; i++) { + Member tmp = new Member(data.get("Name").get(i), + Integer.parseInt(data.get("Phone").get(i)), + data.get("email").get(i), + data.get("role").get(i)); + MemberList.members.add(tmp); + } + } +} diff --git a/src/main/java/seedu/duke/hr/Member.java b/src/main/java/seedu/duke/hr/Member.java index d2a1b66d11..9d1e5f3fdc 100644 --- a/src/main/java/seedu/duke/hr/Member.java +++ b/src/main/java/seedu/duke/hr/Member.java @@ -30,6 +30,10 @@ public String getMemberRole() { return this.memberRole; } + public String getMemberName() { + return this.memberName; + } + /** * Prints task data in the desired form to be printed for user interaction. * */ From 43894a401f68ad506042e6e662fd90d8009927f1 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Wed, 14 Oct 2020 11:58:58 +0800 Subject: [PATCH 051/336] white space --- src/main/java/seedu/duke/backend/Parser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/duke/backend/Parser.java b/src/main/java/seedu/duke/backend/Parser.java index e8e71cfe75..7a7dec43f6 100644 --- a/src/main/java/seedu/duke/backend/Parser.java +++ b/src/main/java/seedu/duke/backend/Parser.java @@ -15,6 +15,7 @@ public Parser() { * @return UserInput object containing the command, category and all arguments */ public UserInput parse(String input) { + String userInput; userInput = sanitize(input); @@ -99,4 +100,3 @@ public String sanitize(String s) { return s; } } - From eff28d11f2da6592fade0589aad8ec6a76d83616 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Wed, 14 Oct 2020 13:28:30 +0800 Subject: [PATCH 052/336] Added Junit tests for event --- src/main/java/seedu/duke/Event/EventList.java | 4 +-- src/test/java/seedu/duke/DukeTest.java | 2 +- src/test/java/seedu/duke/event/EventTest.java | 27 +++++++++++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/seedu/duke/Event/EventList.java b/src/main/java/seedu/duke/Event/EventList.java index e78af9058e..f6d9c3a615 100644 --- a/src/main/java/seedu/duke/Event/EventList.java +++ b/src/main/java/seedu/duke/Event/EventList.java @@ -14,7 +14,7 @@ public static String addEvent(Event event) { String userOutput; events.add(event); userOutput = "Got it. I've added this Event:\n" + event.printEvent() + "\n" - + "Now you have " + events.size() + " events in the list.\n"; + + "Now you have " + events.size() + " event in the list.\n"; return userOutput; } @@ -29,7 +29,7 @@ public static String deleteEvent(int index) { userOutput = "I'll remove this Event:\n"; userOutput = userOutput.concat(events.get(index).printEvent() + "\n"); events.remove(index); - userOutput = userOutput.concat("Now you have " + events.size() + " event in the list"); + userOutput = userOutput.concat("Now you have " + events.size() + " event in the list."); } catch (IndexOutOfBoundsException e) { userOutput = "OOPS!!! The event does not exist.Please try our help command!\n"; } diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java index be2ee25657..1b626890d4 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/DukeTest.java @@ -104,4 +104,4 @@ public void testParser() { assertEquals(p.parse(test5).getCategory(), expected5.getCategory()); assertEquals(p.parse(test5).getCommand(), expected5.getCommand()); } -} +} \ No newline at end of file diff --git a/src/test/java/seedu/duke/event/EventTest.java b/src/test/java/seedu/duke/event/EventTest.java index a751bf912a..1f8b0ea354 100644 --- a/src/test/java/seedu/duke/event/EventTest.java +++ b/src/test/java/seedu/duke/event/EventTest.java @@ -2,18 +2,41 @@ import org.junit.jupiter.api.Test; -import java.time.LocalDate; +import java.util.ArrayList; import static org.junit.jupiter.api.Assertions.*; class EventTest { + Event event = new Event("PR meeting", "2000-06-30", "8pm"); @Test void testPrintEvent() { - Event event = new Event("PR meeting", "2000-06-30", "8pm"); assertEquals("Event Name: " + "PR meeting" + "\nDate: " + "Jun 30 2000" + "\nTime: " + "8pm" + "\n", event.printEvent()); } + @Test + void testEventAdd() { + String expected1 = "Got it. I've added this Event:\n" + + "Event Name: PR meeting" + + "\nDate: Jun 30 2000" + + "\nTime: 8pm\n"+ + "\nNow you have 1 event in the list.\n"; + assertEquals(expected1,EventList.addEvent(event)); + + String expected3 = "Here are the current events in your list:\n" + + "1.Event Name: PR meeting" + + "\nDate: Jun 30 2000" + + "\nTime: 8pm\n"; + assertEquals(expected3, EventList.printEventList()); + + String expected2 = "I'll remove this Event:\n" + + "Event Name: PR meeting" + + "\nDate: Jun 30 2000" + + "\nTime: 8pm\n"+ + "\nNow you have 0 event in the list."; + assertEquals(expected2,EventList.deleteEvent(0)); + } + } \ No newline at end of file From ee5c0888044fcf97b9302d3dfeafa27316af107e Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Wed, 14 Oct 2020 13:37:23 +0800 Subject: [PATCH 053/336] Junit test update --- src/test/java/seedu/duke/event/EventTest.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/test/java/seedu/duke/event/EventTest.java b/src/test/java/seedu/duke/event/EventTest.java index 1f8b0ea354..d50989759d 100644 --- a/src/test/java/seedu/duke/event/EventTest.java +++ b/src/test/java/seedu/duke/event/EventTest.java @@ -5,7 +5,8 @@ import java.util.ArrayList; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; + class EventTest { Event event = new Event("PR meeting", "2000-06-30", "8pm"); @@ -21,8 +22,8 @@ void testEventAdd() { String expected1 = "Got it. I've added this Event:\n" + "Event Name: PR meeting" + "\nDate: Jun 30 2000" - + "\nTime: 8pm\n"+ - "\nNow you have 1 event in the list.\n"; + + "\nTime: 8pm\n" + + "\nNow you have 1 event in the list.\n"; assertEquals(expected1,EventList.addEvent(event)); String expected3 = "Here are the current events in your list:\n" @@ -34,8 +35,8 @@ void testEventAdd() { String expected2 = "I'll remove this Event:\n" + "Event Name: PR meeting" + "\nDate: Jun 30 2000" - + "\nTime: 8pm\n"+ - "\nNow you have 0 event in the list."; + + "\nTime: 8pm\n" + + "\nNow you have 0 event in the list."; assertEquals(expected2,EventList.deleteEvent(0)); } From 3951ecf011103304668a74417db761b05efe5d85 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Wed, 14 Oct 2020 13:56:29 +0800 Subject: [PATCH 054/336] Changed package name for finance --- src/main/java/seedu/duke/Finance/CommandFinanceAdd.java | 1 + src/test/java/seedu/duke/event/EventTest.java | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java b/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java index f30d9e4f41..ae07d1395b 100644 --- a/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java +++ b/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java @@ -2,6 +2,7 @@ import seedu.duke.Command; import seedu.duke.backend.UserInput; +//import seedu.duke.finance.financelog; public class CommandFinanceAdd extends Command { UserInput userinput; diff --git a/src/test/java/seedu/duke/event/EventTest.java b/src/test/java/seedu/duke/event/EventTest.java index d50989759d..f276561676 100644 --- a/src/test/java/seedu/duke/event/EventTest.java +++ b/src/test/java/seedu/duke/event/EventTest.java @@ -2,9 +2,6 @@ import org.junit.jupiter.api.Test; - -import java.util.ArrayList; - import static org.junit.jupiter.api.Assertions.assertEquals; From 44f238301e67433859239ea1e150a4202c6bf304 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Wed, 14 Oct 2020 14:08:08 +0800 Subject: [PATCH 055/336] folder change --- .../seedu/duke/Finance/CommandFinanceAdd.java | 30 -------- .../seedu/duke/Finance/CommandFinanceDel.java | 29 -------- .../duke/Finance/CommandFinanceSummary.java | 27 -------- .../java/seedu/duke/Finance/FinanceList.java | 68 ------------------- .../java/seedu/duke/Finance/FinanceLog.java | 60 ---------------- 5 files changed, 214 deletions(-) delete mode 100644 src/main/java/seedu/duke/Finance/CommandFinanceAdd.java delete mode 100644 src/main/java/seedu/duke/Finance/CommandFinanceDel.java delete mode 100644 src/main/java/seedu/duke/Finance/CommandFinanceSummary.java delete mode 100644 src/main/java/seedu/duke/Finance/FinanceList.java delete mode 100644 src/main/java/seedu/duke/Finance/FinanceLog.java diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java b/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java deleted file mode 100644 index f30d9e4f41..0000000000 --- a/src/main/java/seedu/duke/Finance/CommandFinanceAdd.java +++ /dev/null @@ -1,30 +0,0 @@ -package seedu.duke.finance; - -import seedu.duke.Command; -import seedu.duke.backend.UserInput; - -public class CommandFinanceAdd extends Command { - UserInput userinput; - - @Override - public String execute() { - String input = userinput.getArg(""); - String[] contents = input.trim().split(" "); - FinanceLog fl = new FinanceLog(contents[0],Double.parseDouble(contents[1])); - String output = FinanceList.addLog(fl); - return output; - } - - @Override - public String help() { - return "The format input to add a finance log is: hr addLog title value"; - } - - public int validate(UserInput ui) { - if (ui.getCategory().equals("finance") && ui.getCommand().equalsIgnoreCase("addlog")) { - userinput = ui; - return ACCEPT; - } - return NO_MATCH; - } -} diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceDel.java b/src/main/java/seedu/duke/Finance/CommandFinanceDel.java deleted file mode 100644 index d246eceae4..0000000000 --- a/src/main/java/seedu/duke/Finance/CommandFinanceDel.java +++ /dev/null @@ -1,29 +0,0 @@ -package seedu.duke.finance; - -import seedu.duke.Command; -import seedu.duke.backend.UserInput; - -public class CommandFinanceDel extends Command { - UserInput userinput; - - @Override - public String execute() { - String input = userinput.getArg(""); - int index = Integer.parseInt(input.trim()); - String output = FinanceList.dellog(index); - return output; - } - - @Override - public String help() { - return "The format of input to delete a log is: finance delLog index"; - } - - public int validate(UserInput ui) { - if (ui.getCategory().equals("finance") && ui.getCommand().equalsIgnoreCase("dellog")) { - userinput = ui; - return ACCEPT; - } - return NO_MATCH; - } -} diff --git a/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java b/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java deleted file mode 100644 index d9b43e9aca..0000000000 --- a/src/main/java/seedu/duke/Finance/CommandFinanceSummary.java +++ /dev/null @@ -1,27 +0,0 @@ -package seedu.duke.finance; - -import seedu.duke.Command; -import seedu.duke.backend.UserInput; - -public class CommandFinanceSummary extends Command { - UserInput userinput; - - @Override - public String execute() { - String output = FinanceList.summary(); - return output; - } - - @Override - public String help() { - return "The format of input to show finance list is: finance summary"; - } - - public int validate(UserInput ui) { - if (ui.getCategory().equals("finance") && ui.getCommand().equalsIgnoreCase("summary")) { - userinput = ui; - return ACCEPT; - } - return NO_MATCH; - } -} diff --git a/src/main/java/seedu/duke/Finance/FinanceList.java b/src/main/java/seedu/duke/Finance/FinanceList.java deleted file mode 100644 index f6e0f3b436..0000000000 --- a/src/main/java/seedu/duke/Finance/FinanceList.java +++ /dev/null @@ -1,68 +0,0 @@ -package seedu.duke.finance; - -import java.util.ArrayList; -import java.util.concurrent.ExecutionException; - -public class FinanceList { - public static ArrayList financeLogs = new ArrayList(); - - /** - * Add one log into the finance list. - * @param fl the new finance log user wants to add - * @return the output when it successfully add one log - */ - public static String addLog(FinanceLog fl) { - financeLogs.add(fl); - String output = "Got it! I've added this to the list.\n"; - String output1 = fl.toString(); - String output2; - if (fl.getSize() > 1) { - output2 = "There are " + fl.getSize() + " logs in the list now.\n"; - } else { - output2 = "There is " + fl.getSize() + " log in the list now.\n"; - } - output = output + output1 + output2; - return output; - } - - /** - * Delete one particular log from the list. - * @param index the index of the log which user wants to delete - * @return the output when successfully delete a log - */ - public static String dellog(int index) { - try { - financeLogs.remove(index - 1); - FinanceLog.finSize--; - String output2; - if (FinanceLog.finSize > 1) { - output2 = "There are " + FinanceLog.finSize + " logs in the list now.\n"; - } else { - output2 = "There is " + FinanceLog.finSize + " log in the list now.\n"; - } - String output1 = "Got it! I've removed this from list.\n"; - String output = output1 + output2; - return output; - } catch (IndexOutOfBoundsException e) { - System.out.println("Your index input does not exist in the list"); - } - return null; - } - - /** - * Show the all the logs in the list and shows the total budget amount. - * @return the finance list - */ - public static String summary() { - if (FinanceLog.getSize() == 0) { - return "Sorry, your finance list is empty.\n"; - } - String output = "Here is the list:\n"; - for (int i = 0;i < FinanceLog.getSize();i++) { - output = output.concat("\t" + (i + 1) + "." + financeLogs.get(i).getLog() + " $" - + financeLogs.get(i).getLogVal() + "\n"); - } - output = output.concat("Total budget: $" + String.format("%.2f",FinanceLog.getSum()) + "\n"); - return output; - } -} diff --git a/src/main/java/seedu/duke/Finance/FinanceLog.java b/src/main/java/seedu/duke/Finance/FinanceLog.java deleted file mode 100644 index d7947dfe45..0000000000 --- a/src/main/java/seedu/duke/Finance/FinanceLog.java +++ /dev/null @@ -1,60 +0,0 @@ -package seedu.duke.finance; - -public class FinanceLog { - private String finLog; - private double finLogVal; - public static int finSize = 0; - public static double sum = 0; - - /** - * Create a new finance log. - * @param log the content of a finance log - * @param val the value of its budget - */ - public FinanceLog(String log, double val) { - finLog = log; - finLogVal = val; - finSize++; - sum = sum + val; - } - - /** - * Gets the log's content. - * @return log's content - */ - public String getLog() { - return finLog; - } - - /** - * Get the log's budget amount. - * @return log's budget amount - */ - public double getLogVal() { - return finLogVal; - } - - /** - * Gets the size of finance log list. - * @return the size of finance log list - */ - public static int getSize() { - return finSize; - } - - /** - * Gets the sum of total budget. - * @return the sum of total budget - */ - public static double getSum() { - return sum; - } - - /** - * Form a formatted string for a finance log. - * @return the string of a formatted finance log - */ - public String toString() { - return "\t" + finSize + "." + finLog + " $" + finLogVal + "\n"; - } -} From c75f15a06a9e58b5ad4660f09afbfa8a23af48c7 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Wed, 14 Oct 2020 14:09:33 +0800 Subject: [PATCH 056/336] folder name change complete --- .../seedu/duke/finance/CommandFinanceAdd.java | 30 ++++++++ .../seedu/duke/finance/CommandFinanceDel.java | 29 ++++++++ .../duke/finance/CommandFinanceSummary.java | 27 ++++++++ .../java/seedu/duke/finance/FinanceList.java | 68 +++++++++++++++++++ .../java/seedu/duke/finance/FinanceLog.java | 60 ++++++++++++++++ 5 files changed, 214 insertions(+) create mode 100644 src/main/java/seedu/duke/finance/CommandFinanceAdd.java create mode 100644 src/main/java/seedu/duke/finance/CommandFinanceDel.java create mode 100644 src/main/java/seedu/duke/finance/CommandFinanceSummary.java create mode 100644 src/main/java/seedu/duke/finance/FinanceList.java create mode 100644 src/main/java/seedu/duke/finance/FinanceLog.java diff --git a/src/main/java/seedu/duke/finance/CommandFinanceAdd.java b/src/main/java/seedu/duke/finance/CommandFinanceAdd.java new file mode 100644 index 0000000000..f30d9e4f41 --- /dev/null +++ b/src/main/java/seedu/duke/finance/CommandFinanceAdd.java @@ -0,0 +1,30 @@ +package seedu.duke.finance; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandFinanceAdd extends Command { + UserInput userinput; + + @Override + public String execute() { + String input = userinput.getArg(""); + String[] contents = input.trim().split(" "); + FinanceLog fl = new FinanceLog(contents[0],Double.parseDouble(contents[1])); + String output = FinanceList.addLog(fl); + return output; + } + + @Override + public String help() { + return "The format input to add a finance log is: hr addLog title value"; + } + + public int validate(UserInput ui) { + if (ui.getCategory().equals("finance") && ui.getCommand().equalsIgnoreCase("addlog")) { + userinput = ui; + return ACCEPT; + } + return NO_MATCH; + } +} diff --git a/src/main/java/seedu/duke/finance/CommandFinanceDel.java b/src/main/java/seedu/duke/finance/CommandFinanceDel.java new file mode 100644 index 0000000000..d246eceae4 --- /dev/null +++ b/src/main/java/seedu/duke/finance/CommandFinanceDel.java @@ -0,0 +1,29 @@ +package seedu.duke.finance; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandFinanceDel extends Command { + UserInput userinput; + + @Override + public String execute() { + String input = userinput.getArg(""); + int index = Integer.parseInt(input.trim()); + String output = FinanceList.dellog(index); + return output; + } + + @Override + public String help() { + return "The format of input to delete a log is: finance delLog index"; + } + + public int validate(UserInput ui) { + if (ui.getCategory().equals("finance") && ui.getCommand().equalsIgnoreCase("dellog")) { + userinput = ui; + return ACCEPT; + } + return NO_MATCH; + } +} diff --git a/src/main/java/seedu/duke/finance/CommandFinanceSummary.java b/src/main/java/seedu/duke/finance/CommandFinanceSummary.java new file mode 100644 index 0000000000..d9b43e9aca --- /dev/null +++ b/src/main/java/seedu/duke/finance/CommandFinanceSummary.java @@ -0,0 +1,27 @@ +package seedu.duke.finance; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandFinanceSummary extends Command { + UserInput userinput; + + @Override + public String execute() { + String output = FinanceList.summary(); + return output; + } + + @Override + public String help() { + return "The format of input to show finance list is: finance summary"; + } + + public int validate(UserInput ui) { + if (ui.getCategory().equals("finance") && ui.getCommand().equalsIgnoreCase("summary")) { + userinput = ui; + return ACCEPT; + } + return NO_MATCH; + } +} diff --git a/src/main/java/seedu/duke/finance/FinanceList.java b/src/main/java/seedu/duke/finance/FinanceList.java new file mode 100644 index 0000000000..f6e0f3b436 --- /dev/null +++ b/src/main/java/seedu/duke/finance/FinanceList.java @@ -0,0 +1,68 @@ +package seedu.duke.finance; + +import java.util.ArrayList; +import java.util.concurrent.ExecutionException; + +public class FinanceList { + public static ArrayList financeLogs = new ArrayList(); + + /** + * Add one log into the finance list. + * @param fl the new finance log user wants to add + * @return the output when it successfully add one log + */ + public static String addLog(FinanceLog fl) { + financeLogs.add(fl); + String output = "Got it! I've added this to the list.\n"; + String output1 = fl.toString(); + String output2; + if (fl.getSize() > 1) { + output2 = "There are " + fl.getSize() + " logs in the list now.\n"; + } else { + output2 = "There is " + fl.getSize() + " log in the list now.\n"; + } + output = output + output1 + output2; + return output; + } + + /** + * Delete one particular log from the list. + * @param index the index of the log which user wants to delete + * @return the output when successfully delete a log + */ + public static String dellog(int index) { + try { + financeLogs.remove(index - 1); + FinanceLog.finSize--; + String output2; + if (FinanceLog.finSize > 1) { + output2 = "There are " + FinanceLog.finSize + " logs in the list now.\n"; + } else { + output2 = "There is " + FinanceLog.finSize + " log in the list now.\n"; + } + String output1 = "Got it! I've removed this from list.\n"; + String output = output1 + output2; + return output; + } catch (IndexOutOfBoundsException e) { + System.out.println("Your index input does not exist in the list"); + } + return null; + } + + /** + * Show the all the logs in the list and shows the total budget amount. + * @return the finance list + */ + public static String summary() { + if (FinanceLog.getSize() == 0) { + return "Sorry, your finance list is empty.\n"; + } + String output = "Here is the list:\n"; + for (int i = 0;i < FinanceLog.getSize();i++) { + output = output.concat("\t" + (i + 1) + "." + financeLogs.get(i).getLog() + " $" + + financeLogs.get(i).getLogVal() + "\n"); + } + output = output.concat("Total budget: $" + String.format("%.2f",FinanceLog.getSum()) + "\n"); + return output; + } +} diff --git a/src/main/java/seedu/duke/finance/FinanceLog.java b/src/main/java/seedu/duke/finance/FinanceLog.java new file mode 100644 index 0000000000..d7947dfe45 --- /dev/null +++ b/src/main/java/seedu/duke/finance/FinanceLog.java @@ -0,0 +1,60 @@ +package seedu.duke.finance; + +public class FinanceLog { + private String finLog; + private double finLogVal; + public static int finSize = 0; + public static double sum = 0; + + /** + * Create a new finance log. + * @param log the content of a finance log + * @param val the value of its budget + */ + public FinanceLog(String log, double val) { + finLog = log; + finLogVal = val; + finSize++; + sum = sum + val; + } + + /** + * Gets the log's content. + * @return log's content + */ + public String getLog() { + return finLog; + } + + /** + * Get the log's budget amount. + * @return log's budget amount + */ + public double getLogVal() { + return finLogVal; + } + + /** + * Gets the size of finance log list. + * @return the size of finance log list + */ + public static int getSize() { + return finSize; + } + + /** + * Gets the sum of total budget. + * @return the sum of total budget + */ + public static double getSum() { + return sum; + } + + /** + * Form a formatted string for a finance log. + * @return the string of a formatted finance log + */ + public String toString() { + return "\t" + finSize + "." + finLog + " $" + finLogVal + "\n"; + } +} From 318837cf26a67ba1117a05dbdba7bde8b7b22311 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Wed, 14 Oct 2020 14:51:29 +0800 Subject: [PATCH 057/336] Deleted Event to change package name later --- .../seedu/duke/Event/CommandEventAdd.java | 37 ------------ .../seedu/duke/Event/CommandEventDel.java | 37 ------------ .../seedu/duke/Event/CommandEventList.java | 29 ---------- src/main/java/seedu/duke/Event/Event.java | 34 ----------- src/main/java/seedu/duke/Event/EventList.java | 57 ------------------- 5 files changed, 194 deletions(-) delete mode 100644 src/main/java/seedu/duke/Event/CommandEventAdd.java delete mode 100644 src/main/java/seedu/duke/Event/CommandEventDel.java delete mode 100644 src/main/java/seedu/duke/Event/CommandEventList.java delete mode 100644 src/main/java/seedu/duke/Event/Event.java delete mode 100644 src/main/java/seedu/duke/Event/EventList.java diff --git a/src/main/java/seedu/duke/Event/CommandEventAdd.java b/src/main/java/seedu/duke/Event/CommandEventAdd.java deleted file mode 100644 index 89fb482f7b..0000000000 --- a/src/main/java/seedu/duke/Event/CommandEventAdd.java +++ /dev/null @@ -1,37 +0,0 @@ -package seedu.duke.event; - -import seedu.duke.Command; -import seedu.duke.backend.UserInput; - - -public class CommandEventAdd extends Command { - private UserInput userInput; - - @Override - public String execute() { - Event m = new Event(userInput.getArg("n"), userInput.getArg("d"), userInput.getArg("t")); - String output = EventList.addEvent(m); - return output; - } - - @Override - public int validate(UserInput ui) { - userInput = ui; - if (userInput.getCategory().equals("event") && userInput.getCommand().equalsIgnoreCase("addEvent")) { - if (ui.getNumArgs() == 3) { - if ((ui.getArg("n") != null) && (ui.getArg("d") != null) && (ui.getArg("t") != null)) { - return ACCEPT; - } - } - return ARGUMENT_ERR; - } else { - return NO_MATCH; - } - } - - - @Override - public String help() { - return null; - } -} diff --git a/src/main/java/seedu/duke/Event/CommandEventDel.java b/src/main/java/seedu/duke/Event/CommandEventDel.java deleted file mode 100644 index d6c76c3dd6..0000000000 --- a/src/main/java/seedu/duke/Event/CommandEventDel.java +++ /dev/null @@ -1,37 +0,0 @@ -package seedu.duke.event; - -import seedu.duke.Command; -import seedu.duke.backend.UserInput; - -public class CommandEventDel extends Command { - private UserInput userInput; - int index; - - @Override - public String execute() { - index = Integer.parseInt(userInput.getArg("")); - String output = EventList.deleteEvent(index - 1); - return output; - } - - @Override - public String help() { - return null; - } - - @Override - public int validate(UserInput ui) { - userInput = ui; - if (ui.getCategory().equals("event") && ui.getCommand().equalsIgnoreCase("delEvent")) { - if (ui.getNumArgs() == 1) { - if ((ui.getArg("") != null)) { - return ACCEPT; - } - } - return ARGUMENT_ERR; - } else { - return NO_MATCH; - } - } -} - diff --git a/src/main/java/seedu/duke/Event/CommandEventList.java b/src/main/java/seedu/duke/Event/CommandEventList.java deleted file mode 100644 index df407422b5..0000000000 --- a/src/main/java/seedu/duke/Event/CommandEventList.java +++ /dev/null @@ -1,29 +0,0 @@ -package seedu.duke.event; - -import seedu.duke.Command; -import seedu.duke.backend.UserInput; - -public class CommandEventList extends Command { - private UserInput userInput; - - @Override - public String execute() { - String output = EventList.printEventList(); - return output; - } - - @Override - public int validate(UserInput input) { - this.userInput = input; - if (input.getCategory().equals("event") && input.getCommand().equalsIgnoreCase("listEvent")) { - return ACCEPT; - } else { - return NO_MATCH; - } - } - - @Override - public String help() { - return null; - } -} diff --git a/src/main/java/seedu/duke/Event/Event.java b/src/main/java/seedu/duke/Event/Event.java deleted file mode 100644 index 3492e6876a..0000000000 --- a/src/main/java/seedu/duke/Event/Event.java +++ /dev/null @@ -1,34 +0,0 @@ -package seedu.duke.event; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -public class Event { - public String eventName; - public String eventTime; - protected LocalDate date; - - - public Event(String name, String date, String time) { - this.eventName = name; - this.eventTime = time; - this.setEventDate(LocalDate.parse(date)); - } - - - public void setEventDate(LocalDate date) { - this.date = date; - } - - - /** - * Returns the string format of the event. - * - * @return String format of event. - */ - public String printEvent() { - return "Event Name: " + this.eventName + "\nDate: " - + date.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + "\nTime: " + this.eventTime + "\n"; - } - -} diff --git a/src/main/java/seedu/duke/Event/EventList.java b/src/main/java/seedu/duke/Event/EventList.java deleted file mode 100644 index f6d9c3a615..0000000000 --- a/src/main/java/seedu/duke/Event/EventList.java +++ /dev/null @@ -1,57 +0,0 @@ -package seedu.duke.event; - - -import java.util.ArrayList; - -public class EventList { - public static ArrayList events = new ArrayList<>(); - - /** - * Adds member to the arraylist. - * @param event event to be added in the list. - */ - public static String addEvent(Event event) { - String userOutput; - events.add(event); - userOutput = "Got it. I've added this Event:\n" + event.printEvent() + "\n" - + "Now you have " + events.size() + " event in the list.\n"; - - return userOutput; - } - - /** - * To delete an event based on the given index. - * @param index index to be deleted from list - */ - public static String deleteEvent(int index) { - String userOutput; - try { - userOutput = "I'll remove this Event:\n"; - userOutput = userOutput.concat(events.get(index).printEvent() + "\n"); - events.remove(index); - userOutput = userOutput.concat("Now you have " + events.size() + " event in the list."); - } catch (IndexOutOfBoundsException e) { - userOutput = "OOPS!!! The event does not exist.Please try our help command!\n"; - } - return userOutput; - } - - public static String printEventList() { - String userOutput; - if (events.size() == 0) { - userOutput = ("Oops! The event list is empty!"); - } else { - userOutput = "Here are the current events in your list:\n"; - - for (Event event : events) { - userOutput = userOutput.concat(events.indexOf(event) + 1 + "."); - userOutput = userOutput.concat(event.printEvent()); - } - } - return userOutput; - } - - -} - - From eedc999ff5c415b6a3f8dbb0698c4b3eafec948f Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Wed, 14 Oct 2020 14:52:40 +0800 Subject: [PATCH 058/336] Changed package name --- .../seedu/duke/event/CommandEventAdd.java | 37 ++++++++++++ .../seedu/duke/event/CommandEventDel.java | 37 ++++++++++++ .../seedu/duke/event/CommandEventList.java | 29 ++++++++++ src/main/java/seedu/duke/event/Event.java | 34 +++++++++++ src/main/java/seedu/duke/event/EventList.java | 57 +++++++++++++++++++ 5 files changed, 194 insertions(+) create mode 100644 src/main/java/seedu/duke/event/CommandEventAdd.java create mode 100644 src/main/java/seedu/duke/event/CommandEventDel.java create mode 100644 src/main/java/seedu/duke/event/CommandEventList.java create mode 100644 src/main/java/seedu/duke/event/Event.java create mode 100644 src/main/java/seedu/duke/event/EventList.java diff --git a/src/main/java/seedu/duke/event/CommandEventAdd.java b/src/main/java/seedu/duke/event/CommandEventAdd.java new file mode 100644 index 0000000000..89fb482f7b --- /dev/null +++ b/src/main/java/seedu/duke/event/CommandEventAdd.java @@ -0,0 +1,37 @@ +package seedu.duke.event; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + + +public class CommandEventAdd extends Command { + private UserInput userInput; + + @Override + public String execute() { + Event m = new Event(userInput.getArg("n"), userInput.getArg("d"), userInput.getArg("t")); + String output = EventList.addEvent(m); + return output; + } + + @Override + public int validate(UserInput ui) { + userInput = ui; + if (userInput.getCategory().equals("event") && userInput.getCommand().equalsIgnoreCase("addEvent")) { + if (ui.getNumArgs() == 3) { + if ((ui.getArg("n") != null) && (ui.getArg("d") != null) && (ui.getArg("t") != null)) { + return ACCEPT; + } + } + return ARGUMENT_ERR; + } else { + return NO_MATCH; + } + } + + + @Override + public String help() { + return null; + } +} diff --git a/src/main/java/seedu/duke/event/CommandEventDel.java b/src/main/java/seedu/duke/event/CommandEventDel.java new file mode 100644 index 0000000000..d6c76c3dd6 --- /dev/null +++ b/src/main/java/seedu/duke/event/CommandEventDel.java @@ -0,0 +1,37 @@ +package seedu.duke.event; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandEventDel extends Command { + private UserInput userInput; + int index; + + @Override + public String execute() { + index = Integer.parseInt(userInput.getArg("")); + String output = EventList.deleteEvent(index - 1); + return output; + } + + @Override + public String help() { + return null; + } + + @Override + public int validate(UserInput ui) { + userInput = ui; + if (ui.getCategory().equals("event") && ui.getCommand().equalsIgnoreCase("delEvent")) { + if (ui.getNumArgs() == 1) { + if ((ui.getArg("") != null)) { + return ACCEPT; + } + } + return ARGUMENT_ERR; + } else { + return NO_MATCH; + } + } +} + diff --git a/src/main/java/seedu/duke/event/CommandEventList.java b/src/main/java/seedu/duke/event/CommandEventList.java new file mode 100644 index 0000000000..df407422b5 --- /dev/null +++ b/src/main/java/seedu/duke/event/CommandEventList.java @@ -0,0 +1,29 @@ +package seedu.duke.event; + +import seedu.duke.Command; +import seedu.duke.backend.UserInput; + +public class CommandEventList extends Command { + private UserInput userInput; + + @Override + public String execute() { + String output = EventList.printEventList(); + return output; + } + + @Override + public int validate(UserInput input) { + this.userInput = input; + if (input.getCategory().equals("event") && input.getCommand().equalsIgnoreCase("listEvent")) { + return ACCEPT; + } else { + return NO_MATCH; + } + } + + @Override + public String help() { + return null; + } +} diff --git a/src/main/java/seedu/duke/event/Event.java b/src/main/java/seedu/duke/event/Event.java new file mode 100644 index 0000000000..3492e6876a --- /dev/null +++ b/src/main/java/seedu/duke/event/Event.java @@ -0,0 +1,34 @@ +package seedu.duke.event; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +public class Event { + public String eventName; + public String eventTime; + protected LocalDate date; + + + public Event(String name, String date, String time) { + this.eventName = name; + this.eventTime = time; + this.setEventDate(LocalDate.parse(date)); + } + + + public void setEventDate(LocalDate date) { + this.date = date; + } + + + /** + * Returns the string format of the event. + * + * @return String format of event. + */ + public String printEvent() { + return "Event Name: " + this.eventName + "\nDate: " + + date.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + "\nTime: " + this.eventTime + "\n"; + } + +} diff --git a/src/main/java/seedu/duke/event/EventList.java b/src/main/java/seedu/duke/event/EventList.java new file mode 100644 index 0000000000..f6d9c3a615 --- /dev/null +++ b/src/main/java/seedu/duke/event/EventList.java @@ -0,0 +1,57 @@ +package seedu.duke.event; + + +import java.util.ArrayList; + +public class EventList { + public static ArrayList events = new ArrayList<>(); + + /** + * Adds member to the arraylist. + * @param event event to be added in the list. + */ + public static String addEvent(Event event) { + String userOutput; + events.add(event); + userOutput = "Got it. I've added this Event:\n" + event.printEvent() + "\n" + + "Now you have " + events.size() + " event in the list.\n"; + + return userOutput; + } + + /** + * To delete an event based on the given index. + * @param index index to be deleted from list + */ + public static String deleteEvent(int index) { + String userOutput; + try { + userOutput = "I'll remove this Event:\n"; + userOutput = userOutput.concat(events.get(index).printEvent() + "\n"); + events.remove(index); + userOutput = userOutput.concat("Now you have " + events.size() + " event in the list."); + } catch (IndexOutOfBoundsException e) { + userOutput = "OOPS!!! The event does not exist.Please try our help command!\n"; + } + return userOutput; + } + + public static String printEventList() { + String userOutput; + if (events.size() == 0) { + userOutput = ("Oops! The event list is empty!"); + } else { + userOutput = "Here are the current events in your list:\n"; + + for (Event event : events) { + userOutput = userOutput.concat(events.indexOf(event) + 1 + "."); + userOutput = userOutput.concat(event.printEvent()); + } + } + return userOutput; + } + + +} + + From 85e6cfcbb5685e595ea9977e74fd518ebfa38c81 Mon Sep 17 00:00:00 2001 From: YeYutong Date: Wed, 14 Oct 2020 16:35:32 +0800 Subject: [PATCH 059/336] Junit test --- .../duke/DukeMemberListEmptyException.java | 14 ++++++ .../duke/DukeMemberNotFoundException.java | 12 +++++ .../java/seedu/duke/hr/CommandAddMember.java | 5 +- src/main/java/seedu/duke/hr/MemberList.java | 8 +++- src/test/java/seedu/duke/HrTest.java | 46 +++++++++++++++++++ 5 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 src/main/java/seedu/duke/DukeMemberListEmptyException.java create mode 100644 src/main/java/seedu/duke/DukeMemberNotFoundException.java create mode 100644 src/test/java/seedu/duke/HrTest.java diff --git a/src/main/java/seedu/duke/DukeMemberListEmptyException.java b/src/main/java/seedu/duke/DukeMemberListEmptyException.java new file mode 100644 index 0000000000..b1305b7245 --- /dev/null +++ b/src/main/java/seedu/duke/DukeMemberListEmptyException.java @@ -0,0 +1,14 @@ +package seedu.duke; + +import seedu.duke.DukeException; + +public class DukeMemberListEmptyException extends DukeException { + + public void DukeMemberListEmptyException() { + printMessage(); + } + + public void printMessage() { + System.out.println("OOPS!!! The member list is empty!\n"); + } +} diff --git a/src/main/java/seedu/duke/DukeMemberNotFoundException.java b/src/main/java/seedu/duke/DukeMemberNotFoundException.java new file mode 100644 index 0000000000..e19ad52805 --- /dev/null +++ b/src/main/java/seedu/duke/DukeMemberNotFoundException.java @@ -0,0 +1,12 @@ +package seedu.duke; + +public class DukeMemberNotFoundException extends DukeException { + + public void DukeMemberNotFoundException() { + printMessage(); + } + + public void printMessage() { + System.out.println("OOPS!!! The member does not exist.\n"); + } +} diff --git a/src/main/java/seedu/duke/hr/CommandAddMember.java b/src/main/java/seedu/duke/hr/CommandAddMember.java index ad96e760c0..e2f129cad3 100644 --- a/src/main/java/seedu/duke/hr/CommandAddMember.java +++ b/src/main/java/seedu/duke/hr/CommandAddMember.java @@ -32,10 +32,7 @@ public int validate(UserInput input) { public String execute() { int phone = Integer.parseInt(savedInput.getArg("p")); Member m = new Member(savedInput.getArg("n"), phone, savedInput.getArg("e"), savedInput.getArg("r")); - MemberList.addToList(m); - String output = "Got it. I've added this member:\n" + m.toString() + "\n" - + "Now you have " + Member.numOfMembers + " member" + ((Member.numOfMembers == 1) ? "" : "s") - + " in the list.\n"; + String output = MemberList.addToList(m); return output; } diff --git a/src/main/java/seedu/duke/hr/MemberList.java b/src/main/java/seedu/duke/hr/MemberList.java index 1a14e73825..a110894f87 100644 --- a/src/main/java/seedu/duke/hr/MemberList.java +++ b/src/main/java/seedu/duke/hr/MemberList.java @@ -9,8 +9,12 @@ public class MemberList { * Adds member to the arraylist. * @param m member to be added. */ - public static void addToList(Member m) { + public static String addToList(Member m) { members.add(m); + String output = "Got it. I've added this member:\n" + m.toString() + "\n" + + "Now you have " + Member.numOfMembers + " member" + ((Member.numOfMembers == 1) ? "" : "s") + + " in the list.\n"; + return output; } /** @@ -20,7 +24,7 @@ public static void addToList(Member m) { public static String listMembers() { String output; if (Member.numOfMembers == 0) { - output = "Dude, the member list is empty! o_O"; + output = "OOPS!!! The member list is empty!\n"; } else { output = "Here is the list of members in your CCA:\n"; for (int i = 0; i < Member.numOfMembers; i++) { diff --git a/src/test/java/seedu/duke/HrTest.java b/src/test/java/seedu/duke/HrTest.java new file mode 100644 index 0000000000..3ab050cbda --- /dev/null +++ b/src/test/java/seedu/duke/HrTest.java @@ -0,0 +1,46 @@ +package seedu.duke; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.Test; +import seedu.duke.hr.Member; +import seedu.duke.hr.MemberList; + +public class HrTest { + + @Test + public void addListDelMember_executesNormally() { + String expected1 = "Got it. I've added this member:\n" + + "name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member\n" + + "Now you have 1 member in the list.\n"; + + String actual1 = MemberList.addToList(new Member("James Gosling", 11111111, "111111@gmail.com", "member")); + assertEquals(expected1, actual1); + + String expected2 = "Here is the list of members in your CCA:\n" + + "1.name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member\n"; + String actual2 = MemberList.listMembers(); + assertEquals(expected2, actual2); + + String expected3 = "Noted. I'll remove this member:\n" + + "name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member\n" + + "Now you have 0 member in the list.\n"; + String actual3 = MemberList.deleteFromList(0); + assertEquals(expected3, actual3); + } + + @Test + public void removeMember_MemberNotExists() { + String expected = "OOPS!!! The member does not exist.\n"; + String actual = MemberList.deleteFromList(0); + assertEquals(expected, actual); + } + + @Test + public void listMember_MemberListEmpty() { + String expected = "OOPS!!! The member list is empty!\n"; + String actual = MemberList.listMembers(); + assertEquals(expected, actual); + } +} From b485e2b20f320ae6e504ac0a8c6c98f11a3062b6 Mon Sep 17 00:00:00 2001 From: YeYutong Date: Wed, 14 Oct 2020 16:45:34 +0800 Subject: [PATCH 060/336] exceptions not implemented --- src/main/java/seedu/duke/DukeMemberListEmptyException.java | 2 +- src/main/java/seedu/duke/DukeMemberNotFoundException.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/duke/DukeMemberListEmptyException.java b/src/main/java/seedu/duke/DukeMemberListEmptyException.java index b1305b7245..cb2fc0464a 100644 --- a/src/main/java/seedu/duke/DukeMemberListEmptyException.java +++ b/src/main/java/seedu/duke/DukeMemberListEmptyException.java @@ -4,7 +4,7 @@ public class DukeMemberListEmptyException extends DukeException { - public void DukeMemberListEmptyException() { + public DukeMemberListEmptyException() { printMessage(); } diff --git a/src/main/java/seedu/duke/DukeMemberNotFoundException.java b/src/main/java/seedu/duke/DukeMemberNotFoundException.java index e19ad52805..5e210f8cf0 100644 --- a/src/main/java/seedu/duke/DukeMemberNotFoundException.java +++ b/src/main/java/seedu/duke/DukeMemberNotFoundException.java @@ -2,7 +2,7 @@ public class DukeMemberNotFoundException extends DukeException { - public void DukeMemberNotFoundException() { + public DukeMemberNotFoundException() { printMessage(); } From 03d1e6e16fd08ac76b112ec22f6493bb3177a8bf Mon Sep 17 00:00:00 2001 From: YeYutong Date: Wed, 14 Oct 2020 16:52:36 +0800 Subject: [PATCH 061/336] checkstye1 --- src/test/java/seedu/duke/HrTest.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/java/seedu/duke/HrTest.java b/src/test/java/seedu/duke/HrTest.java index 3ab050cbda..6e06baa938 100644 --- a/src/test/java/seedu/duke/HrTest.java +++ b/src/test/java/seedu/duke/HrTest.java @@ -11,21 +11,21 @@ public class HrTest { @Test public void addListDelMember_executesNormally() { - String expected1 = "Got it. I've added this member:\n" + - "name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member\n" + - "Now you have 1 member in the list.\n"; + String expected1 = "Got it. I've added this member:\n" + + "name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member\n" + + "Now you have 1 member in the list.\n"; String actual1 = MemberList.addToList(new Member("James Gosling", 11111111, "111111@gmail.com", "member")); assertEquals(expected1, actual1); - String expected2 = "Here is the list of members in your CCA:\n" + - "1.name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member\n"; + String expected2 = "Here is the list of members in your CCA:\n" + + "1.name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member\n"; String actual2 = MemberList.listMembers(); assertEquals(expected2, actual2); - String expected3 = "Noted. I'll remove this member:\n" + - "name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member\n" + - "Now you have 0 member in the list.\n"; + String expected3 = "Noted. I'll remove this member:\n" + + "name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member\n" + + "Now you have 0 member in the list.\n"; String actual3 = MemberList.deleteFromList(0); assertEquals(expected3, actual3); } From 59caf7479cd5655a26876a33a369e2a084cf9553 Mon Sep 17 00:00:00 2001 From: John Date: Wed, 14 Oct 2020 19:26:53 +0800 Subject: [PATCH 062/336] Implement FileManager --- .../seedu/duke/DukeFileFormatException.java | 4 +++ .../seedu/duke/DukeFileHeaderException.java | 4 +++ .../java/seedu/duke/backend/FileManager.java | 26 ++++++++++++++----- 3 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 src/main/java/seedu/duke/DukeFileFormatException.java create mode 100644 src/main/java/seedu/duke/DukeFileHeaderException.java diff --git a/src/main/java/seedu/duke/DukeFileFormatException.java b/src/main/java/seedu/duke/DukeFileFormatException.java new file mode 100644 index 0000000000..27dc52b207 --- /dev/null +++ b/src/main/java/seedu/duke/DukeFileFormatException.java @@ -0,0 +1,4 @@ +package seedu.duke; + +public class DukeFileFormatException extends DukeException{ +} diff --git a/src/main/java/seedu/duke/DukeFileHeaderException.java b/src/main/java/seedu/duke/DukeFileHeaderException.java new file mode 100644 index 0000000000..051d4567bd --- /dev/null +++ b/src/main/java/seedu/duke/DukeFileHeaderException.java @@ -0,0 +1,4 @@ +package seedu.duke; + +public class DukeFileHeaderException extends DukeException{ +} diff --git a/src/main/java/seedu/duke/backend/FileManager.java b/src/main/java/seedu/duke/backend/FileManager.java index 55bc2fe65c..07ce5a6e8d 100644 --- a/src/main/java/seedu/duke/backend/FileManager.java +++ b/src/main/java/seedu/duke/backend/FileManager.java @@ -1,5 +1,7 @@ package seedu.duke.backend; +import seedu.duke.DukeFileFormatException; +import seedu.duke.DukeFileHeaderException; import seedu.duke.event.Event; import seedu.duke.event.EventList; import seedu.duke.finance.FinanceList; @@ -45,6 +47,11 @@ public void saveAll() throws IOException { saveMembers(path + "members.csv"); } + public void readAll() throws DukeFileFormatException, DukeFileHeaderException, IOException { + readEvents(path + "events.csv"); + readFinance(path + "finance.csv"); + readMembers(path + "members.csv"); + } /** * Saves all the events currently in memory to a csv file. * @param fileName The name of the file, including the path if necessary @@ -111,7 +118,8 @@ public static void saveFile(String fileName, String data) throws IOException { * @return A HashMap containing the header and all column entries under the header as an ArrayList * @throws IOException If the file cannot be found or a read error is encountered */ - public static HashMap> readFile(String filename, String headers) throws IOException { + public static HashMap> readFile(String filename, String headers) + throws IOException, DukeFileHeaderException, DukeFileFormatException { BufferedReader csvReader = new BufferedReader(new FileReader(filename)); HashMap> map = new HashMap<>(); String row; @@ -123,7 +131,7 @@ public static HashMap> readFile(String filename, Strin if (header) { // Process file header if (!row.equalsIgnoreCase(headers)) { - return null; + throw new DukeFileHeaderException(); } for (String s : data) { map.put(s, new ArrayList()); @@ -138,17 +146,19 @@ public static HashMap> readFile(String filename, Strin } if (i != headerOrder.length) { // Column mismatch! - return null; + throw new DukeFileFormatException(); } } return map; } - public static HashMap> readFile(String filename) throws IOException { + public static HashMap> readFile(String filename) + throws IOException, DukeFileHeaderException, DukeFileFormatException { return readFile(filename, null); } - public static void readFinance(String filename) throws IOException { + public static void readFinance(String filename) + throws IOException, DukeFileHeaderException, DukeFileFormatException { HashMap> data = readFile(filename); // Validate size of any column int rows = data.get("Name").size(); @@ -158,7 +168,8 @@ public static void readFinance(String filename) throws IOException { } } - public static void readEvents(String filename) throws IOException { + public static void readEvents(String filename) + throws IOException, DukeFileHeaderException, DukeFileFormatException { HashMap> data = readFile(filename); // Validate size of any column int rows = data.get("Name").size(); @@ -168,7 +179,8 @@ public static void readEvents(String filename) throws IOException { } } - public static void readMembers(String filename) throws IOException { + public static void readMembers(String filename) + throws IOException, DukeFileHeaderException, DukeFileFormatException { HashMap> data = readFile(filename); // Validate size of any column int rows = data.get("Name").size(); From ff6698fa3018e717249596a2516d04d9fd5f2202 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Wed, 14 Oct 2020 22:28:03 +0800 Subject: [PATCH 063/336] Make finance more defensive --- build.gradle | 1 + src/main/java/seedu/duke/Command.java | 2 +- ...ukeFinanceAddDescriptionLostException.java | 4 +++ src/main/java/seedu/duke/backend/Ui.java | 16 +++++++----- .../seedu/duke/finance/CommandFinanceAdd.java | 14 ++++++++--- .../seedu/duke/finance/CommandFinanceDel.java | 2 +- .../duke/finance/CommandFinanceSummary.java | 2 +- .../java/seedu/duke/finance/FinanceList.java | 13 +++++++--- src/test/java/seedu/duke/DukeTest.java | 20 --------------- .../java/seedu/duke/finance/FinanceTest.java | 25 +++++++++++++++++++ 10 files changed, 64 insertions(+), 35 deletions(-) create mode 100644 src/main/java/seedu/duke/DukeFinanceAddDescriptionLostException.java create mode 100644 src/test/java/seedu/duke/finance/FinanceTest.java diff --git a/build.gradle b/build.gradle index b0c5528fb5..91fffd027d 100644 --- a/build.gradle +++ b/build.gradle @@ -43,4 +43,5 @@ checkstyle { run{ standardInput = System.in + enableAssertions = true } diff --git a/src/main/java/seedu/duke/Command.java b/src/main/java/seedu/duke/Command.java index bc101dc963..b2a9b2f34f 100644 --- a/src/main/java/seedu/duke/Command.java +++ b/src/main/java/seedu/duke/Command.java @@ -25,7 +25,7 @@ public int validate(UserInput input) { * Runs the actual command processing. * @return String message to be printed to the user. */ - public abstract String execute(); + public abstract String execute() throws DukeFinanceAddDescriptionLostException; /** * Provides information about command usage. diff --git a/src/main/java/seedu/duke/DukeFinanceAddDescriptionLostException.java b/src/main/java/seedu/duke/DukeFinanceAddDescriptionLostException.java new file mode 100644 index 0000000000..c804c08452 --- /dev/null +++ b/src/main/java/seedu/duke/DukeFinanceAddDescriptionLostException.java @@ -0,0 +1,4 @@ +package seedu.duke; + +public class DukeFinanceAddDescriptionLostException extends DukeException { +} diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index 86fa6c241b..6c8311e8b3 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -1,20 +1,21 @@ package seedu.duke.backend; import seedu.duke.Command; -import seedu.duke.finance.CommandFinanceAdd; -import seedu.duke.finance.CommandFinanceDel; -import seedu.duke.finance.CommandFinanceSummary; -import seedu.duke.finance.FinanceLog; +import seedu.duke.DukeArgumentException; +import seedu.duke.DukeFinanceAddDescriptionLostException; +import seedu.duke.DukeNoMatchException; import seedu.duke.event.CommandEventAdd; import seedu.duke.event.CommandEventDel; import seedu.duke.event.CommandEventList; -import seedu.duke.DukeArgumentException; -import seedu.duke.DukeNoMatchException; +import seedu.duke.finance.CommandFinanceAdd; +import seedu.duke.finance.CommandFinanceDel; +import seedu.duke.finance.CommandFinanceSummary; import seedu.duke.hr.CommandAddMember; import seedu.duke.hr.CommandDelMember; import seedu.duke.hr.CommandViewMember; import seedu.duke.others.CommandBye; import seedu.duke.others.CommandHelp; + import java.util.ArrayList; import java.util.Scanner; @@ -45,6 +46,9 @@ public void run() { // Placeholder if additional routine is required when user enters incorrect parameters } catch (DukeNoMatchException ne) { printOutput("No such command. Try 'help' for a list of commands."); + } catch (DukeFinanceAddDescriptionLostException e) { + printOutput("Please enter the complete command. Format is:" + + "finance addLog content number"); } catch (Exception e) { printOutput("Command execution failed with an unhandled error!", true); } diff --git a/src/main/java/seedu/duke/finance/CommandFinanceAdd.java b/src/main/java/seedu/duke/finance/CommandFinanceAdd.java index ae07d1395b..ba3ba34cef 100644 --- a/src/main/java/seedu/duke/finance/CommandFinanceAdd.java +++ b/src/main/java/seedu/duke/finance/CommandFinanceAdd.java @@ -1,18 +1,26 @@ package seedu.duke.finance; import seedu.duke.Command; +import seedu.duke.DukeFinanceAddDescriptionLostException; import seedu.duke.backend.UserInput; -//import seedu.duke.finance.financelog; +import java.util.logging.Logger; public class CommandFinanceAdd extends Command { - UserInput userinput; + private UserInput userinput; + private Logger logger = Logger.getGlobal(); @Override - public String execute() { + public String execute() throws DukeFinanceAddDescriptionLostException { + logger.info("Start adding finance log...\n"); String input = userinput.getArg(""); + if (input==null) { + logger.warning("The input format is wrong.\n"); + throw new DukeFinanceAddDescriptionLostException(); + } String[] contents = input.trim().split(" "); FinanceLog fl = new FinanceLog(contents[0],Double.parseDouble(contents[1])); String output = FinanceList.addLog(fl); + logger.info("End adding...\n"); return output; } diff --git a/src/main/java/seedu/duke/finance/CommandFinanceDel.java b/src/main/java/seedu/duke/finance/CommandFinanceDel.java index d246eceae4..e36ad72006 100644 --- a/src/main/java/seedu/duke/finance/CommandFinanceDel.java +++ b/src/main/java/seedu/duke/finance/CommandFinanceDel.java @@ -4,7 +4,7 @@ import seedu.duke.backend.UserInput; public class CommandFinanceDel extends Command { - UserInput userinput; + private UserInput userinput; @Override public String execute() { diff --git a/src/main/java/seedu/duke/finance/CommandFinanceSummary.java b/src/main/java/seedu/duke/finance/CommandFinanceSummary.java index d9b43e9aca..c59a8715fc 100644 --- a/src/main/java/seedu/duke/finance/CommandFinanceSummary.java +++ b/src/main/java/seedu/duke/finance/CommandFinanceSummary.java @@ -4,7 +4,7 @@ import seedu.duke.backend.UserInput; public class CommandFinanceSummary extends Command { - UserInput userinput; + private UserInput userinput; @Override public String execute() { diff --git a/src/main/java/seedu/duke/finance/FinanceList.java b/src/main/java/seedu/duke/finance/FinanceList.java index f6e0f3b436..bae3fe3479 100644 --- a/src/main/java/seedu/duke/finance/FinanceList.java +++ b/src/main/java/seedu/duke/finance/FinanceList.java @@ -1,10 +1,11 @@ package seedu.duke.finance; import java.util.ArrayList; -import java.util.concurrent.ExecutionException; +import java.util.logging.Logger; public class FinanceList { public static ArrayList financeLogs = new ArrayList(); + public static Logger logger = Logger.getGlobal(); /** * Add one log into the finance list. @@ -32,6 +33,8 @@ public static String addLog(FinanceLog fl) { */ public static String dellog(int index) { try { + logger.info("Start deleting...\n"); + assert index>0 : "The index must > 0"; financeLogs.remove(index - 1); FinanceLog.finSize--; String output2; @@ -42,11 +45,12 @@ public static String dellog(int index) { } String output1 = "Got it! I've removed this from list.\n"; String output = output1 + output2; + logger.info("End deleting...\n"); return output; } catch (IndexOutOfBoundsException e) { - System.out.println("Your index input does not exist in the list"); + logger.warning("The index is out of bound.\n"); + return "Your index input does not exist in the list"; } - return null; } /** @@ -54,7 +58,9 @@ public static String dellog(int index) { * @return the finance list */ public static String summary() { + logger.info("Start listing summary...\n"); if (FinanceLog.getSize() == 0) { + logger.warning("The list is empty.\n"); return "Sorry, your finance list is empty.\n"; } String output = "Here is the list:\n"; @@ -63,6 +69,7 @@ public static String summary() { + financeLogs.get(i).getLogVal() + "\n"); } output = output.concat("Total budget: $" + String.format("%.2f",FinanceLog.getSum()) + "\n"); + logger.info("End processing..."); return output; } } diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java index 1b626890d4..fdbd147ad4 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/DukeTest.java @@ -5,8 +5,6 @@ import org.junit.jupiter.api.Test; -import seedu.duke.finance.FinanceList; -import seedu.duke.finance.FinanceLog; import seedu.duke.backend.Parser; import seedu.duke.backend.UserInput; @@ -25,24 +23,6 @@ public void sampleTest() { assertTrue(true); } - @Test - public void testFinance() { - String expected1 = "Got it! I've added this to the list.\n" - + "\t1.write $12.5\n" - + "There is 1 log in the list now.\n"; - String actual1 = FinanceList.addLog(new FinanceLog("write", 12.5)); - assertEquals(expected1, actual1); - String expected2 = "Here is the list:\n" - + "\t1.write $12.5\n" - + "Total budget: $12.50\n"; - String actual2 = FinanceList.summary(); - assertEquals(expected2, actual2); - String expected3 = "Got it! I've removed this from list.\n" - + "There is 0 log in the list now.\n"; - String actual3 = FinanceList.dellog(1); - assertEquals(expected3, actual3); - } - @Test public void testParser() { // Base Case diff --git a/src/test/java/seedu/duke/finance/FinanceTest.java b/src/test/java/seedu/duke/finance/FinanceTest.java new file mode 100644 index 0000000000..0fc7820b62 --- /dev/null +++ b/src/test/java/seedu/duke/finance/FinanceTest.java @@ -0,0 +1,25 @@ +package seedu.duke.finance; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class FinanceTest { + @Test + void testver1Finance() { + String expected1 = "Got it! I've added this to the list.\n" + + "\t1.write $12.5\n" + + "There is 1 log in the list now.\n"; + String actual1 = FinanceList.addLog(new FinanceLog("write", 12.5)); + assertEquals(expected1, actual1); + String expected2 = "Here is the list:\n" + + "\t1.write $12.5\n" + + "Total budget: $12.50\n"; + String actual2 = FinanceList.summary(); + assertEquals(expected2, actual2); + String expected3 = "Got it! I've removed this from list.\n" + + "There is 0 log in the list now.\n"; + String actual3 = FinanceList.dellog(1); + assertEquals(expected3, actual3); + } +} \ No newline at end of file From a4258bddce7853526feca5a06211e8f328310fdf Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Wed, 14 Oct 2020 22:32:57 +0800 Subject: [PATCH 064/336] Make code more defensive --- src/main/java/seedu/duke/finance/CommandFinanceAdd.java | 2 +- src/main/java/seedu/duke/finance/FinanceList.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/duke/finance/CommandFinanceAdd.java b/src/main/java/seedu/duke/finance/CommandFinanceAdd.java index ba3ba34cef..87af4c4cf2 100644 --- a/src/main/java/seedu/duke/finance/CommandFinanceAdd.java +++ b/src/main/java/seedu/duke/finance/CommandFinanceAdd.java @@ -13,7 +13,7 @@ public class CommandFinanceAdd extends Command { public String execute() throws DukeFinanceAddDescriptionLostException { logger.info("Start adding finance log...\n"); String input = userinput.getArg(""); - if (input==null) { + if (input == null) { logger.warning("The input format is wrong.\n"); throw new DukeFinanceAddDescriptionLostException(); } diff --git a/src/main/java/seedu/duke/finance/FinanceList.java b/src/main/java/seedu/duke/finance/FinanceList.java index bae3fe3479..b3599a9227 100644 --- a/src/main/java/seedu/duke/finance/FinanceList.java +++ b/src/main/java/seedu/duke/finance/FinanceList.java @@ -34,7 +34,7 @@ public static String addLog(FinanceLog fl) { public static String dellog(int index) { try { logger.info("Start deleting...\n"); - assert index>0 : "The index must > 0"; + assert index > 0 : "The index must > 0"; financeLogs.remove(index - 1); FinanceLog.finSize--; String output2; From e4aa9c8a0e7d93fa782d548d61aac3260b31ea10 Mon Sep 17 00:00:00 2001 From: John Date: Wed, 14 Oct 2020 23:23:30 +0800 Subject: [PATCH 065/336] Add basic logging to FileManager --- src/main/java/seedu/duke/backend/FileManager.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/duke/backend/FileManager.java b/src/main/java/seedu/duke/backend/FileManager.java index aa5d23c2a3..d9abdc28ef 100644 --- a/src/main/java/seedu/duke/backend/FileManager.java +++ b/src/main/java/seedu/duke/backend/FileManager.java @@ -20,13 +20,15 @@ import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; +import java.util.logging.Level; +import java.util.logging.Logger; public class FileManager { // Todo support RFC 4180 CSV standard and handle rogue characters private static final String HEADERS_MEMBERS = "Name,Phone,Email,Role"; private static final String HEADERS_FINANCE = "Name,Value"; private static final String HEADERS_EVENT = "Name,Date,Time"; - + private static Logger logger = Logger.getLogger("FileLog"); private String path; // if not the working directory, path should end with a slash public FileManager(String path) { @@ -51,28 +53,35 @@ public void setPath(String path) { * @throws IOException Any one of the files encounters a write error */ public void saveAll() throws IOException { + logger.log(Level.INFO, "Begin Saving All"); saveEvent(path + "events.csv"); saveFinance(path + "finance.csv"); saveMembers(path + "members.csv"); + logger.log(Level.INFO, "Finished Saving All"); } public int readAll() throws DukeFileFormatException, DukeFileHeaderException, IOException { + logger.log(Level.INFO, "Begin Loading All"); int ret = 0; try { readEvents(path + "events.csv"); } catch (FileNotFoundException fe) { ret++; + logger.log(Level.INFO, "Failed to load events"); } try { readFinance(path + "finance.csv"); } catch (FileNotFoundException fe) { ret++; + logger.log(Level.INFO, "Failed to load finance"); } try { readMembers(path + "members.csv"); } catch (FileNotFoundException fe) { ret++; + logger.log(Level.INFO, "Failed to load members"); } + logger.log(Level.INFO, "Finished loading all"); return ret; } From 5f5ef1e5a55a23691e6f8ec87c03c2e725f641ed Mon Sep 17 00:00:00 2001 From: John Date: Wed, 14 Oct 2020 23:33:13 +0800 Subject: [PATCH 066/336] Correct method name in FileManagerTest.java --- src/test/java/seedu/duke/FileManagerTest.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/test/java/seedu/duke/FileManagerTest.java b/src/test/java/seedu/duke/FileManagerTest.java index 10ba5457b7..f89c563652 100644 --- a/src/test/java/seedu/duke/FileManagerTest.java +++ b/src/test/java/seedu/duke/FileManagerTest.java @@ -6,21 +6,26 @@ import org.junit.jupiter.api.Test; import seedu.duke.backend.FileManager; -import java.io.File; + import java.io.IOException; -import java.nio.file.*; + +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; public class FileManagerTest { @Test - public void FileManagerBasicTest() { + public void fileManagerBasicTest() { // Set up test folder - String path = (int)(Math.random() * 1000000) + "/"; + String path = (int) (Math.random() * 1000000) + "/"; FileManager fm = new FileManager(path); // Test 1, basic write try { - FileManager.saveFile(path+"Test1.txt","Sample 1"); + FileManager.saveFile(path + "Test1.txt", "Sample 1"); } catch (IOException e) { e.printStackTrace(); fail("Test 01: Saving to file failed!"); @@ -28,24 +33,24 @@ public void FileManagerBasicTest() { // Test 2, Read fail try { - assertEquals(3,fm.readAll()); - } catch (Exception e){ + assertEquals(3, fm.readAll()); + } catch (Exception e) { e.printStackTrace(); fail("Test 02: Reading non-existent data failed!"); } // Test 3, Empty write - try{ + try { fm.saveAll(); - } catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); fail("Test 03: Empty write failed!"); } // Test 4, Empty read try { - assertEquals(0,fm.readAll()); - } catch (Exception e){ + assertEquals(0, fm.readAll()); + } catch (Exception e) { e.printStackTrace(); fail("Test 04: Reading file with no data failed!"); } From 6e5d1cd339f55cbe2b99571054db819b9c357f0a Mon Sep 17 00:00:00 2001 From: John Date: Wed, 14 Oct 2020 23:45:33 +0800 Subject: [PATCH 067/336] Resolve merge conflict --- src/test/java/seedu/duke/DukeTest.java | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java index 3e77475899..1593440051 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/DukeTest.java @@ -1,14 +1,10 @@ package seedu.duke; -import static org.junit.jupiter.api.Assertions.assertEquals; + import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import seedu.duke.backend.UserInput; -import seedu.duke.finance.FinanceList; -import seedu.duke.finance.FinanceLog; -import java.util.HashMap; class DukeTest { @@ -23,21 +19,4 @@ public void sampleTest() { assertTrue(true); } - @Test - public void testFinance() { - String expected1 = "Got it! I've added this to the list.\n" - + "\t1.write $12.5\n" - + "There is 1 log in the list now.\n"; - String actual1 = FinanceList.addLog(new FinanceLog("write", 12.5)); - assertEquals(expected1, actual1); - String expected2 = "Here is the list:\n" - + "\t1.write $12.5\n" - + "Total budget: $12.50\n"; - String actual2 = FinanceList.summary(); - assertEquals(expected2, actual2); - String expected3 = "Got it! I've removed this from list.\n" - + "There is 0 log in the list now.\n"; - String actual3 = FinanceList.dellog(1); - assertEquals(expected3, actual3); - } } \ No newline at end of file From 28f62ff5396814b368c61b65933b5b6625388940 Mon Sep 17 00:00:00 2001 From: John Date: Wed, 14 Oct 2020 23:57:49 +0800 Subject: [PATCH 068/336] Corrected text-ui-test to account for saved data the test cases have been removed for now as the saved data will cause the test case to fail depending on the previous state of the application when saved. --- text-ui-test/EXPECTED.TXT | 17 +++-------------- text-ui-test/input.txt | 4 ---- 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index c5fadbbb73..da0ebce44b 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -6,24 +6,13 @@ Hello from |____/ \__,_|_|\_\___| ____________________________________________________________ - No such command. Try 'help' for a list of commands. + Oops I was unable to find your saved data! ____________________________________________________________ ____________________________________________________________ - Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, help, bye + Welcome to CCA Manager Integrated! Enter any command to begin! ____________________________________________________________ ____________________________________________________________ - Got it. I've added this member: - name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member - Now you have 1 member in the list. -____________________________________________________________ -____________________________________________________________ - Here is the list of members in your CCA: - 1.name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member -____________________________________________________________ -____________________________________________________________ - Noted. I'll remove this member: - name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member - Now you have 0 member in the list. + Commands: hr add, hr delete, hr list, events add, events delete, finance addlog, finance dellog, help, bye ____________________________________________________________ ____________________________________________________________ See you next time! diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index b610df2749..ea20819dd5 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1,6 +1,2 @@ -James Gosling help -hr add /n James Gosling /p 11111111 /e 111111@gmail.com /r member -hr list -hr delete 1 bye \ No newline at end of file From 63e4162d685d97977de5032cfec6414a94050232 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Thu, 15 Oct 2020 12:57:30 +0800 Subject: [PATCH 069/336] Added User Guide --- docs/AboutUs.md | 3 -- docs/UserGuide.md | 96 ++++++++++++++++++++++++++++++++++++----------- 2 files changed, 74 insertions(+), 25 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 7c02b303c2..40cfeeee4b 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,9 +2,6 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ye Yutong | [Github](https://github.com/yeyutong811) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Ng | [Github](https://github.com/JohnNub) | [Portfolio](docs/team/johnng.md) ![](https://via.placeholder.com/100.png?text=Photo) | Varsha MS | [Github](https://github.com/Varsha3006) | [Portfolio](docs/team/johndoe.md) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index abd9fbe891..50d96d7d17 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,42 +1,94 @@ # User Guide +1. Introduction +2. Quick Start +3. Features
+ 3.1 Help `help`
+ 3.2 Exit the program: `exit`
+ 3.3 HR `HR`
+ * Add Members: `addMember`
+ * Delete Members: `delMember`
+ * View summary of members: `viewMember`
+ + 3.4 Events `event`
+ * Add events: `addEvent`
+ * Delete events: `delEvent`
+ * View Summary of events: `viewEvent`
+ + 3.5 Finance `finance`
+ * Add finance log : `addLog`
+ * Delete finance log: `delLog`
+ * View financial summary: `summary`
+ +4. FAQ +5. Command Summary +6. Glossary ## Introduction -{Give a product intro} +CCA Manager is a revolutionary tool that changes the way you can manage interest groups with unrivaled efficiency and simplicity. Its lightweight Command Line Interface (CLI) allows administrators to breeze through tasks quickly and easily while offering powerful features to advanced users. ## Quick Start -{Give steps to get started quickly} - 1. Ensure that you have Java 11 or above installed. -1. Down the latest version of `Duke` from [here](http://link.to/duke). +2. Download the latest version of CCA manager from here +3. Run the program by entering java -jar cca.java in a terminal. ## Features -{Give detailed description of each feature} - -### Adding a todo: `todo` -Adds a new item to the list of todo items. - -Format: `todo n/TODO_NAME d/DEADLINE` - -* The `DEADLINE` can be in a natural language format. -* The `TODO_NAME` cannot contain punctuation. +### 3.1 Help `help` +Shows a list of available commands
+Format: help +### 3.2 Exit the program: `bye` +Exits the program. +Format: `bye` + +### 3.3 HR features `HR`
+ +### 3.4 Event features`event`
+#### Add events: `addEvent`
+Adds an event to the list of events.
+ +Format: `event addEvent /n EVENT_NAME /d EVENT_DATE /t EVENT_TIME`
+ +Example of usage:
+ `event addEvent /n arduino course /d 2020-09-16 /t 8pm`
+ `event addEvent /n Autodesk course/d 2020-12-20 /t 8-10.30pm`
+ + #### Delete events: `delEvent`
+ Deletes an event from the list of events.
+ Format: `event delEvent EVENT_INDEX`
+ Deletes the event at the specified EVENT_INDEX.
+ + The EVENT_INDEX refers to the index number shown in the list of events.
+ The EVENT_INDEX must be an integer greater than 0.
+ + Example of usage: + `event delEvent 1`
+ `event delEvent 19`
+ +#### list events: `listEvent`
+Prints the list of events, based on the order in which they are added into the list. +Format: `event listEvent`
Example of usage: +`event listEvent` -`todo n/Write the rest of the User Guide d/next week` - -`todo n/Refactor the User Guide to remove passive voice d/13/04/2020` +### 3.5 Finance features `finance`
-## FAQ +##FAQ -**Q**: How do I transfer my data to another computer? +##Command Summary +Command | Format | Example +------- | ---------- | ------------ +help | `help` | - +bye | `bye` | - +hr | | - +addEvent | `event addEvent /n EVENT_NAME /d EVENT_DATE /t EVENT_TIME` | `event addEvent /n arduino course /d 2020-09-16 /t 8pm`
+delEvent | `event delEvent EVENT_INDEX` | `event delEvent 1` +listEvent | `event listEvent` | - +finance | |- -**A**: {your answer here} +##Glossary -## Command Summary -{Give a 'cheat sheet' of commands here} -* Add todo `todo n/TODO_NAME d/DEADLINE` From 50aef7f9cb469739bd14286c9117d1ce6694bcca Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Thu, 15 Oct 2020 15:59:56 +0800 Subject: [PATCH 070/336] Finance User Guide update and fix bug --- docs/UserGuide.md | 28 ++++++++++++++++++- src/main/java/seedu/duke/backend/Ui.java | 2 +- .../seedu/duke/finance/CommandFinanceAdd.java | 11 +++++++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 50d96d7d17..07555e4997 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -74,6 +74,30 @@ Example of usage: `event listEvent` ### 3.5 Finance features `finance`
+#### Add finance log entry: `addLog`
+Adds an entry into the finance log.
+Format: `finance addLog ITEM_NAME ITEM_VALUE`
+ +Example of usage:
+`finance addLog have lunch 5.2`
+`f addlog buy flight ticket 700`
+ +#### Delete finance log entry: `delLog`
+Removes an entry from finance log.
+Format: `finance delLog ITEM_INDEX`
+ +Example of usage:
+`finance dellog 3`
+`f delLog 10`
+ +#### View financial summary: `summary`
+Brings up a summary of the financial log and shows the total amount of money expended.
+Format: `finance summary`
+ +Example of usage:
+`finance summary`
+`f summary`
+ ##FAQ @@ -86,7 +110,9 @@ hr | | - addEvent | `event addEvent /n EVENT_NAME /d EVENT_DATE /t EVENT_TIME` | `event addEvent /n arduino course /d 2020-09-16 /t 8pm`
delEvent | `event delEvent EVENT_INDEX` | `event delEvent 1` listEvent | `event listEvent` | - -finance | |- +addLog | `finance addLog ITEM_NAME ITEM_VALUE` | `finance addLog have lunch 5.2` +delLog | `finance delLog ITEM_INDEX` | `finance delLog 2` +summary | `finance summary` | - ##Glossary diff --git a/src/main/java/seedu/duke/backend/Ui.java b/src/main/java/seedu/duke/backend/Ui.java index 6c8311e8b3..bf2d4947fb 100644 --- a/src/main/java/seedu/duke/backend/Ui.java +++ b/src/main/java/seedu/duke/backend/Ui.java @@ -48,7 +48,7 @@ public void run() { printOutput("No such command. Try 'help' for a list of commands."); } catch (DukeFinanceAddDescriptionLostException e) { printOutput("Please enter the complete command. Format is:" - + "finance addLog content number"); + + "finance addLog ITEM_NAME ITEM_VALUE"); } catch (Exception e) { printOutput("Command execution failed with an unhandled error!", true); } diff --git a/src/main/java/seedu/duke/finance/CommandFinanceAdd.java b/src/main/java/seedu/duke/finance/CommandFinanceAdd.java index 87af4c4cf2..b34b235a75 100644 --- a/src/main/java/seedu/duke/finance/CommandFinanceAdd.java +++ b/src/main/java/seedu/duke/finance/CommandFinanceAdd.java @@ -18,7 +18,16 @@ public String execute() throws DukeFinanceAddDescriptionLostException { throw new DukeFinanceAddDescriptionLostException(); } String[] contents = input.trim().split(" "); - FinanceLog fl = new FinanceLog(contents[0],Double.parseDouble(contents[1])); + int length = contents.length; + String item = ""; + for (int i = 0;i < length - 1;i++) { + if (i == length -2) { + item = item + contents[i]; + } else { + item = item + contents[i] + " "; + } + } + FinanceLog fl = new FinanceLog(item,Double.parseDouble(contents[length - 1])); String output = FinanceList.addLog(fl); logger.info("End adding...\n"); return output; From 94a5c649c7d92b5127427416b9ef7094d8419993 Mon Sep 17 00:00:00 2001 From: WangZixin67 Date: Thu, 15 Oct 2020 16:03:04 +0800 Subject: [PATCH 071/336] Finance User guide update and fix bug --- src/main/java/seedu/duke/finance/CommandFinanceAdd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/duke/finance/CommandFinanceAdd.java b/src/main/java/seedu/duke/finance/CommandFinanceAdd.java index b34b235a75..cfad100ec5 100644 --- a/src/main/java/seedu/duke/finance/CommandFinanceAdd.java +++ b/src/main/java/seedu/duke/finance/CommandFinanceAdd.java @@ -21,7 +21,7 @@ public String execute() throws DukeFinanceAddDescriptionLostException { int length = contents.length; String item = ""; for (int i = 0;i < length - 1;i++) { - if (i == length -2) { + if (i == length - 2) { item = item + contents[i]; } else { item = item + contents[i] + " "; From 4a3926ad0f50d1db37f02a5a76c6e42e7f4dd1e8 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Thu, 15 Oct 2020 17:27:03 +0800 Subject: [PATCH 072/336] added logger to event code --- src/main/java/seedu/duke/event/EventList.java | 11 ++++++++++- text-ui-test/input.txt | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/duke/event/EventList.java b/src/main/java/seedu/duke/event/EventList.java index f6d9c3a615..93068d7c75 100644 --- a/src/main/java/seedu/duke/event/EventList.java +++ b/src/main/java/seedu/duke/event/EventList.java @@ -2,20 +2,23 @@ import java.util.ArrayList; +import java.util.logging.Logger; public class EventList { public static ArrayList events = new ArrayList<>(); + public static Logger logger = Logger.getGlobal(); /** * Adds member to the arraylist. * @param event event to be added in the list. */ public static String addEvent(Event event) { + logger.info("Adding event\n"); String userOutput; events.add(event); userOutput = "Got it. I've added this Event:\n" + event.printEvent() + "\n" + "Now you have " + events.size() + " event in the list.\n"; - + logger.info("Added event to list\n"); return userOutput; } @@ -24,12 +27,14 @@ public static String addEvent(Event event) { * @param index index to be deleted from list */ public static String deleteEvent(int index) { + logger.info("Deleting event\n"); String userOutput; try { userOutput = "I'll remove this Event:\n"; userOutput = userOutput.concat(events.get(index).printEvent() + "\n"); events.remove(index); userOutput = userOutput.concat("Now you have " + events.size() + " event in the list."); + logger.info("Deleted test from list\n"); } catch (IndexOutOfBoundsException e) { userOutput = "OOPS!!! The event does not exist.Please try our help command!\n"; } @@ -37,8 +42,10 @@ public static String deleteEvent(int index) { } public static String printEventList() { + logger.info("Initialising event list\n"); String userOutput; if (events.size() == 0) { + logger.warning("Empty event list.\n"); userOutput = ("Oops! The event list is empty!"); } else { userOutput = "Here are the current events in your list:\n"; @@ -47,7 +54,9 @@ public static String printEventList() { userOutput = userOutput.concat(events.indexOf(event) + 1 + "."); userOutput = userOutput.concat(event.printEvent()); } + logger.info("Event List ready"); } + return userOutput; } diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index b610df2749..6bdf76ace3 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -3,4 +3,7 @@ help hr add /n James Gosling /p 11111111 /e 111111@gmail.com /r member hr list hr delete 1 +event addEvent /n arduino course /d 2020-09-16 /t 8pm +event delEvent 1 +event listEvent bye \ No newline at end of file From a71a0deea2deee6a60b9149aaccc50fb2002c050 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Thu, 15 Oct 2020 17:37:31 +0800 Subject: [PATCH 073/336] added logger to event code --- src/main/java/seedu/duke/event/EventList.java | 2 +- text-ui-test/input.txt | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/seedu/duke/event/EventList.java b/src/main/java/seedu/duke/event/EventList.java index 93068d7c75..53748787e1 100644 --- a/src/main/java/seedu/duke/event/EventList.java +++ b/src/main/java/seedu/duke/event/EventList.java @@ -13,7 +13,7 @@ public class EventList { * @param event event to be added in the list. */ public static String addEvent(Event event) { - logger.info("Adding event\n"); + logger.info("Adding event to list\n"); String userOutput; events.add(event); userOutput = "Got it. I've added this Event:\n" + event.printEvent() + "\n" diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 6bdf76ace3..b610df2749 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -3,7 +3,4 @@ help hr add /n James Gosling /p 11111111 /e 111111@gmail.com /r member hr list hr delete 1 -event addEvent /n arduino course /d 2020-09-16 /t 8pm -event delEvent 1 -event listEvent bye \ No newline at end of file From 242e0c9c1be9189fe43daf8f3df60bf7b1ea816f Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Thu, 15 Oct 2020 18:48:51 +0800 Subject: [PATCH 074/336] Updated help command --- src/main/java/seedu/duke/others/CommandHelp.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/duke/others/CommandHelp.java b/src/main/java/seedu/duke/others/CommandHelp.java index 0e8f371a73..45690cc433 100644 --- a/src/main/java/seedu/duke/others/CommandHelp.java +++ b/src/main/java/seedu/duke/others/CommandHelp.java @@ -6,8 +6,17 @@ public class CommandHelp extends Command { @Override public String execute() { - return "Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, " - + "help, bye"; + return "Hello! Here is a list of commands you can try:\n" + + "\t1. Add members: hr add /n NAME /p PHONE_NUMBER /e EMAIL /r ROLE\n" + + "\t2. Delete member: hr delete index\n" + + "\t3. View hr list: hr list\n" + + "\t4. Add events: event addEvent /n EVENT_NAME /d EVENT_DATE /t EVENT_TIME\n" + + "\t5. Delete event: event delEvent EVENT_INDEX\n" + + "\t6. View event list: event listEvent\n" + + "\t7. Add financial log: finance addLog ITEM_NAME ITEM_VALUE\n" + + "\t8. Delete financial log: finance delLog ITEM_INDEX\n" + + "\t9. View financial summary: finance summary\n" + + "\t10. Exit the program: bye\n"; } @Override From 68f87865a7c1a0e67b62ce857329a65d8d6ede38 Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Thu, 15 Oct 2020 18:51:58 +0800 Subject: [PATCH 075/336] Edited input.txt --- text-ui-test/EXPECTED.TXT | 3 --- text-ui-test/input.txt | 1 - 2 files changed, 4 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index c5fadbbb73..a8453d7471 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -8,9 +8,6 @@ Hello from ____________________________________________________________ No such command. Try 'help' for a list of commands. ____________________________________________________________ -____________________________________________________________ - Commands: hr add, hr delete, hr list, events add, events delete, finance add, finance delete, help, bye -____________________________________________________________ ____________________________________________________________ Got it. I've added this member: name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index b610df2749..3993f96f42 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1,5 +1,4 @@ James Gosling -help hr add /n James Gosling /p 11111111 /e 111111@gmail.com /r member hr list hr delete 1 From 7638c63698b12078f6ed907e94a883d1bcdb2b20 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 16 Oct 2020 09:38:41 +0800 Subject: [PATCH 076/336] Add META-INF --- META-INF/MANIFEST.MF | 4 ++++ src/main/java/META-INF/MANIFEST.MF | 3 +++ 2 files changed, 7 insertions(+) create mode 100644 META-INF/MANIFEST.MF create mode 100644 src/main/java/META-INF/MANIFEST.MF diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..177c473e85 --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Main-Class: seedu.duke.Duke +Class-Path: seedu.duke + diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..19e86fe56e --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: seedu.duke.Duke + From eb37ec8b06d04c3ce4be637b782d87941b4068bf Mon Sep 17 00:00:00 2001 From: "LAPTOP-LK4JO5OO\\65837" Date: Fri, 16 Oct 2020 12:34:13 +0800 Subject: [PATCH 077/336] gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 76264e19cb..d08644bcc7 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ bin/ /text-ui-test/ACTUAL.txt text-ui-test/EXPECTED-UNIX.TXT data/ +src/main/java/META-INF/MANIFEST.MF From e146de3e5f23decd82b97fb978e339a8f698d028 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 16 Oct 2020 17:56:30 +0800 Subject: [PATCH 078/336] Implement relative time in Event --- .../java/seedu/duke/backend/FileManager.java | 4 +- src/main/java/seedu/duke/event/Event.java | 66 ++++++++++++++++++- text-ui-test/EXPECTED.TXT | 6 ++ 3 files changed, 71 insertions(+), 5 deletions(-) diff --git a/src/main/java/seedu/duke/backend/FileManager.java b/src/main/java/seedu/duke/backend/FileManager.java index d9abdc28ef..9eb4f0af91 100644 --- a/src/main/java/seedu/duke/backend/FileManager.java +++ b/src/main/java/seedu/duke/backend/FileManager.java @@ -223,8 +223,8 @@ public static void readMembers(String filename) for (int i = 0; i < rows; i++) { Member tmp = new Member(data.get("Name").get(i), Integer.parseInt(data.get("Phone").get(i)), - data.get("email").get(i), - data.get("role").get(i)); + data.get("Email").get(i), + data.get("Role").get(i)); MemberList.members.add(tmp); } } diff --git a/src/main/java/seedu/duke/event/Event.java b/src/main/java/seedu/duke/event/Event.java index d51c4865e4..c547b5f307 100644 --- a/src/main/java/seedu/duke/event/Event.java +++ b/src/main/java/seedu/duke/event/Event.java @@ -1,7 +1,12 @@ package seedu.duke.event; +import java.time.DayOfWeek; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +import static java.time.temporal.TemporalAdjusters.next; public class Event { protected String eventName; @@ -11,8 +16,7 @@ public class Event { public Event(String name, String date, String time) { this.eventName = name; - this.eventTime = time; - this.setEventDate(LocalDate.parse(date)); + setDateTime(date, time); } @@ -46,8 +50,64 @@ public LocalDate getEventDate() { * @return String format of event. */ public String printEvent() { - return "Event Name: " + this.eventName + "\nDate: " + return "Event Name: " + this.eventName + "\nDate: " + date.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + "\nTime: " + this.eventTime + "\n"; } + /** + * Attempts to read the date time. If it fails, uses relative timing to try again. + * @param dateStr The Date to be processed + * @param timeStr The time to be processed + */ + public void setDateTime(String dateStr, String timeStr) { + eventTime = timeStr; + try { + LocalDate.parse(dateStr); + + } catch (DateTimeParseException e) { + // Ignore + } + LocalDateTime start = null; + if (dateStr.toLowerCase().contains("next")) { + if (dateStr.toLowerCase().matches("next\\s*mon.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.MONDAY)); + } else if (dateStr.toLowerCase().matches("next\\s*tue.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.TUESDAY)); + } else if (dateStr.toLowerCase().matches("next\\s*wed.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.WEDNESDAY)); + } else if (dateStr.toLowerCase().matches("next\\s*thu.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.THURSDAY)); + } else if (dateStr.toLowerCase().matches("next\\s*fri.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.FRIDAY)); + } else if (dateStr.toLowerCase().matches("next\\s*sat.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.SATURDAY)); + } else if (dateStr.toLowerCase().matches("next\\s*sun.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.SUNDAY)); + } + } + if (dateStr.toLowerCase().contains("end")) { + if (dateStr.toLowerCase().matches("end\\s*mon.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.MONDAY)); + } else if (dateStr.toLowerCase().matches("end\\s*tue.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.TUESDAY)); + } else if (dateStr.toLowerCase().matches("end\\s*wed.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.WEDNESDAY)); + } else if (dateStr.toLowerCase().matches("end\\s*thu.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.THURSDAY)); + } else if (dateStr.toLowerCase().matches("end\\s*fri.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.FRIDAY)); + } else if (dateStr.toLowerCase().matches("end\\s*sat.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.SATURDAY)); + } else if (dateStr.toLowerCase().matches("end\\s*sun.*")) { + start = LocalDateTime.now().with(next(DayOfWeek.SUNDAY)); + } + if (start != null) { + start = start.withHour(23).withMinute(59).withSecond(59).withNano(0); + eventTime = "23:59:59"; + } + } + if (start != null) { + date = start.toLocalDate(); + } + } } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index fd5d34e426..d1632dc948 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -8,6 +8,12 @@ Hello from ____________________________________________________________ Oops I was unable to find your saved data! ____________________________________________________________ +____________________________________________________________ + Welcome to CCA Manager Integrated! Enter any command to begin! +____________________________________________________________ +____________________________________________________________ + No such command. Try 'help' for a list of commands. +____________________________________________________________ ____________________________________________________________ Got it. I've added this member: name: James Gosling |phone: 11111111 |email: 111111@gmail.com |role: member From fdd8808de1eb9e95dd9f30322ac67fe5fbbca6ca Mon Sep 17 00:00:00 2001 From: John Date: Fri, 16 Oct 2020 18:44:06 +0800 Subject: [PATCH 079/336] Correction to setDateTime --- src/main/java/seedu/duke/event/Event.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/seedu/duke/event/Event.java b/src/main/java/seedu/duke/event/Event.java index c547b5f307..175b573fab 100644 --- a/src/main/java/seedu/duke/event/Event.java +++ b/src/main/java/seedu/duke/event/Event.java @@ -62,11 +62,14 @@ public String printEvent() { public void setDateTime(String dateStr, String timeStr) { eventTime = timeStr; try { - LocalDate.parse(dateStr); + date = LocalDate.parse(dateStr); } catch (DateTimeParseException e) { // Ignore } + if(date != null){ + return; + } LocalDateTime start = null; if (dateStr.toLowerCase().contains("next")) { if (dateStr.toLowerCase().matches("next\\s*mon.*")) { From daf1a2d3402c33fd89b673b4d6caa09a91e14f17 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 16 Oct 2020 18:57:07 +0800 Subject: [PATCH 080/336] Corrected the correction of the correction --- src/main/java/seedu/duke/event/Event.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/seedu/duke/event/Event.java b/src/main/java/seedu/duke/event/Event.java index 175b573fab..95d209cf24 100644 --- a/src/main/java/seedu/duke/event/Event.java +++ b/src/main/java/seedu/duke/event/Event.java @@ -67,7 +67,7 @@ public void setDateTime(String dateStr, String timeStr) { } catch (DateTimeParseException e) { // Ignore } - if(date != null){ + if (date != null) { return; } LocalDateTime start = null; From f2839e7c3d423c028328454ffb1c4c3ff0393a13 Mon Sep 17 00:00:00 2001 From: John Date: Sat, 17 Oct 2020 17:54:04 +0800 Subject: [PATCH 081/336] Add Shorthand Command for Event --- .../seedu/duke/event/CommandEventAdd.java | 24 ++++++++++++++----- .../seedu/duke/event/CommandEventDel.java | 6 +++-- .../seedu/duke/event/CommandEventList.java | 4 +++- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/main/java/seedu/duke/event/CommandEventAdd.java b/src/main/java/seedu/duke/event/CommandEventAdd.java index 89fb482f7b..61fd64a65a 100644 --- a/src/main/java/seedu/duke/event/CommandEventAdd.java +++ b/src/main/java/seedu/duke/event/CommandEventAdd.java @@ -6,20 +6,32 @@ public class CommandEventAdd extends Command { private UserInput userInput; + private Event cachedEvent; @Override public String execute() { - Event m = new Event(userInput.getArg("n"), userInput.getArg("d"), userInput.getArg("t")); - String output = EventList.addEvent(m); + if (cachedEvent == null) { + return "Unable to create event! Please check your inputs again!"; + } + String output = EventList.addEvent(cachedEvent); return output; } @Override public int validate(UserInput ui) { userInput = ui; - if (userInput.getCategory().equals("event") && userInput.getCommand().equalsIgnoreCase("addEvent")) { - if (ui.getNumArgs() == 3) { - if ((ui.getArg("n") != null) && (ui.getArg("d") != null) && (ui.getArg("t") != null)) { + if (userInput.getCategory().equals("event") && (userInput.getCommand().equalsIgnoreCase("addEvent") + || userInput.getCommand().equalsIgnoreCase("add") + || userInput.getCommand().equalsIgnoreCase("a"))) { + if (ui.getNumArgs() >= 3) { + if ((ui.getArg("n") == null) || (ui.getArg("d") == null) || (ui.getArg("t") == null)) { + return ARGUMENT_ERR; + } + if ((ui.getArg("n").equals("")) || (ui.getArg("d").equals("")) || (ui.getArg("t").equals(""))) { + return ARGUMENT_ERR; + } + cachedEvent = new Event(userInput.getArg("n"), userInput.getArg("d"), userInput.getArg("t")); + if (cachedEvent.date != null) { return ACCEPT; } } @@ -32,6 +44,6 @@ public int validate(UserInput ui) { @Override public String help() { - return null; + return "Syntax: event addEvent /n /d /t