From 3df2fd6d4dbcaeccaafc298c8d8eb6c1a97777c5 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simaeshmu@gmail.com>
Date: Tue, 1 Nov 2022 17:10:12 -0400
Subject: [PATCH 01/24] Added CollaborativeTask and Invitation Classes.

---
 src/main/java/entities/CollaborativeTask.java | 108 ++++++++++++++++++
 src/main/java/entities/Invitation.java        |  23 ++++
 2 files changed, 131 insertions(+)
 create mode 100644 src/main/java/entities/CollaborativeTask.java
 create mode 100644 src/main/java/entities/Invitation.java

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
new file mode 100644
index 0000000..61e1dd5
--- /dev/null
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -0,0 +1,108 @@
+package entities;
+
+import java.util.ArrayList;
+
+public class CollaborativeTask extends Task implements Timeblockable{
+    private boolean recurring;
+    private String frequency;
+    private ArrayList<StudentUser> teammates;
+    private ArrayList<StudentUser> pendingTeammates;
+    private ArrayList<StudentUser> declinedTeammates;
+    private StudentUser leader;
+
+    /**
+     * Create a CollaborativeTask with a title
+     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
+     * Otherwise, the frequency is blank
+     * @param title - the title of the Collaborative Task
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     */
+    public CollaborativeTask(String title, boolean recurring, String frequency, StudentUser creator) {
+        super(title);
+        this.recurring = recurring;
+        if (recurring) this.frequency = frequency;
+        else this.frequency = "";
+        this.leader = creator;
+    }
+
+    /**
+     * Create a Collaborative Task with a title and priority
+     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
+     * Otherwise, the frequency is blank
+     * @param title - the title of the Collaborative Task
+     * @param priority - the priority value of the Collaborative Task
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     */
+    public CollaborativeTask(String title, int priority, boolean recurring, String frequency) {
+        super(title, priority);
+        this.recurring = recurring;
+        this.frequency = frequency;
+    }
+
+    /**
+     * Set a Collaborative Task as recurring/not
+     * Set its new frequency if it is recurring
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     */
+    protected void setRecurring(boolean recurring, String frequency) {
+        if (recurring) this.frequency = frequency;
+    }
+
+    /**
+     * Set a new time block
+     * @param newTimeBlock - the new time block of the Collaborative Task
+     */
+    public void setTimeBlock(int[] newTimeBlock) {
+
+    }
+
+    /**
+     * Get the time block of an Collaborative Task
+     * @return - the time block of the Collaborative Task
+     */
+    public int[] getTimeBlock() {
+        return this.timeBlock;
+    }
+
+    /**
+     * Schedule a time block for the user
+     * @return - whether the time block has been successfully scheduled
+     */
+    public boolean scheduleTimeBlock() {
+        return true;
+    }
+
+    /**
+     * Remove a time block from the user's schedule
+     * @return - whether the time block has been successfully removed
+     */
+    public boolean removeTimeBlock() {
+        return true;
+    }
+
+    /**
+     * Delete a Collaborative Task by moving it to the user's archive
+     * @return - whether the Collaborative Task has been successfully deleted
+     */
+    protected boolean delete() {
+        return true;
+    }
+
+    /**
+     * Save a Collaborative Task to the user's data
+     * @return - whether the Collaborative Task has been successfully saved
+     */
+    protected boolean save() {
+        return true;
+    }
+
+    /**
+     * Edit the features of the Collaborative Task
+     */
+    protected void edit() {
+
+    }
+}
diff --git a/src/main/java/entities/Invitation.java b/src/main/java/entities/Invitation.java
new file mode 100644
index 0000000..b64de0e
--- /dev/null
+++ b/src/main/java/entities/Invitation.java
@@ -0,0 +1,23 @@
+package entities;
+
+import java.util.ArrayList;
+
+public class Invitation {
+    private CollaborativeTask collaborativeTask;
+    private StudentUser sender;
+    private ArrayList<StudentUser> receivers;
+    private String status;
+
+    /**
+     * Create an invitation.
+     * @param collaborativeTask - the CollaborativeTask to which the receiver is being invited to join.
+     * @param sender - the StudentUser sending the invitation.
+     * @param receivers - the StudentUsers receiving the invitation.
+     */
+    public Invitation(CollaborativeTask collaborativeTask, StudentUser sender, ArrayList<StudentUser> receivers) {
+        this.collaborativeTask = collaborativeTask;
+        this.sender = sender;
+        this.receivers = receivers;
+        this.status = "Pending";
+    }
+}

From 57c5f560e23be0e07f73488191043fb4b1f06d5f Mon Sep 17 00:00:00 2001
From: sshmuylovich <simaeshmu@gmail.com>
Date: Tue, 1 Nov 2022 17:10:12 -0400
Subject: [PATCH 02/24] Added CollaborativeTask and Invitation Classes.

---
 src/main/java/entities/CollaborativeTask.java | 108 ++++++++++++++++++
 src/main/java/entities/Invitation.java        |  23 ++++
 2 files changed, 131 insertions(+)
 create mode 100644 src/main/java/entities/CollaborativeTask.java
 create mode 100644 src/main/java/entities/Invitation.java

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
new file mode 100644
index 0000000..61e1dd5
--- /dev/null
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -0,0 +1,108 @@
+package entities;
+
+import java.util.ArrayList;
+
+public class CollaborativeTask extends Task implements Timeblockable{
+    private boolean recurring;
+    private String frequency;
+    private ArrayList<StudentUser> teammates;
+    private ArrayList<StudentUser> pendingTeammates;
+    private ArrayList<StudentUser> declinedTeammates;
+    private StudentUser leader;
+
+    /**
+     * Create a CollaborativeTask with a title
+     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
+     * Otherwise, the frequency is blank
+     * @param title - the title of the Collaborative Task
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     */
+    public CollaborativeTask(String title, boolean recurring, String frequency, StudentUser creator) {
+        super(title);
+        this.recurring = recurring;
+        if (recurring) this.frequency = frequency;
+        else this.frequency = "";
+        this.leader = creator;
+    }
+
+    /**
+     * Create a Collaborative Task with a title and priority
+     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
+     * Otherwise, the frequency is blank
+     * @param title - the title of the Collaborative Task
+     * @param priority - the priority value of the Collaborative Task
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     */
+    public CollaborativeTask(String title, int priority, boolean recurring, String frequency) {
+        super(title, priority);
+        this.recurring = recurring;
+        this.frequency = frequency;
+    }
+
+    /**
+     * Set a Collaborative Task as recurring/not
+     * Set its new frequency if it is recurring
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     */
+    protected void setRecurring(boolean recurring, String frequency) {
+        if (recurring) this.frequency = frequency;
+    }
+
+    /**
+     * Set a new time block
+     * @param newTimeBlock - the new time block of the Collaborative Task
+     */
+    public void setTimeBlock(int[] newTimeBlock) {
+
+    }
+
+    /**
+     * Get the time block of an Collaborative Task
+     * @return - the time block of the Collaborative Task
+     */
+    public int[] getTimeBlock() {
+        return this.timeBlock;
+    }
+
+    /**
+     * Schedule a time block for the user
+     * @return - whether the time block has been successfully scheduled
+     */
+    public boolean scheduleTimeBlock() {
+        return true;
+    }
+
+    /**
+     * Remove a time block from the user's schedule
+     * @return - whether the time block has been successfully removed
+     */
+    public boolean removeTimeBlock() {
+        return true;
+    }
+
+    /**
+     * Delete a Collaborative Task by moving it to the user's archive
+     * @return - whether the Collaborative Task has been successfully deleted
+     */
+    protected boolean delete() {
+        return true;
+    }
+
+    /**
+     * Save a Collaborative Task to the user's data
+     * @return - whether the Collaborative Task has been successfully saved
+     */
+    protected boolean save() {
+        return true;
+    }
+
+    /**
+     * Edit the features of the Collaborative Task
+     */
+    protected void edit() {
+
+    }
+}
diff --git a/src/main/java/entities/Invitation.java b/src/main/java/entities/Invitation.java
new file mode 100644
index 0000000..b64de0e
--- /dev/null
+++ b/src/main/java/entities/Invitation.java
@@ -0,0 +1,23 @@
+package entities;
+
+import java.util.ArrayList;
+
+public class Invitation {
+    private CollaborativeTask collaborativeTask;
+    private StudentUser sender;
+    private ArrayList<StudentUser> receivers;
+    private String status;
+
+    /**
+     * Create an invitation.
+     * @param collaborativeTask - the CollaborativeTask to which the receiver is being invited to join.
+     * @param sender - the StudentUser sending the invitation.
+     * @param receivers - the StudentUsers receiving the invitation.
+     */
+    public Invitation(CollaborativeTask collaborativeTask, StudentUser sender, ArrayList<StudentUser> receivers) {
+        this.collaborativeTask = collaborativeTask;
+        this.sender = sender;
+        this.receivers = receivers;
+        this.status = "Pending";
+    }
+}

From 2400f35cf0de6cc26821f6d53492a76f3d24956f Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sat, 19 Nov 2022 14:09:41 -0500
Subject: [PATCH 03/24] Renamed directory folder entities to Entities so
 imports were working correctly.

---
 src/main/java/{entities => Entities}/InstructorUser.java   | 3 +--
 src/main/java/{entities => Entities}/StudentUser.java      | 2 +-
 src/main/java/{entities => Entities}/User.java             | 2 +-
 src/main/java/{entities => Entities}/UserWhisperer.java    | 2 +-
 src/main/java/{entities => Entities}/internalUserList.java | 2 +-
 5 files changed, 5 insertions(+), 6 deletions(-)
 rename src/main/java/{entities => Entities}/InstructorUser.java (89%)
 rename src/main/java/{entities => Entities}/StudentUser.java (99%)
 rename src/main/java/{entities => Entities}/User.java (94%)
 rename src/main/java/{entities => Entities}/UserWhisperer.java (95%)
 rename src/main/java/{entities => Entities}/internalUserList.java (94%)

diff --git a/src/main/java/entities/InstructorUser.java b/src/main/java/Entities/InstructorUser.java
similarity index 89%
rename from src/main/java/entities/InstructorUser.java
rename to src/main/java/Entities/InstructorUser.java
index 3096ae2..f3121de 100644
--- a/src/main/java/entities/InstructorUser.java
+++ b/src/main/java/Entities/InstructorUser.java
@@ -1,7 +1,6 @@
-package entities;
+package Entities;
 
 import java.util.ArrayList;
-import java.util.List;
 
 public class InstructorUser extends User {
 
diff --git a/src/main/java/entities/StudentUser.java b/src/main/java/Entities/StudentUser.java
similarity index 99%
rename from src/main/java/entities/StudentUser.java
rename to src/main/java/Entities/StudentUser.java
index 102074a..761b05d 100644
--- a/src/main/java/entities/StudentUser.java
+++ b/src/main/java/Entities/StudentUser.java
@@ -1,4 +1,4 @@
-package entities;
+package Entities;
 
 import java.time.LocalDateTime;
 import java.util.*;
diff --git a/src/main/java/entities/User.java b/src/main/java/Entities/User.java
similarity index 94%
rename from src/main/java/entities/User.java
rename to src/main/java/Entities/User.java
index 85a510f..f6a0b05 100644
--- a/src/main/java/entities/User.java
+++ b/src/main/java/Entities/User.java
@@ -1,4 +1,4 @@
-package entities;
+package Entities;
 
 // Entity
 public abstract class User {
diff --git a/src/main/java/entities/UserWhisperer.java b/src/main/java/Entities/UserWhisperer.java
similarity index 95%
rename from src/main/java/entities/UserWhisperer.java
rename to src/main/java/Entities/UserWhisperer.java
index ef96570..0f29fe5 100644
--- a/src/main/java/entities/UserWhisperer.java
+++ b/src/main/java/Entities/UserWhisperer.java
@@ -1,4 +1,4 @@
-package entities;
+package Entities;
 
 // Entity
 
diff --git a/src/main/java/entities/internalUserList.java b/src/main/java/Entities/internalUserList.java
similarity index 94%
rename from src/main/java/entities/internalUserList.java
rename to src/main/java/Entities/internalUserList.java
index 962010d..ccd5879 100644
--- a/src/main/java/entities/internalUserList.java
+++ b/src/main/java/Entities/internalUserList.java
@@ -1,4 +1,4 @@
-package entities;
+package Entities;
 
 import java.util.ArrayList;
 

From 7beb17c162b8ea43093edfabcf4180af1d0c80a9 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sat, 19 Nov 2022 14:54:20 -0500
Subject: [PATCH 04/24] Added get, add, and remove methods for teammates,
 pendingteammates, and declinedteammates. Added get and set methods for
 leader. Changed setRecurring so that recurring could be changed as well as
 frequency. Added java doc comments to all methods.

---
 src/main/java/Entities/CollaborativeTask.java | 217 ++++++++++++++++++
 src/main/java/entities/CollaborativeTask.java | 108 ---------
 2 files changed, 217 insertions(+), 108 deletions(-)
 create mode 100644 src/main/java/Entities/CollaborativeTask.java
 delete mode 100644 src/main/java/entities/CollaborativeTask.java

diff --git a/src/main/java/Entities/CollaborativeTask.java b/src/main/java/Entities/CollaborativeTask.java
new file mode 100644
index 0000000..fae7606
--- /dev/null
+++ b/src/main/java/Entities/CollaborativeTask.java
@@ -0,0 +1,217 @@
+package Entities;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+
+public class CollaborativeTask extends Task implements Timeblockable{
+    private boolean recurring;
+    private String frequency;
+    private LocalDateTime startTime;
+    private LocalDateTime endTime;
+    private ArrayList<StudentUser> teammates;
+    private ArrayList<StudentUser> pendingTeammates;
+    private ArrayList<StudentUser> declinedTeammates;
+    private StudentUser leader;
+
+
+    /**
+     * Create a CollaborativeTask with a title
+     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
+     * Otherwise, the frequency is blank
+     * @param title - the title of the Collaborative Task
+     * @param id - the unique ID of the Collaborative Task
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     * @param creator - the Student User who creates the Collaborative Task
+     */
+    public CollaborativeTask(String title, String id, boolean recurring, String frequency, StudentUser creator) {
+        super(title, id);
+        this.recurring = recurring;
+        if (recurring) this.frequency = frequency;
+        else this.frequency = "";
+        this.leader = creator;
+    }
+
+    /**
+     * Create a Collaborative Task with a title and priority
+     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
+     * Otherwise, the frequency is blank
+     * @param title - the title of the Collaborative Task
+     * @param id - the unique ID of the Collaborative Task
+     * @param priority - the priority value of the Collaborative Task
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     * @param creator - the Student User who creates the Collaborative Task
+     */
+    public CollaborativeTask(String title, String id, int priority, boolean recurring, String frequency, StudentUser creator) {
+        super(title, id, priority);
+        this.recurring = recurring;
+        this.frequency = frequency;
+        this.leader = creator;
+    }
+
+    /**
+     * @return leader of the Collaborative Task
+     */
+    protected StudentUser getLeader(){
+        return this.leader;
+    }
+
+    /**
+     * Set a new leader of the Collaborative Task.
+     * This method should only be used by the current leader of the Collaborative Task.
+     * @param leader - the Student User who is going to replace the current leader of the Collaborative Task.
+     */
+    protected void setLeader(StudentUser leader){
+        this.leader = leader;
+    }
+
+    /**
+     * @return an Array List of all Student Users who are teammates on this Collaborative Task, including the leader.
+     */
+    protected ArrayList<StudentUser> getTeammates(){
+        return this.teammates;
+    }
+
+    /**
+     * To be used when invitations to join a Collaborative Task are accepted.
+     * @param newTeammates - an Array List of Student Users who are to be added as teammates.
+     */
+    protected void addTeammates(ArrayList<StudentUser> newTeammates){
+        this.teammates.addAll(newTeammates);
+    }
+
+    /**
+     * When this method is used by the leader of the Collaborative Task,
+     * the oldTeammates parameter can contain any Student User in the Collaborative Task's teammates list.
+     * When this method is used by any other teammate of the Collaborative Task,
+     * the oldTeammates parameter can only contain themselves.
+     * @param oldTeammates - an Array List of Student Users who are to be removed as teammates.
+     */
+    protected void removeTeammates(ArrayList<StudentUser> oldTeammates){
+        this.teammates.removeAll(oldTeammates);
+    }
+
+    /**
+     * @return an Array List of all Student Users who have received invitations to join
+     * the Collaborative Task but not responded.
+     */
+    protected ArrayList<StudentUser> getPendingTeammates(){
+        return this.pendingTeammates;
+    }
+
+    /**
+     * To be used when invitations to join a Collaborative Task are sent.
+     * @param newTeammates - an Array List of Student Users who are being invited to join the Collaborative Task.
+     */
+    protected void addPendingTeammates(ArrayList<StudentUser> newTeammates){
+        this.pendingTeammates.addAll(newTeammates);
+    }
+
+    /**
+     * To be used when invitations to join a Collaborative Task are canceled or responded to.
+     * @param oldTeammates - an Array List of Student Users who are no longer undergoing the process of being
+     *                       invited to join the Collaborative Task.
+     */
+    protected void removePendingTeammates(ArrayList<StudentUser> oldTeammates){
+        this.pendingTeammates.removeAll(oldTeammates);
+    }
+
+    /**
+     * @return an Array List of all Student Users who have declined invitations to join the Collaborative Task.
+     */
+    protected ArrayList<StudentUser> getDeclinedTeammates(){
+        return this.declinedTeammates;
+    }
+
+    /**
+     * To be used when invitations to join a Collaborative Task are declined.
+     * @param newTeammates - an Array List of Student Users who have declined invitations to join the Collaborative Task.
+     */
+    protected void addDeclinedTeammates(ArrayList<StudentUser> newTeammates){
+        this.declinedTeammates.addAll(newTeammates);
+    }
+
+    /**
+     * To be used when a Student User who has previously declined an invitation to join the Collaborative Task has
+     * accepted a reinvitation to join.
+     * @param oldTeammates - an Array List of Student Users who have accepted an invitation to join the Collaborative
+     *                       Task after previously declining such an invitation.
+     */
+    protected void removeDeclinedTeammates(ArrayList<StudentUser> oldTeammates){
+        this.declinedTeammates.removeAll(oldTeammates);
+    }
+
+    /**
+     * Set a Collaborative Task as recurring/not
+     * Set its new frequency if it is recurring
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     */
+    protected void setRecurring(boolean recurring, String frequency) {
+        this.recurring = recurring;
+        if (recurring) {
+            this.frequency = frequency;
+        }
+        else{
+            this.frequency = "";
+        }
+    }
+
+    /**
+     * Set a new time block
+     * @param startTime - the start of the time block
+     * @param endTime - the end of the time block
+     */
+    public void setTimeBlock(LocalDateTime startTime, LocalDateTime endTime) {
+
+    }
+
+    /**
+     * Get the time block of an Event
+     * @return - the time block of the Event
+     *         - in array form: {startTime, endTime}
+     */
+    public LocalDateTime[] getTimeBlock() {
+        return new LocalDateTime[] {this.startTime, this.endTime};
+    }
+
+    /**
+     * Schedule a time block for the user
+     * @return - whether the time block has been successfully scheduled
+     */
+    public boolean scheduleTimeBlock() {
+        return true;
+    }
+
+    /**
+     * Remove a time block from the user's schedule
+     * @return - whether the time block has been successfully removed
+     */
+    public boolean removeTimeBlock() {
+        return true;
+    }
+
+    /**
+     * Delete a Collaborative Task by moving it to the user's archive
+     * @return - whether the Collaborative Task has been successfully deleted
+     */
+    protected boolean delete() {
+        return true;
+    }
+
+    /**
+     * Save a Collaborative Task to the user's data
+     * @return - whether the Collaborative Task has been successfully saved
+     */
+    protected boolean save() {
+        return true;
+    }
+
+    /**
+     * Edit the features of the Collaborative Task.
+     */
+    protected void edit(){
+
+    }
+}
diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
deleted file mode 100644
index 61e1dd5..0000000
--- a/src/main/java/entities/CollaborativeTask.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package entities;
-
-import java.util.ArrayList;
-
-public class CollaborativeTask extends Task implements Timeblockable{
-    private boolean recurring;
-    private String frequency;
-    private ArrayList<StudentUser> teammates;
-    private ArrayList<StudentUser> pendingTeammates;
-    private ArrayList<StudentUser> declinedTeammates;
-    private StudentUser leader;
-
-    /**
-     * Create a CollaborativeTask with a title
-     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
-     * Otherwise, the frequency is blank
-     * @param title - the title of the Collaborative Task
-     * @param recurring - whether the Collaborative Task is recurring
-     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     */
-    public CollaborativeTask(String title, boolean recurring, String frequency, StudentUser creator) {
-        super(title);
-        this.recurring = recurring;
-        if (recurring) this.frequency = frequency;
-        else this.frequency = "";
-        this.leader = creator;
-    }
-
-    /**
-     * Create a Collaborative Task with a title and priority
-     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
-     * Otherwise, the frequency is blank
-     * @param title - the title of the Collaborative Task
-     * @param priority - the priority value of the Collaborative Task
-     * @param recurring - whether the Collaborative Task is recurring
-     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     */
-    public CollaborativeTask(String title, int priority, boolean recurring, String frequency) {
-        super(title, priority);
-        this.recurring = recurring;
-        this.frequency = frequency;
-    }
-
-    /**
-     * Set a Collaborative Task as recurring/not
-     * Set its new frequency if it is recurring
-     * @param recurring - whether the Collaborative Task is recurring
-     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     */
-    protected void setRecurring(boolean recurring, String frequency) {
-        if (recurring) this.frequency = frequency;
-    }
-
-    /**
-     * Set a new time block
-     * @param newTimeBlock - the new time block of the Collaborative Task
-     */
-    public void setTimeBlock(int[] newTimeBlock) {
-
-    }
-
-    /**
-     * Get the time block of an Collaborative Task
-     * @return - the time block of the Collaborative Task
-     */
-    public int[] getTimeBlock() {
-        return this.timeBlock;
-    }
-
-    /**
-     * Schedule a time block for the user
-     * @return - whether the time block has been successfully scheduled
-     */
-    public boolean scheduleTimeBlock() {
-        return true;
-    }
-
-    /**
-     * Remove a time block from the user's schedule
-     * @return - whether the time block has been successfully removed
-     */
-    public boolean removeTimeBlock() {
-        return true;
-    }
-
-    /**
-     * Delete a Collaborative Task by moving it to the user's archive
-     * @return - whether the Collaborative Task has been successfully deleted
-     */
-    protected boolean delete() {
-        return true;
-    }
-
-    /**
-     * Save a Collaborative Task to the user's data
-     * @return - whether the Collaborative Task has been successfully saved
-     */
-    protected boolean save() {
-        return true;
-    }
-
-    /**
-     * Edit the features of the Collaborative Task
-     */
-    protected void edit() {
-
-    }
-}

From 1c9b194535f0e51fec75c5d022cac2d0a22701e0 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sat, 19 Nov 2022 14:55:05 -0500
Subject: [PATCH 05/24] Added method bodies for setTitle and setPriority.

---
 src/main/java/Entities/Task.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/Entities/Task.java b/src/main/java/Entities/Task.java
index 92e8a31..c09b668 100644
--- a/src/main/java/Entities/Task.java
+++ b/src/main/java/Entities/Task.java
@@ -53,7 +53,7 @@ public String getTitle() {
      * @param title - the new title of the task
      */
     protected void setTitle(String title) {
-
+        this.title = title;
     }
 
     /**
@@ -69,7 +69,7 @@ public int getPriority() {
      * @param priority - the new priority value of the Task
      */
     protected void setPriority(int priority) {
-
+        this.priority = priority;
     }
 
     /**

From e11d67de79f2a4defde93f45d12bd2f21a7d2fac Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sat, 19 Nov 2022 15:11:44 -0500
Subject: [PATCH 06/24] Added all methods with java doc comments. Changed
 instance variable receiver so that it is just one Student User instead of an
 ArrayList of Student Users. Modified constructor accordingly.

---
 src/main/java/Entities/Invitation.java | 80 ++++++++++++++++++++++++++
 src/main/java/entities/Invitation.java | 23 --------
 2 files changed, 80 insertions(+), 23 deletions(-)
 create mode 100644 src/main/java/Entities/Invitation.java
 delete mode 100644 src/main/java/entities/Invitation.java

diff --git a/src/main/java/Entities/Invitation.java b/src/main/java/Entities/Invitation.java
new file mode 100644
index 0000000..3d7f501
--- /dev/null
+++ b/src/main/java/Entities/Invitation.java
@@ -0,0 +1,80 @@
+package Entities;
+
+public class Invitation {
+    private final CollaborativeTask collaborativeTask;
+    private final StudentUser sender;
+    private final StudentUser receiver;
+    private String status;
+
+    /**
+     * Create an invitation.
+     * @param collaborativeTask - the CollaborativeTask to which the receiver is being invited to join.
+     * @param sender - the StudentUser sending the invitation.
+     * @param receiver - the StudentUser receiving the invitation.
+     */
+    public Invitation(CollaborativeTask collaborativeTask, StudentUser sender, StudentUser receiver) {
+        this.collaborativeTask = collaborativeTask;
+        this.sender = sender;
+        this.receiver = receiver;
+        this.status = "Pending";
+    }
+
+    /**
+     * Accept or decline an invitation.
+     * @param accepted - the receiver's answer to the invitation.
+     */
+    protected void setStatus(boolean accepted){
+        if(accepted){
+            this.status = "Accepted";
+        }
+        else{
+            this.status = "Declined";
+        }
+    }
+
+    /**
+     * @return the invitation's status ("Pending", "Accepted", or "Declined")
+     */
+    protected String getStatus(){
+        return this.status;
+    }
+
+    /**
+     * @return the Collaborative Task to which the invitation is referring to.
+     */
+    protected CollaborativeTask getCollaborativeTask(){
+        return this.collaborativeTask;
+    }
+
+    /**
+     * @return the sender of the invitation.
+     */
+    protected StudentUser getSender(){
+        return this.sender;
+    }
+
+    /**
+     * @return the receiver of the invitation,
+     */
+    protected StudentUser getReceiver(){
+        return this.receiver;
+    }
+
+    /**
+     *
+     * Cancel an Invitation by removing it from a user's inbox.
+     * @return - whether the Invitation has been successfully canceled.
+     */
+    protected boolean cancel() {
+        return true;
+    }
+
+    /**
+     * Send an Invitation by adding it to a user's inbox.
+     * @return - whether the Collaborative Task has been successfully sent.
+     */
+    protected boolean send() {
+        return true;
+    }
+
+}
diff --git a/src/main/java/entities/Invitation.java b/src/main/java/entities/Invitation.java
deleted file mode 100644
index b64de0e..0000000
--- a/src/main/java/entities/Invitation.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package entities;
-
-import java.util.ArrayList;
-
-public class Invitation {
-    private CollaborativeTask collaborativeTask;
-    private StudentUser sender;
-    private ArrayList<StudentUser> receivers;
-    private String status;
-
-    /**
-     * Create an invitation.
-     * @param collaborativeTask - the CollaborativeTask to which the receiver is being invited to join.
-     * @param sender - the StudentUser sending the invitation.
-     * @param receivers - the StudentUsers receiving the invitation.
-     */
-    public Invitation(CollaborativeTask collaborativeTask, StudentUser sender, ArrayList<StudentUser> receivers) {
-        this.collaborativeTask = collaborativeTask;
-        this.sender = sender;
-        this.receivers = receivers;
-        this.status = "Pending";
-    }
-}

From 3b37e76b81f8984e9bef4f59d1015288be0c1564 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sat, 19 Nov 2022 15:12:08 -0500
Subject: [PATCH 07/24] entities changed to Entities.

---
 .gitignore | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitignore b/.gitignore
index 91c36d7..e38f677 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,14 +1,14 @@
 # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
 # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
 
-# entities.User-specific stuff
+# Entities.User-specific stuff
 .idea/**/workspace.xml
 .idea/**/tasks.xml
 .idea/**/usage.statistics.xml
 .idea/**/dictionaries
 .idea/**/shelf
 
-# AWS entities.User-specific
+# AWS Entities.User-specific
 .idea/**/aws.xml
 
 # Generated files

From e78a8de88d53267e553a94ab1969b013dced57d6 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sat, 19 Nov 2022 15:19:47 -0500
Subject: [PATCH 08/24] Changes disappeared when merging. Bringing them back.

---
 src/main/java/entities/CollaborativeTask.java | 137 ++++++++++++++++--
 src/main/java/entities/Invitation.java        |  75 ++++++++--
 2 files changed, 189 insertions(+), 23 deletions(-)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index 61e1dd5..fae7606 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -1,25 +1,31 @@
-package entities;
+package Entities;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 
 public class CollaborativeTask extends Task implements Timeblockable{
     private boolean recurring;
     private String frequency;
+    private LocalDateTime startTime;
+    private LocalDateTime endTime;
     private ArrayList<StudentUser> teammates;
     private ArrayList<StudentUser> pendingTeammates;
     private ArrayList<StudentUser> declinedTeammates;
     private StudentUser leader;
 
+
     /**
      * Create a CollaborativeTask with a title
      * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
      * Otherwise, the frequency is blank
      * @param title - the title of the Collaborative Task
+     * @param id - the unique ID of the Collaborative Task
      * @param recurring - whether the Collaborative Task is recurring
      * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     * @param creator - the Student User who creates the Collaborative Task
      */
-    public CollaborativeTask(String title, boolean recurring, String frequency, StudentUser creator) {
-        super(title);
+    public CollaborativeTask(String title, String id, boolean recurring, String frequency, StudentUser creator) {
+        super(title, id);
         this.recurring = recurring;
         if (recurring) this.frequency = frequency;
         else this.frequency = "";
@@ -31,14 +37,109 @@ public CollaborativeTask(String title, boolean recurring, String frequency, Stud
      * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
      * Otherwise, the frequency is blank
      * @param title - the title of the Collaborative Task
+     * @param id - the unique ID of the Collaborative Task
      * @param priority - the priority value of the Collaborative Task
      * @param recurring - whether the Collaborative Task is recurring
      * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     * @param creator - the Student User who creates the Collaborative Task
      */
-    public CollaborativeTask(String title, int priority, boolean recurring, String frequency) {
-        super(title, priority);
+    public CollaborativeTask(String title, String id, int priority, boolean recurring, String frequency, StudentUser creator) {
+        super(title, id, priority);
         this.recurring = recurring;
         this.frequency = frequency;
+        this.leader = creator;
+    }
+
+    /**
+     * @return leader of the Collaborative Task
+     */
+    protected StudentUser getLeader(){
+        return this.leader;
+    }
+
+    /**
+     * Set a new leader of the Collaborative Task.
+     * This method should only be used by the current leader of the Collaborative Task.
+     * @param leader - the Student User who is going to replace the current leader of the Collaborative Task.
+     */
+    protected void setLeader(StudentUser leader){
+        this.leader = leader;
+    }
+
+    /**
+     * @return an Array List of all Student Users who are teammates on this Collaborative Task, including the leader.
+     */
+    protected ArrayList<StudentUser> getTeammates(){
+        return this.teammates;
+    }
+
+    /**
+     * To be used when invitations to join a Collaborative Task are accepted.
+     * @param newTeammates - an Array List of Student Users who are to be added as teammates.
+     */
+    protected void addTeammates(ArrayList<StudentUser> newTeammates){
+        this.teammates.addAll(newTeammates);
+    }
+
+    /**
+     * When this method is used by the leader of the Collaborative Task,
+     * the oldTeammates parameter can contain any Student User in the Collaborative Task's teammates list.
+     * When this method is used by any other teammate of the Collaborative Task,
+     * the oldTeammates parameter can only contain themselves.
+     * @param oldTeammates - an Array List of Student Users who are to be removed as teammates.
+     */
+    protected void removeTeammates(ArrayList<StudentUser> oldTeammates){
+        this.teammates.removeAll(oldTeammates);
+    }
+
+    /**
+     * @return an Array List of all Student Users who have received invitations to join
+     * the Collaborative Task but not responded.
+     */
+    protected ArrayList<StudentUser> getPendingTeammates(){
+        return this.pendingTeammates;
+    }
+
+    /**
+     * To be used when invitations to join a Collaborative Task are sent.
+     * @param newTeammates - an Array List of Student Users who are being invited to join the Collaborative Task.
+     */
+    protected void addPendingTeammates(ArrayList<StudentUser> newTeammates){
+        this.pendingTeammates.addAll(newTeammates);
+    }
+
+    /**
+     * To be used when invitations to join a Collaborative Task are canceled or responded to.
+     * @param oldTeammates - an Array List of Student Users who are no longer undergoing the process of being
+     *                       invited to join the Collaborative Task.
+     */
+    protected void removePendingTeammates(ArrayList<StudentUser> oldTeammates){
+        this.pendingTeammates.removeAll(oldTeammates);
+    }
+
+    /**
+     * @return an Array List of all Student Users who have declined invitations to join the Collaborative Task.
+     */
+    protected ArrayList<StudentUser> getDeclinedTeammates(){
+        return this.declinedTeammates;
+    }
+
+    /**
+     * To be used when invitations to join a Collaborative Task are declined.
+     * @param newTeammates - an Array List of Student Users who have declined invitations to join the Collaborative Task.
+     */
+    protected void addDeclinedTeammates(ArrayList<StudentUser> newTeammates){
+        this.declinedTeammates.addAll(newTeammates);
+    }
+
+    /**
+     * To be used when a Student User who has previously declined an invitation to join the Collaborative Task has
+     * accepted a reinvitation to join.
+     * @param oldTeammates - an Array List of Student Users who have accepted an invitation to join the Collaborative
+     *                       Task after previously declining such an invitation.
+     */
+    protected void removeDeclinedTeammates(ArrayList<StudentUser> oldTeammates){
+        this.declinedTeammates.removeAll(oldTeammates);
     }
 
     /**
@@ -48,23 +149,31 @@ public CollaborativeTask(String title, int priority, boolean recurring, String f
      * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
      */
     protected void setRecurring(boolean recurring, String frequency) {
-        if (recurring) this.frequency = frequency;
+        this.recurring = recurring;
+        if (recurring) {
+            this.frequency = frequency;
+        }
+        else{
+            this.frequency = "";
+        }
     }
 
     /**
      * Set a new time block
-     * @param newTimeBlock - the new time block of the Collaborative Task
+     * @param startTime - the start of the time block
+     * @param endTime - the end of the time block
      */
-    public void setTimeBlock(int[] newTimeBlock) {
+    public void setTimeBlock(LocalDateTime startTime, LocalDateTime endTime) {
 
     }
 
     /**
-     * Get the time block of an Collaborative Task
-     * @return - the time block of the Collaborative Task
+     * Get the time block of an Event
+     * @return - the time block of the Event
+     *         - in array form: {startTime, endTime}
      */
-    public int[] getTimeBlock() {
-        return this.timeBlock;
+    public LocalDateTime[] getTimeBlock() {
+        return new LocalDateTime[] {this.startTime, this.endTime};
     }
 
     /**
@@ -100,9 +209,9 @@ protected boolean save() {
     }
 
     /**
-     * Edit the features of the Collaborative Task
+     * Edit the features of the Collaborative Task.
      */
-    protected void edit() {
+    protected void edit(){
 
     }
 }
diff --git a/src/main/java/entities/Invitation.java b/src/main/java/entities/Invitation.java
index b64de0e..3d7f501 100644
--- a/src/main/java/entities/Invitation.java
+++ b/src/main/java/entities/Invitation.java
@@ -1,23 +1,80 @@
-package entities;
-
-import java.util.ArrayList;
+package Entities;
 
 public class Invitation {
-    private CollaborativeTask collaborativeTask;
-    private StudentUser sender;
-    private ArrayList<StudentUser> receivers;
+    private final CollaborativeTask collaborativeTask;
+    private final StudentUser sender;
+    private final StudentUser receiver;
     private String status;
 
     /**
      * Create an invitation.
      * @param collaborativeTask - the CollaborativeTask to which the receiver is being invited to join.
      * @param sender - the StudentUser sending the invitation.
-     * @param receivers - the StudentUsers receiving the invitation.
+     * @param receiver - the StudentUser receiving the invitation.
      */
-    public Invitation(CollaborativeTask collaborativeTask, StudentUser sender, ArrayList<StudentUser> receivers) {
+    public Invitation(CollaborativeTask collaborativeTask, StudentUser sender, StudentUser receiver) {
         this.collaborativeTask = collaborativeTask;
         this.sender = sender;
-        this.receivers = receivers;
+        this.receiver = receiver;
         this.status = "Pending";
     }
+
+    /**
+     * Accept or decline an invitation.
+     * @param accepted - the receiver's answer to the invitation.
+     */
+    protected void setStatus(boolean accepted){
+        if(accepted){
+            this.status = "Accepted";
+        }
+        else{
+            this.status = "Declined";
+        }
+    }
+
+    /**
+     * @return the invitation's status ("Pending", "Accepted", or "Declined")
+     */
+    protected String getStatus(){
+        return this.status;
+    }
+
+    /**
+     * @return the Collaborative Task to which the invitation is referring to.
+     */
+    protected CollaborativeTask getCollaborativeTask(){
+        return this.collaborativeTask;
+    }
+
+    /**
+     * @return the sender of the invitation.
+     */
+    protected StudentUser getSender(){
+        return this.sender;
+    }
+
+    /**
+     * @return the receiver of the invitation,
+     */
+    protected StudentUser getReceiver(){
+        return this.receiver;
+    }
+
+    /**
+     *
+     * Cancel an Invitation by removing it from a user's inbox.
+     * @return - whether the Invitation has been successfully canceled.
+     */
+    protected boolean cancel() {
+        return true;
+    }
+
+    /**
+     * Send an Invitation by adding it to a user's inbox.
+     * @return - whether the Collaborative Task has been successfully sent.
+     */
+    protected boolean send() {
+        return true;
+    }
+
 }

From 495ed89cd146fa0792b702125407656023c06ac4 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sat, 19 Nov 2022 15:39:05 -0500
Subject: [PATCH 09/24] CreateNewCollaborativeTaskUseCase added

---
 .../Feature4UseCases/CreateNewCollaborativeTaskUseCase.java   | 4 ++++
 1 file changed, 4 insertions(+)
 create mode 100644 src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java

diff --git a/src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java b/src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java
new file mode 100644
index 0000000..b5fc4ed
--- /dev/null
+++ b/src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java
@@ -0,0 +1,4 @@
+package Feature4UseCases;
+
+public class CreateNewCollaborativeTaskUseCase {
+}

From 175f406a90f19929b0656b4f7723e73eba7ff223 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sun, 20 Nov 2022 01:19:26 -0500
Subject: [PATCH 10/24] Changed TimeBlock attributes according to code reviews
 by Alyson. Added getter methods for frequency and recurring.

---
 .gitignore                                    |   4 +-
 README.md                                     |   2 +-
 src/main/java/Entities/CollaborativeTask.java | 217 ------------------
 src/main/java/Entities/Invitation.java        |  80 -------
 .../CreateNewCollaborativeTaskUseCase.java    |   1 +
 .../{Entities => entities}/Assignment.java    |   2 +-
 src/main/java/entities/CollaborativeTask.java |  64 +++---
 .../java/{Entities => entities}/Course.java   |   2 +-
 .../java/{Entities => entities}/Event.java    |   2 +-
 .../java/{Entities => entities}/Gradable.java |   2 +-
 .../InstructorUser.java                       |   2 +-
 src/main/java/entities/Invitation.java        |   2 +-
 .../{Entities => entities}/Preparatory.java   |   2 +-
 .../{Entities => entities}/StudentUser.java   |   2 +-
 .../java/{Entities => entities}/Task.java     |   2 +-
 .../java/{Entities => entities}/TaskMap.java  |   2 +-
 .../java/{Entities => entities}/Test.java     |   2 +-
 .../{Entities => entities}/Timeblockable.java |   2 +-
 .../java/{Entities => entities}/User.java     |   2 +-
 .../{Entities => entities}/UserWhisperer.java |   2 +-
 .../internalUserList.java                     |   2 +-
 21 files changed, 45 insertions(+), 353 deletions(-)
 delete mode 100644 src/main/java/Entities/CollaborativeTask.java
 delete mode 100644 src/main/java/Entities/Invitation.java
 rename src/main/java/{Entities => entities}/Assignment.java (99%)
 rename src/main/java/{Entities => entities}/Course.java (99%)
 rename src/main/java/{Entities => entities}/Event.java (99%)
 rename src/main/java/{Entities => entities}/Gradable.java (94%)
 rename src/main/java/{Entities => entities}/InstructorUser.java (95%)
 rename src/main/java/{Entities => entities}/Preparatory.java (98%)
 rename src/main/java/{Entities => entities}/StudentUser.java (99%)
 rename src/main/java/{Entities => entities}/Task.java (99%)
 rename src/main/java/{Entities => entities}/TaskMap.java (98%)
 rename src/main/java/{Entities => entities}/Test.java (99%)
 rename src/main/java/{Entities => entities}/Timeblockable.java (97%)
 rename src/main/java/{Entities => entities}/User.java (94%)
 rename src/main/java/{Entities => entities}/UserWhisperer.java (95%)
 rename src/main/java/{Entities => entities}/internalUserList.java (94%)

diff --git a/.gitignore b/.gitignore
index e38f677..91c36d7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,14 +1,14 @@
 # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
 # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
 
-# Entities.User-specific stuff
+# entities.User-specific stuff
 .idea/**/workspace.xml
 .idea/**/tasks.xml
 .idea/**/usage.statistics.xml
 .idea/**/dictionaries
 .idea/**/shelf
 
-# AWS Entities.User-specific
+# AWS entities.User-specific
 .idea/**/aws.xml
 
 # Generated files
diff --git a/README.md b/README.md
index 3161f1d..d5e7c8e 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@ This should run the program and print on your console.
 You will find HelloWorldTest in `src/test/java/tutorial` directory. Right click on the HelloWorldTest file and click on `Run HelloWorldTest`.
 All tests should pass. Your team can remove this sample of how testing works once you start adding your project code to the repo.
 
-Moving forward, we expect you to maintain this project structure. You *should* use Gradle as the build environment, but it is fine if your team prefers to use something else -- just remove the gradle files and push your preferred project setup. Assuming you stick with Gradle, your source code should go into `src/main/java` (you can keep creating more subdirectories as per your project requirement). Every source class can auto-generate a test file for you. For example, open HelloWorld.java file and click on the `HelloWorld` variable as shown in the image below. You should see an option `Generate` and on clicking this your should see an option `Entities.Test`. Clicking on this will generate a JUnit test file for `HelloWorld` class. This was used to generate the `HelloWorldTest`.
+Moving forward, we expect you to maintain this project structure. You *should* use Gradle as the build environment, but it is fine if your team prefers to use something else -- just remove the gradle files and push your preferred project setup. Assuming you stick with Gradle, your source code should go into `src/main/java` (you can keep creating more subdirectories as per your project requirement). Every source class can auto-generate a test file for you. For example, open HelloWorld.java file and click on the `HelloWorld` variable as shown in the image below. You should see an option `Generate` and on clicking this your should see an option `entities.Test`. Clicking on this will generate a JUnit test file for `HelloWorld` class. This was used to generate the `HelloWorldTest`.
 
 ![image](https://user-images.githubusercontent.com/5333020/196066655-d3c97bf4-fdbd-46b0-b6ae-aeb8dbcf351d.png)
 
diff --git a/src/main/java/Entities/CollaborativeTask.java b/src/main/java/Entities/CollaborativeTask.java
deleted file mode 100644
index fae7606..0000000
--- a/src/main/java/Entities/CollaborativeTask.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package Entities;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-
-public class CollaborativeTask extends Task implements Timeblockable{
-    private boolean recurring;
-    private String frequency;
-    private LocalDateTime startTime;
-    private LocalDateTime endTime;
-    private ArrayList<StudentUser> teammates;
-    private ArrayList<StudentUser> pendingTeammates;
-    private ArrayList<StudentUser> declinedTeammates;
-    private StudentUser leader;
-
-
-    /**
-     * Create a CollaborativeTask with a title
-     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
-     * Otherwise, the frequency is blank
-     * @param title - the title of the Collaborative Task
-     * @param id - the unique ID of the Collaborative Task
-     * @param recurring - whether the Collaborative Task is recurring
-     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     * @param creator - the Student User who creates the Collaborative Task
-     */
-    public CollaborativeTask(String title, String id, boolean recurring, String frequency, StudentUser creator) {
-        super(title, id);
-        this.recurring = recurring;
-        if (recurring) this.frequency = frequency;
-        else this.frequency = "";
-        this.leader = creator;
-    }
-
-    /**
-     * Create a Collaborative Task with a title and priority
-     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
-     * Otherwise, the frequency is blank
-     * @param title - the title of the Collaborative Task
-     * @param id - the unique ID of the Collaborative Task
-     * @param priority - the priority value of the Collaborative Task
-     * @param recurring - whether the Collaborative Task is recurring
-     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     * @param creator - the Student User who creates the Collaborative Task
-     */
-    public CollaborativeTask(String title, String id, int priority, boolean recurring, String frequency, StudentUser creator) {
-        super(title, id, priority);
-        this.recurring = recurring;
-        this.frequency = frequency;
-        this.leader = creator;
-    }
-
-    /**
-     * @return leader of the Collaborative Task
-     */
-    protected StudentUser getLeader(){
-        return this.leader;
-    }
-
-    /**
-     * Set a new leader of the Collaborative Task.
-     * This method should only be used by the current leader of the Collaborative Task.
-     * @param leader - the Student User who is going to replace the current leader of the Collaborative Task.
-     */
-    protected void setLeader(StudentUser leader){
-        this.leader = leader;
-    }
-
-    /**
-     * @return an Array List of all Student Users who are teammates on this Collaborative Task, including the leader.
-     */
-    protected ArrayList<StudentUser> getTeammates(){
-        return this.teammates;
-    }
-
-    /**
-     * To be used when invitations to join a Collaborative Task are accepted.
-     * @param newTeammates - an Array List of Student Users who are to be added as teammates.
-     */
-    protected void addTeammates(ArrayList<StudentUser> newTeammates){
-        this.teammates.addAll(newTeammates);
-    }
-
-    /**
-     * When this method is used by the leader of the Collaborative Task,
-     * the oldTeammates parameter can contain any Student User in the Collaborative Task's teammates list.
-     * When this method is used by any other teammate of the Collaborative Task,
-     * the oldTeammates parameter can only contain themselves.
-     * @param oldTeammates - an Array List of Student Users who are to be removed as teammates.
-     */
-    protected void removeTeammates(ArrayList<StudentUser> oldTeammates){
-        this.teammates.removeAll(oldTeammates);
-    }
-
-    /**
-     * @return an Array List of all Student Users who have received invitations to join
-     * the Collaborative Task but not responded.
-     */
-    protected ArrayList<StudentUser> getPendingTeammates(){
-        return this.pendingTeammates;
-    }
-
-    /**
-     * To be used when invitations to join a Collaborative Task are sent.
-     * @param newTeammates - an Array List of Student Users who are being invited to join the Collaborative Task.
-     */
-    protected void addPendingTeammates(ArrayList<StudentUser> newTeammates){
-        this.pendingTeammates.addAll(newTeammates);
-    }
-
-    /**
-     * To be used when invitations to join a Collaborative Task are canceled or responded to.
-     * @param oldTeammates - an Array List of Student Users who are no longer undergoing the process of being
-     *                       invited to join the Collaborative Task.
-     */
-    protected void removePendingTeammates(ArrayList<StudentUser> oldTeammates){
-        this.pendingTeammates.removeAll(oldTeammates);
-    }
-
-    /**
-     * @return an Array List of all Student Users who have declined invitations to join the Collaborative Task.
-     */
-    protected ArrayList<StudentUser> getDeclinedTeammates(){
-        return this.declinedTeammates;
-    }
-
-    /**
-     * To be used when invitations to join a Collaborative Task are declined.
-     * @param newTeammates - an Array List of Student Users who have declined invitations to join the Collaborative Task.
-     */
-    protected void addDeclinedTeammates(ArrayList<StudentUser> newTeammates){
-        this.declinedTeammates.addAll(newTeammates);
-    }
-
-    /**
-     * To be used when a Student User who has previously declined an invitation to join the Collaborative Task has
-     * accepted a reinvitation to join.
-     * @param oldTeammates - an Array List of Student Users who have accepted an invitation to join the Collaborative
-     *                       Task after previously declining such an invitation.
-     */
-    protected void removeDeclinedTeammates(ArrayList<StudentUser> oldTeammates){
-        this.declinedTeammates.removeAll(oldTeammates);
-    }
-
-    /**
-     * Set a Collaborative Task as recurring/not
-     * Set its new frequency if it is recurring
-     * @param recurring - whether the Collaborative Task is recurring
-     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     */
-    protected void setRecurring(boolean recurring, String frequency) {
-        this.recurring = recurring;
-        if (recurring) {
-            this.frequency = frequency;
-        }
-        else{
-            this.frequency = "";
-        }
-    }
-
-    /**
-     * Set a new time block
-     * @param startTime - the start of the time block
-     * @param endTime - the end of the time block
-     */
-    public void setTimeBlock(LocalDateTime startTime, LocalDateTime endTime) {
-
-    }
-
-    /**
-     * Get the time block of an Event
-     * @return - the time block of the Event
-     *         - in array form: {startTime, endTime}
-     */
-    public LocalDateTime[] getTimeBlock() {
-        return new LocalDateTime[] {this.startTime, this.endTime};
-    }
-
-    /**
-     * Schedule a time block for the user
-     * @return - whether the time block has been successfully scheduled
-     */
-    public boolean scheduleTimeBlock() {
-        return true;
-    }
-
-    /**
-     * Remove a time block from the user's schedule
-     * @return - whether the time block has been successfully removed
-     */
-    public boolean removeTimeBlock() {
-        return true;
-    }
-
-    /**
-     * Delete a Collaborative Task by moving it to the user's archive
-     * @return - whether the Collaborative Task has been successfully deleted
-     */
-    protected boolean delete() {
-        return true;
-    }
-
-    /**
-     * Save a Collaborative Task to the user's data
-     * @return - whether the Collaborative Task has been successfully saved
-     */
-    protected boolean save() {
-        return true;
-    }
-
-    /**
-     * Edit the features of the Collaborative Task.
-     */
-    protected void edit(){
-
-    }
-}
diff --git a/src/main/java/Entities/Invitation.java b/src/main/java/Entities/Invitation.java
deleted file mode 100644
index 3d7f501..0000000
--- a/src/main/java/Entities/Invitation.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package Entities;
-
-public class Invitation {
-    private final CollaborativeTask collaborativeTask;
-    private final StudentUser sender;
-    private final StudentUser receiver;
-    private String status;
-
-    /**
-     * Create an invitation.
-     * @param collaborativeTask - the CollaborativeTask to which the receiver is being invited to join.
-     * @param sender - the StudentUser sending the invitation.
-     * @param receiver - the StudentUser receiving the invitation.
-     */
-    public Invitation(CollaborativeTask collaborativeTask, StudentUser sender, StudentUser receiver) {
-        this.collaborativeTask = collaborativeTask;
-        this.sender = sender;
-        this.receiver = receiver;
-        this.status = "Pending";
-    }
-
-    /**
-     * Accept or decline an invitation.
-     * @param accepted - the receiver's answer to the invitation.
-     */
-    protected void setStatus(boolean accepted){
-        if(accepted){
-            this.status = "Accepted";
-        }
-        else{
-            this.status = "Declined";
-        }
-    }
-
-    /**
-     * @return the invitation's status ("Pending", "Accepted", or "Declined")
-     */
-    protected String getStatus(){
-        return this.status;
-    }
-
-    /**
-     * @return the Collaborative Task to which the invitation is referring to.
-     */
-    protected CollaborativeTask getCollaborativeTask(){
-        return this.collaborativeTask;
-    }
-
-    /**
-     * @return the sender of the invitation.
-     */
-    protected StudentUser getSender(){
-        return this.sender;
-    }
-
-    /**
-     * @return the receiver of the invitation,
-     */
-    protected StudentUser getReceiver(){
-        return this.receiver;
-    }
-
-    /**
-     *
-     * Cancel an Invitation by removing it from a user's inbox.
-     * @return - whether the Invitation has been successfully canceled.
-     */
-    protected boolean cancel() {
-        return true;
-    }
-
-    /**
-     * Send an Invitation by adding it to a user's inbox.
-     * @return - whether the Collaborative Task has been successfully sent.
-     */
-    protected boolean send() {
-        return true;
-    }
-
-}
diff --git a/src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java b/src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java
index b5fc4ed..3069171 100644
--- a/src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java
+++ b/src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java
@@ -1,4 +1,5 @@
 package Feature4UseCases;
 
 public class CreateNewCollaborativeTaskUseCase {
+
 }
diff --git a/src/main/java/Entities/Assignment.java b/src/main/java/entities/Assignment.java
similarity index 99%
rename from src/main/java/Entities/Assignment.java
rename to src/main/java/entities/Assignment.java
index bf3362c..78f0ff5 100644
--- a/src/main/java/Entities/Assignment.java
+++ b/src/main/java/entities/Assignment.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index fae7606..dbd2af8 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
@@ -6,8 +6,7 @@
 public class CollaborativeTask extends Task implements Timeblockable{
     private boolean recurring;
     private String frequency;
-    private LocalDateTime startTime;
-    private LocalDateTime endTime;
+    private ArrayList<LocalDateTime> timeBlocks;
     private ArrayList<StudentUser> teammates;
     private ArrayList<StudentUser> pendingTeammates;
     private ArrayList<StudentUser> declinedTeammates;
@@ -142,6 +141,20 @@ protected void removeDeclinedTeammates(ArrayList<StudentUser> oldTeammates){
         this.declinedTeammates.removeAll(oldTeammates);
     }
 
+    /**
+     * @return whether the Collaborative Task is reoccurring or not.
+     */
+    protected boolean getRecurring(){
+        return this.recurring;
+    }
+
+    /**
+     * @return frequency of Collaborative Task.
+     */
+    protected String getFrequency(){
+        return this.frequency;
+    }
+
     /**
      * Set a Collaborative Task as recurring/not
      * Set its new frequency if it is recurring
@@ -159,28 +172,26 @@ protected void setRecurring(boolean recurring, String frequency) {
     }
 
     /**
-     * Set a new time block
-     * @param startTime - the start of the time block
-     * @param endTime - the end of the time block
+     * Get the time blocks of a Collaborative Task.
+     * @return - the time blocks of the Collaborative task in an Array List of LocalDateTimes.
      */
-    public void setTimeBlock(LocalDateTime startTime, LocalDateTime endTime) {
-
+    public ArrayList<LocalDateTime> getTimeBlocks() {
+        return this.timeBlocks;
     }
 
     /**
-     * Get the time block of an Event
-     * @return - the time block of the Event
-     *         - in array form: {startTime, endTime}
+     * Set new time blocks
+     * @param timeBlocks - Array List of time blocks of the Collaborative Task.
      */
-    public LocalDateTime[] getTimeBlock() {
-        return new LocalDateTime[] {this.startTime, this.endTime};
+    public void setTimeBlocks(ArrayList<LocalDateTime> timeBlocks) {
+
     }
 
     /**
      * Schedule a time block for the user
      * @return - whether the time block has been successfully scheduled
      */
-    public boolean scheduleTimeBlock() {
+    public boolean scheduleTimeBlocks() {
         return true;
     }
 
@@ -188,30 +199,7 @@ public boolean scheduleTimeBlock() {
      * Remove a time block from the user's schedule
      * @return - whether the time block has been successfully removed
      */
-    public boolean removeTimeBlock() {
+    public boolean removeTimeBlocks() {
         return true;
     }
-
-    /**
-     * Delete a Collaborative Task by moving it to the user's archive
-     * @return - whether the Collaborative Task has been successfully deleted
-     */
-    protected boolean delete() {
-        return true;
-    }
-
-    /**
-     * Save a Collaborative Task to the user's data
-     * @return - whether the Collaborative Task has been successfully saved
-     */
-    protected boolean save() {
-        return true;
-    }
-
-    /**
-     * Edit the features of the Collaborative Task.
-     */
-    protected void edit(){
-
-    }
 }
diff --git a/src/main/java/Entities/Course.java b/src/main/java/entities/Course.java
similarity index 99%
rename from src/main/java/Entities/Course.java
rename to src/main/java/entities/Course.java
index a68ec2b..a04034b 100644
--- a/src/main/java/Entities/Course.java
+++ b/src/main/java/entities/Course.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.util.ArrayList;
 
diff --git a/src/main/java/Entities/Event.java b/src/main/java/entities/Event.java
similarity index 99%
rename from src/main/java/Entities/Event.java
rename to src/main/java/entities/Event.java
index 72458a4..330fff8 100644
--- a/src/main/java/Entities/Event.java
+++ b/src/main/java/entities/Event.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.time.LocalDateTime;
 public class Event extends Task implements Timeblockable {
diff --git a/src/main/java/Entities/Gradable.java b/src/main/java/entities/Gradable.java
similarity index 94%
rename from src/main/java/Entities/Gradable.java
rename to src/main/java/entities/Gradable.java
index 7c686e3..97cd78c 100644
--- a/src/main/java/Entities/Gradable.java
+++ b/src/main/java/entities/Gradable.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 public interface Gradable {
     /**
diff --git a/src/main/java/Entities/InstructorUser.java b/src/main/java/entities/InstructorUser.java
similarity index 95%
rename from src/main/java/Entities/InstructorUser.java
rename to src/main/java/entities/InstructorUser.java
index f3121de..d386c15 100644
--- a/src/main/java/Entities/InstructorUser.java
+++ b/src/main/java/entities/InstructorUser.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.util.ArrayList;
 
diff --git a/src/main/java/entities/Invitation.java b/src/main/java/entities/Invitation.java
index 3d7f501..6bf6faf 100644
--- a/src/main/java/entities/Invitation.java
+++ b/src/main/java/entities/Invitation.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 public class Invitation {
     private final CollaborativeTask collaborativeTask;
diff --git a/src/main/java/Entities/Preparatory.java b/src/main/java/entities/Preparatory.java
similarity index 98%
rename from src/main/java/Entities/Preparatory.java
rename to src/main/java/entities/Preparatory.java
index a7bdfc4..9ba8906 100644
--- a/src/main/java/Entities/Preparatory.java
+++ b/src/main/java/entities/Preparatory.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
diff --git a/src/main/java/Entities/StudentUser.java b/src/main/java/entities/StudentUser.java
similarity index 99%
rename from src/main/java/Entities/StudentUser.java
rename to src/main/java/entities/StudentUser.java
index 761b05d..102074a 100644
--- a/src/main/java/Entities/StudentUser.java
+++ b/src/main/java/entities/StudentUser.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.time.LocalDateTime;
 import java.util.*;
diff --git a/src/main/java/Entities/Task.java b/src/main/java/entities/Task.java
similarity index 99%
rename from src/main/java/Entities/Task.java
rename to src/main/java/entities/Task.java
index c09b668..cf1ff83 100644
--- a/src/main/java/Entities/Task.java
+++ b/src/main/java/entities/Task.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.io.Serializable;
 
diff --git a/src/main/java/Entities/TaskMap.java b/src/main/java/entities/TaskMap.java
similarity index 98%
rename from src/main/java/Entities/TaskMap.java
rename to src/main/java/entities/TaskMap.java
index 1117149..f4e3c1d 100644
--- a/src/main/java/Entities/TaskMap.java
+++ b/src/main/java/entities/TaskMap.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.io.Serializable;
 import java.util.HashMap;
diff --git a/src/main/java/Entities/Test.java b/src/main/java/entities/Test.java
similarity index 99%
rename from src/main/java/Entities/Test.java
rename to src/main/java/entities/Test.java
index 57baa5c..fa78d27 100644
--- a/src/main/java/Entities/Test.java
+++ b/src/main/java/entities/Test.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
diff --git a/src/main/java/Entities/Timeblockable.java b/src/main/java/entities/Timeblockable.java
similarity index 97%
rename from src/main/java/Entities/Timeblockable.java
rename to src/main/java/entities/Timeblockable.java
index 1e0d0e7..193664b 100644
--- a/src/main/java/Entities/Timeblockable.java
+++ b/src/main/java/entities/Timeblockable.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 import java.time.LocalDateTime;
 public interface Timeblockable {
     /**
diff --git a/src/main/java/Entities/User.java b/src/main/java/entities/User.java
similarity index 94%
rename from src/main/java/Entities/User.java
rename to src/main/java/entities/User.java
index f6a0b05..85a510f 100644
--- a/src/main/java/Entities/User.java
+++ b/src/main/java/entities/User.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 // Entity
 public abstract class User {
diff --git a/src/main/java/Entities/UserWhisperer.java b/src/main/java/entities/UserWhisperer.java
similarity index 95%
rename from src/main/java/Entities/UserWhisperer.java
rename to src/main/java/entities/UserWhisperer.java
index 0f29fe5..ef96570 100644
--- a/src/main/java/Entities/UserWhisperer.java
+++ b/src/main/java/entities/UserWhisperer.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 // Entity
 
diff --git a/src/main/java/Entities/internalUserList.java b/src/main/java/entities/internalUserList.java
similarity index 94%
rename from src/main/java/Entities/internalUserList.java
rename to src/main/java/entities/internalUserList.java
index ccd5879..962010d 100644
--- a/src/main/java/Entities/internalUserList.java
+++ b/src/main/java/entities/internalUserList.java
@@ -1,4 +1,4 @@
-package Entities;
+package entities;
 
 import java.util.ArrayList;
 

From ef36c85f800540b0af097078f760bc35f575ad2b Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sun, 20 Nov 2022 01:22:35 -0500
Subject: [PATCH 11/24] Changed protected methods to public.

---
 src/main/java/entities/CollaborativeTask.java | 28 +++++++++----------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index dbd2af8..0f45d8e 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -52,7 +52,7 @@ public CollaborativeTask(String title, String id, int priority, boolean recurrin
     /**
      * @return leader of the Collaborative Task
      */
-    protected StudentUser getLeader(){
+    public StudentUser getLeader(){
         return this.leader;
     }
 
@@ -61,14 +61,14 @@ protected StudentUser getLeader(){
      * This method should only be used by the current leader of the Collaborative Task.
      * @param leader - the Student User who is going to replace the current leader of the Collaborative Task.
      */
-    protected void setLeader(StudentUser leader){
+    public void setLeader(StudentUser leader){
         this.leader = leader;
     }
 
     /**
      * @return an Array List of all Student Users who are teammates on this Collaborative Task, including the leader.
      */
-    protected ArrayList<StudentUser> getTeammates(){
+    public ArrayList<StudentUser> getTeammates(){
         return this.teammates;
     }
 
@@ -76,7 +76,7 @@ protected ArrayList<StudentUser> getTeammates(){
      * To be used when invitations to join a Collaborative Task are accepted.
      * @param newTeammates - an Array List of Student Users who are to be added as teammates.
      */
-    protected void addTeammates(ArrayList<StudentUser> newTeammates){
+    public void addTeammates(ArrayList<StudentUser> newTeammates){
         this.teammates.addAll(newTeammates);
     }
 
@@ -87,7 +87,7 @@ protected void addTeammates(ArrayList<StudentUser> newTeammates){
      * the oldTeammates parameter can only contain themselves.
      * @param oldTeammates - an Array List of Student Users who are to be removed as teammates.
      */
-    protected void removeTeammates(ArrayList<StudentUser> oldTeammates){
+    public void removeTeammates(ArrayList<StudentUser> oldTeammates){
         this.teammates.removeAll(oldTeammates);
     }
 
@@ -95,7 +95,7 @@ protected void removeTeammates(ArrayList<StudentUser> oldTeammates){
      * @return an Array List of all Student Users who have received invitations to join
      * the Collaborative Task but not responded.
      */
-    protected ArrayList<StudentUser> getPendingTeammates(){
+    public ArrayList<StudentUser> getPendingTeammates(){
         return this.pendingTeammates;
     }
 
@@ -103,7 +103,7 @@ protected ArrayList<StudentUser> getPendingTeammates(){
      * To be used when invitations to join a Collaborative Task are sent.
      * @param newTeammates - an Array List of Student Users who are being invited to join the Collaborative Task.
      */
-    protected void addPendingTeammates(ArrayList<StudentUser> newTeammates){
+    public void addPendingTeammates(ArrayList<StudentUser> newTeammates){
         this.pendingTeammates.addAll(newTeammates);
     }
 
@@ -112,14 +112,14 @@ protected void addPendingTeammates(ArrayList<StudentUser> newTeammates){
      * @param oldTeammates - an Array List of Student Users who are no longer undergoing the process of being
      *                       invited to join the Collaborative Task.
      */
-    protected void removePendingTeammates(ArrayList<StudentUser> oldTeammates){
+    public void removePendingTeammates(ArrayList<StudentUser> oldTeammates){
         this.pendingTeammates.removeAll(oldTeammates);
     }
 
     /**
      * @return an Array List of all Student Users who have declined invitations to join the Collaborative Task.
      */
-    protected ArrayList<StudentUser> getDeclinedTeammates(){
+    public ArrayList<StudentUser> getDeclinedTeammates(){
         return this.declinedTeammates;
     }
 
@@ -127,7 +127,7 @@ protected ArrayList<StudentUser> getDeclinedTeammates(){
      * To be used when invitations to join a Collaborative Task are declined.
      * @param newTeammates - an Array List of Student Users who have declined invitations to join the Collaborative Task.
      */
-    protected void addDeclinedTeammates(ArrayList<StudentUser> newTeammates){
+    public void addDeclinedTeammates(ArrayList<StudentUser> newTeammates){
         this.declinedTeammates.addAll(newTeammates);
     }
 
@@ -137,21 +137,21 @@ protected void addDeclinedTeammates(ArrayList<StudentUser> newTeammates){
      * @param oldTeammates - an Array List of Student Users who have accepted an invitation to join the Collaborative
      *                       Task after previously declining such an invitation.
      */
-    protected void removeDeclinedTeammates(ArrayList<StudentUser> oldTeammates){
+    public void removeDeclinedTeammates(ArrayList<StudentUser> oldTeammates){
         this.declinedTeammates.removeAll(oldTeammates);
     }
 
     /**
      * @return whether the Collaborative Task is reoccurring or not.
      */
-    protected boolean getRecurring(){
+    public boolean getRecurring(){
         return this.recurring;
     }
 
     /**
      * @return frequency of Collaborative Task.
      */
-    protected String getFrequency(){
+    public String getFrequency(){
         return this.frequency;
     }
 
@@ -161,7 +161,7 @@ protected String getFrequency(){
      * @param recurring - whether the Collaborative Task is recurring
      * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
      */
-    protected void setRecurring(boolean recurring, String frequency) {
+    public void setRecurring(boolean recurring, String frequency) {
         this.recurring = recurring;
         if (recurring) {
             this.frequency = frequency;

From 83978d3373c5e775e327855a2ed2734d3d4dd956 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sun, 20 Nov 2022 01:30:34 -0500
Subject: [PATCH 12/24] Added deadline attribute, more constructors, getter and
 setter methods.

---
 src/main/java/entities/CollaborativeTask.java | 56 +++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index 0f45d8e..e23937c 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -7,6 +7,7 @@ public class CollaborativeTask extends Task implements Timeblockable{
     private boolean recurring;
     private String frequency;
     private ArrayList<LocalDateTime> timeBlocks;
+    private LocalDateTime deadline;
     private ArrayList<StudentUser> teammates;
     private ArrayList<StudentUser> pendingTeammates;
     private ArrayList<StudentUser> declinedTeammates;
@@ -49,6 +50,46 @@ public CollaborativeTask(String title, String id, int priority, boolean recurrin
         this.leader = creator;
     }
 
+    /**
+     * Create a CollaborativeTask with a title and deadline
+     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
+     * Otherwise, the frequency is blank
+     * @param title - the title of the Collaborative Task
+     * @param id - the unique ID of the Collaborative Task
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     * @param deadline - the time at which the Collaborative Task is due
+     * @param creator - the Student User who creates the Collaborative Task
+     */
+    public CollaborativeTask(String title, String id, boolean recurring, String frequency, LocalDateTime deadline, StudentUser creator) {
+        super(title, id);
+        this.recurring = recurring;
+        if (recurring) this.frequency = frequency;
+        else this.frequency = "";
+        this.deadline = deadline;
+        this.leader = creator;
+    }
+
+    /**
+     * Create a Collaborative Task with a title, priority, and deadline
+     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
+     * Otherwise, the frequency is blank
+     * @param title - the title of the Collaborative Task
+     * @param id - the unique ID of the Collaborative Task
+     * @param priority - the priority value of the Collaborative Task
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     * @param deadline - the time at which the Collaborative Task is due
+     * @param creator - the Student User who creates the Collaborative Task
+     */
+    public CollaborativeTask(String title, String id, int priority, boolean recurring, String frequency, LocalDateTime deadline, StudentUser creator) {
+        super(title, id, priority);
+        this.recurring = recurring;
+        this.frequency = frequency;
+        this.deadline = deadline;
+        this.leader = creator;
+    }
+
     /**
      * @return leader of the Collaborative Task
      */
@@ -171,6 +212,21 @@ public void setRecurring(boolean recurring, String frequency) {
         }
     }
 
+    /**
+     * @return deadline for Collaborative Task.
+     */
+    public LocalDateTime getDeadline(){
+        return this.deadline;
+    }
+
+    /**
+     * Set a deadline for a Collaborative Task.
+     * @param deadline - deadline for Collaborative Task.
+     */
+    public void setDeadline(LocalDateTime deadline){
+       this.deadline = deadline;
+    }
+
     /**
      * Get the time blocks of a Collaborative Task.
      * @return - the time blocks of the Collaborative task in an Array List of LocalDateTimes.

From f582acb302582e7b751a356c27e304957b916dc9 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sun, 20 Nov 2022 01:35:04 -0500
Subject: [PATCH 13/24] Deleted Use Case package for now.

---
 .../Feature4UseCases/CreateNewCollaborativeTaskUseCase.java  | 5 -----
 1 file changed, 5 deletions(-)
 delete mode 100644 src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java

diff --git a/src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java b/src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java
deleted file mode 100644
index 3069171..0000000
--- a/src/main/java/Feature4UseCases/CreateNewCollaborativeTaskUseCase.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package Feature4UseCases;
-
-public class CreateNewCollaborativeTaskUseCase {
-
-}

From fa75ba4059bd2d619f2b110b700a4d70dcb6ab53 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Sun, 20 Nov 2022 15:13:16 -0500
Subject: [PATCH 14/24] Changed timeblocks from ArrayList<LocalDateTime> to
 ArrayList<ArrayList<LocalDateTime>>.

---
 src/main/java/entities/CollaborativeTask.java | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index e23937c..e72368e 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -6,7 +6,7 @@
 public class CollaborativeTask extends Task implements Timeblockable{
     private boolean recurring;
     private String frequency;
-    private ArrayList<LocalDateTime> timeBlocks;
+    private ArrayList<ArrayList<LocalDateTime>> timeBlocks;
     private LocalDateTime deadline;
     private ArrayList<StudentUser> teammates;
     private ArrayList<StudentUser> pendingTeammates;
@@ -229,17 +229,17 @@ public void setDeadline(LocalDateTime deadline){
 
     /**
      * Get the time blocks of a Collaborative Task.
-     * @return - the time blocks of the Collaborative task in an Array List of LocalDateTimes.
+     * @return - the time blocks of the Collaborative task in an Array List of Array Losts of LocalDateTimes.
      */
-    public ArrayList<LocalDateTime> getTimeBlocks() {
+    public ArrayList<ArrayList<LocalDateTime>> getTimeBlocks() {
         return this.timeBlocks;
     }
 
     /**
      * Set new time blocks
-     * @param timeBlocks - Array List of time blocks of the Collaborative Task.
+     * @param timeBlocks - Array List of Array Lists of time blocks of the Collaborative Task.
      */
-    public void setTimeBlocks(ArrayList<LocalDateTime> timeBlocks) {
+    public void setTimeBlocks(ArrayList<ArrayList<LocalDateTime>> timeBlocks) {
 
     }
 

From fc32b09b9fc70d620d1cfdf1d9c31b734020c77d Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Mon, 21 Nov 2022 01:22:08 -0500
Subject: [PATCH 15/24] Added method body for setTimeBlocks. Added curly braces
 to all if statements.

---
 src/main/java/entities/CollaborativeTask.java | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index e72368e..1b7e047 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -27,8 +27,12 @@ public class CollaborativeTask extends Task implements Timeblockable{
     public CollaborativeTask(String title, String id, boolean recurring, String frequency, StudentUser creator) {
         super(title, id);
         this.recurring = recurring;
-        if (recurring) this.frequency = frequency;
-        else this.frequency = "";
+        if (recurring) {
+            this.frequency = frequency;
+        }
+        else {
+            this.frequency = "";
+        }
         this.leader = creator;
     }
 
@@ -64,8 +68,12 @@ public CollaborativeTask(String title, String id, int priority, boolean recurrin
     public CollaborativeTask(String title, String id, boolean recurring, String frequency, LocalDateTime deadline, StudentUser creator) {
         super(title, id);
         this.recurring = recurring;
-        if (recurring) this.frequency = frequency;
-        else this.frequency = "";
+        if (recurring) {
+            this.frequency = frequency;
+        }
+        else {
+            this.frequency = "";
+        }
         this.deadline = deadline;
         this.leader = creator;
     }
@@ -240,7 +248,7 @@ public ArrayList<ArrayList<LocalDateTime>> getTimeBlocks() {
      * @param timeBlocks - Array List of Array Lists of time blocks of the Collaborative Task.
      */
     public void setTimeBlocks(ArrayList<ArrayList<LocalDateTime>> timeBlocks) {
-
+        this.timeBlocks = timeBlocks;
     }
 
     /**

From d14945fcc5ddd31cbee542f1612414fec2a86a91 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Mon, 21 Nov 2022 12:56:38 -0500
Subject: [PATCH 16/24] Get rid of constructors without parameter deadline.

---
 src/main/java/entities/CollaborativeTask.java | 41 -------------------
 1 file changed, 41 deletions(-)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index 1b7e047..275649d 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -13,47 +13,6 @@ public class CollaborativeTask extends Task implements Timeblockable{
     private ArrayList<StudentUser> declinedTeammates;
     private StudentUser leader;
 
-
-    /**
-     * Create a CollaborativeTask with a title
-     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
-     * Otherwise, the frequency is blank
-     * @param title - the title of the Collaborative Task
-     * @param id - the unique ID of the Collaborative Task
-     * @param recurring - whether the Collaborative Task is recurring
-     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     * @param creator - the Student User who creates the Collaborative Task
-     */
-    public CollaborativeTask(String title, String id, boolean recurring, String frequency, StudentUser creator) {
-        super(title, id);
-        this.recurring = recurring;
-        if (recurring) {
-            this.frequency = frequency;
-        }
-        else {
-            this.frequency = "";
-        }
-        this.leader = creator;
-    }
-
-    /**
-     * Create a Collaborative Task with a title and priority
-     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
-     * Otherwise, the frequency is blank
-     * @param title - the title of the Collaborative Task
-     * @param id - the unique ID of the Collaborative Task
-     * @param priority - the priority value of the Collaborative Task
-     * @param recurring - whether the Collaborative Task is recurring
-     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     * @param creator - the Student User who creates the Collaborative Task
-     */
-    public CollaborativeTask(String title, String id, int priority, boolean recurring, String frequency, StudentUser creator) {
-        super(title, id, priority);
-        this.recurring = recurring;
-        this.frequency = frequency;
-        this.leader = creator;
-    }
-
     /**
      * Create a CollaborativeTask with a title and deadline
      * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)

From c4c509333a458236729f27d2499fbcc9f0868a36 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Mon, 21 Nov 2022 13:21:33 -0500
Subject: [PATCH 17/24] Got rid of constructors without priority.

---
 src/main/java/entities/CollaborativeTask.java | 26 +++----------------
 1 file changed, 3 insertions(+), 23 deletions(-)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index 275649d..23d2cfb 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -14,7 +14,7 @@ public class CollaborativeTask extends Task implements Timeblockable{
     private StudentUser leader;
 
     /**
-     * Create a CollaborativeTask with a title and deadline
+     * Create a CollaborativeTask with a title, priority, and deadline
      * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
      * Otherwise, the frequency is blank
      * @param title - the title of the Collaborative Task
@@ -24,8 +24,8 @@ public class CollaborativeTask extends Task implements Timeblockable{
      * @param deadline - the time at which the Collaborative Task is due
      * @param creator - the Student User who creates the Collaborative Task
      */
-    public CollaborativeTask(String title, String id, boolean recurring, String frequency, LocalDateTime deadline, StudentUser creator) {
-        super(title, id);
+    public CollaborativeTask(String title, String id, int priority, boolean recurring, String frequency, LocalDateTime deadline, StudentUser creator) {
+        super(title, id, priority);
         this.recurring = recurring;
         if (recurring) {
             this.frequency = frequency;
@@ -37,26 +37,6 @@ public CollaborativeTask(String title, String id, boolean recurring, String freq
         this.leader = creator;
     }
 
-    /**
-     * Create a Collaborative Task with a title, priority, and deadline
-     * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
-     * Otherwise, the frequency is blank
-     * @param title - the title of the Collaborative Task
-     * @param id - the unique ID of the Collaborative Task
-     * @param priority - the priority value of the Collaborative Task
-     * @param recurring - whether the Collaborative Task is recurring
-     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     * @param deadline - the time at which the Collaborative Task is due
-     * @param creator - the Student User who creates the Collaborative Task
-     */
-    public CollaborativeTask(String title, String id, int priority, boolean recurring, String frequency, LocalDateTime deadline, StudentUser creator) {
-        super(title, id, priority);
-        this.recurring = recurring;
-        this.frequency = frequency;
-        this.deadline = deadline;
-        this.leader = creator;
-    }
-
     /**
      * @return leader of the Collaborative Task
      */

From 10c4fba3832558e7793855bb6dbacfeaf9b06b2d Mon Sep 17 00:00:00 2001
From: sshmuylovich <simeshmu@gmail.com>
Date: Mon, 21 Nov 2022 13:22:55 -0500
Subject: [PATCH 18/24] Reformatted code according to IntelliJ convention.

---
 src/main/java/entities/CollaborativeTask.java | 66 +++++++++++--------
 1 file changed, 39 insertions(+), 27 deletions(-)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index 23d2cfb..53d9d86 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -3,7 +3,7 @@
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 
-public class CollaborativeTask extends Task implements Timeblockable{
+public class CollaborativeTask extends Task implements Timeblockable {
     private boolean recurring;
     private String frequency;
     private ArrayList<ArrayList<LocalDateTime>> timeBlocks;
@@ -17,20 +17,20 @@ public class CollaborativeTask extends Task implements Timeblockable{
      * Create a CollaborativeTask with a title, priority, and deadline
      * If the collaborative task is recurring, indicate the frequency (eg "daily", "weekly", "monthly)
      * Otherwise, the frequency is blank
-     * @param title - the title of the Collaborative Task
-     * @param id - the unique ID of the Collaborative Task
+     *
+     * @param title     - the title of the Collaborative Task
+     * @param id        - the unique ID of the Collaborative Task
      * @param recurring - whether the Collaborative Task is recurring
      * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     * @param deadline - the time at which the Collaborative Task is due
-     * @param creator - the Student User who creates the Collaborative Task
+     * @param deadline  - the time at which the Collaborative Task is due
+     * @param creator   - the Student User who creates the Collaborative Task
      */
     public CollaborativeTask(String title, String id, int priority, boolean recurring, String frequency, LocalDateTime deadline, StudentUser creator) {
         super(title, id, priority);
         this.recurring = recurring;
         if (recurring) {
             this.frequency = frequency;
-        }
-        else {
+        } else {
             this.frequency = "";
         }
         this.deadline = deadline;
@@ -40,31 +40,33 @@ public CollaborativeTask(String title, String id, int priority, boolean recurrin
     /**
      * @return leader of the Collaborative Task
      */
-    public StudentUser getLeader(){
+    public StudentUser getLeader() {
         return this.leader;
     }
 
     /**
      * Set a new leader of the Collaborative Task.
      * This method should only be used by the current leader of the Collaborative Task.
+     *
      * @param leader - the Student User who is going to replace the current leader of the Collaborative Task.
      */
-    public void setLeader(StudentUser leader){
+    public void setLeader(StudentUser leader) {
         this.leader = leader;
     }
 
     /**
      * @return an Array List of all Student Users who are teammates on this Collaborative Task, including the leader.
      */
-    public ArrayList<StudentUser> getTeammates(){
+    public ArrayList<StudentUser> getTeammates() {
         return this.teammates;
     }
 
     /**
      * To be used when invitations to join a Collaborative Task are accepted.
+     *
      * @param newTeammates - an Array List of Student Users who are to be added as teammates.
      */
-    public void addTeammates(ArrayList<StudentUser> newTeammates){
+    public void addTeammates(ArrayList<StudentUser> newTeammates) {
         this.teammates.addAll(newTeammates);
     }
 
@@ -73,9 +75,10 @@ public void addTeammates(ArrayList<StudentUser> newTeammates){
      * the oldTeammates parameter can contain any Student User in the Collaborative Task's teammates list.
      * When this method is used by any other teammate of the Collaborative Task,
      * the oldTeammates parameter can only contain themselves.
+     *
      * @param oldTeammates - an Array List of Student Users who are to be removed as teammates.
      */
-    public void removeTeammates(ArrayList<StudentUser> oldTeammates){
+    public void removeTeammates(ArrayList<StudentUser> oldTeammates) {
         this.teammates.removeAll(oldTeammates);
     }
 
@@ -83,69 +86,74 @@ public void removeTeammates(ArrayList<StudentUser> oldTeammates){
      * @return an Array List of all Student Users who have received invitations to join
      * the Collaborative Task but not responded.
      */
-    public ArrayList<StudentUser> getPendingTeammates(){
+    public ArrayList<StudentUser> getPendingTeammates() {
         return this.pendingTeammates;
     }
 
     /**
      * To be used when invitations to join a Collaborative Task are sent.
+     *
      * @param newTeammates - an Array List of Student Users who are being invited to join the Collaborative Task.
      */
-    public void addPendingTeammates(ArrayList<StudentUser> newTeammates){
+    public void addPendingTeammates(ArrayList<StudentUser> newTeammates) {
         this.pendingTeammates.addAll(newTeammates);
     }
 
     /**
      * To be used when invitations to join a Collaborative Task are canceled or responded to.
+     *
      * @param oldTeammates - an Array List of Student Users who are no longer undergoing the process of being
-     *                       invited to join the Collaborative Task.
+     *                     invited to join the Collaborative Task.
      */
-    public void removePendingTeammates(ArrayList<StudentUser> oldTeammates){
+    public void removePendingTeammates(ArrayList<StudentUser> oldTeammates) {
         this.pendingTeammates.removeAll(oldTeammates);
     }
 
     /**
      * @return an Array List of all Student Users who have declined invitations to join the Collaborative Task.
      */
-    public ArrayList<StudentUser> getDeclinedTeammates(){
+    public ArrayList<StudentUser> getDeclinedTeammates() {
         return this.declinedTeammates;
     }
 
     /**
      * To be used when invitations to join a Collaborative Task are declined.
+     *
      * @param newTeammates - an Array List of Student Users who have declined invitations to join the Collaborative Task.
      */
-    public void addDeclinedTeammates(ArrayList<StudentUser> newTeammates){
+    public void addDeclinedTeammates(ArrayList<StudentUser> newTeammates) {
         this.declinedTeammates.addAll(newTeammates);
     }
 
     /**
      * To be used when a Student User who has previously declined an invitation to join the Collaborative Task has
      * accepted a reinvitation to join.
+     *
      * @param oldTeammates - an Array List of Student Users who have accepted an invitation to join the Collaborative
-     *                       Task after previously declining such an invitation.
+     *                     Task after previously declining such an invitation.
      */
-    public void removeDeclinedTeammates(ArrayList<StudentUser> oldTeammates){
+    public void removeDeclinedTeammates(ArrayList<StudentUser> oldTeammates) {
         this.declinedTeammates.removeAll(oldTeammates);
     }
 
     /**
      * @return whether the Collaborative Task is reoccurring or not.
      */
-    public boolean getRecurring(){
+    public boolean getRecurring() {
         return this.recurring;
     }
 
     /**
      * @return frequency of Collaborative Task.
      */
-    public String getFrequency(){
+    public String getFrequency() {
         return this.frequency;
     }
 
     /**
      * Set a Collaborative Task as recurring/not
      * Set its new frequency if it is recurring
+     *
      * @param recurring - whether the Collaborative Task is recurring
      * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
      */
@@ -153,8 +161,7 @@ public void setRecurring(boolean recurring, String frequency) {
         this.recurring = recurring;
         if (recurring) {
             this.frequency = frequency;
-        }
-        else{
+        } else {
             this.frequency = "";
         }
     }
@@ -162,20 +169,22 @@ public void setRecurring(boolean recurring, String frequency) {
     /**
      * @return deadline for Collaborative Task.
      */
-    public LocalDateTime getDeadline(){
+    public LocalDateTime getDeadline() {
         return this.deadline;
     }
 
     /**
      * Set a deadline for a Collaborative Task.
+     *
      * @param deadline - deadline for Collaborative Task.
      */
-    public void setDeadline(LocalDateTime deadline){
-       this.deadline = deadline;
+    public void setDeadline(LocalDateTime deadline) {
+        this.deadline = deadline;
     }
 
     /**
      * Get the time blocks of a Collaborative Task.
+     *
      * @return - the time blocks of the Collaborative task in an Array List of Array Losts of LocalDateTimes.
      */
     public ArrayList<ArrayList<LocalDateTime>> getTimeBlocks() {
@@ -184,6 +193,7 @@ public ArrayList<ArrayList<LocalDateTime>> getTimeBlocks() {
 
     /**
      * Set new time blocks
+     *
      * @param timeBlocks - Array List of Array Lists of time blocks of the Collaborative Task.
      */
     public void setTimeBlocks(ArrayList<ArrayList<LocalDateTime>> timeBlocks) {
@@ -192,6 +202,7 @@ public void setTimeBlocks(ArrayList<ArrayList<LocalDateTime>> timeBlocks) {
 
     /**
      * Schedule a time block for the user
+     *
      * @return - whether the time block has been successfully scheduled
      */
     public boolean scheduleTimeBlocks() {
@@ -200,6 +211,7 @@ public boolean scheduleTimeBlocks() {
 
     /**
      * Remove a time block from the user's schedule
+     *
      * @return - whether the time block has been successfully removed
      */
     public boolean removeTimeBlocks() {

From 0a5288f6465c1d264d7d6353658f0fc5c7cc6190 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simaeshmu@gmail.com>
Date: Mon, 21 Nov 2022 13:56:21 -0500
Subject: [PATCH 19/24] Added instance attributes startTime and endTime as well
 as thier respective getter and setter methods. Added them to constructor.

---
 src/main/java/entities/CollaborativeTask.java | 188 ++++++++++--------
 1 file changed, 104 insertions(+), 84 deletions(-)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index 53d9d86..4e4a88b 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -6,8 +6,10 @@
 public class CollaborativeTask extends Task implements Timeblockable {
     private boolean recurring;
     private String frequency;
-    private ArrayList<ArrayList<LocalDateTime>> timeBlocks;
+    private LocalDateTime startTime;
+    private LocalDateTime endTime;
     private LocalDateTime deadline;
+    private ArrayList<ArrayList<LocalDateTime>> timeBlocks;
     private ArrayList<StudentUser> teammates;
     private ArrayList<StudentUser> pendingTeammates;
     private ArrayList<StudentUser> declinedTeammates;
@@ -22,10 +24,12 @@ public class CollaborativeTask extends Task implements Timeblockable {
      * @param id        - the unique ID of the Collaborative Task
      * @param recurring - whether the Collaborative Task is recurring
      * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     * @param startTime = the start time and date of the first occurrence of the Collaborative Task
+     * @param endTime   = the end time and date of the first occurrence of the Collaborative Task
      * @param deadline  - the time at which the Collaborative Task is due
      * @param creator   - the Student User who creates the Collaborative Task
      */
-    public CollaborativeTask(String title, String id, int priority, boolean recurring, String frequency, LocalDateTime deadline, StudentUser creator) {
+    public CollaborativeTask(String title, String id, int priority, boolean recurring, String frequency, LocalDateTime startTime, LocalDateTime endTime, LocalDateTime deadline, StudentUser creator) {
         super(title, id, priority);
         this.recurring = recurring;
         if (recurring) {
@@ -33,10 +37,108 @@ public CollaborativeTask(String title, String id, int priority, boolean recurrin
         } else {
             this.frequency = "";
         }
+        this.startTime = startTime;
+        this.endTime = endTime;
         this.deadline = deadline;
         this.leader = creator;
     }
 
+    /**
+     * @return whether the Collaborative Task is reoccurring or not.
+     */
+    public boolean getRecurring() {
+        return this.recurring;
+    }
+
+    /**
+     * @return frequency of Collaborative Task.
+     */
+    public String getFrequency() {
+        return this.frequency;
+    }
+
+    /**
+     * Set a Collaborative Task as recurring/not
+     * Set its new frequency if it is recurring
+     *
+     * @param recurring - whether the Collaborative Task is recurring
+     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
+     */
+    public void setRecurringAndFrequency(boolean recurring, String frequency) {
+        this.recurring = recurring;
+        if (recurring) {
+            this.frequency = frequency;
+        } else {
+            this.frequency = "";
+        }
+    }
+
+    /**
+     * @return start time for the initial occurrence of the Collaborative Task.
+     */
+    public LocalDateTime getStartTime() {
+        return this.startTime;
+    }
+
+    /**
+     * Set a start time for Collaborative Task.
+     *
+     * @param startTime - start time for the initial occurrence of the Collaborative Task.
+     */
+    public void setStartTime(LocalDateTime startTime) {
+        this.startTime = startTime;
+    }
+
+    /**
+     * @return end time for the initial occurrence of the Collaborative Task.
+     */
+    public LocalDateTime getEndTime() {
+        return this.endTime;
+    }
+
+    /**
+     * Set a end time for Collaborative Task.
+     *
+     * @param endTime - end time for the initial occurrence of the Collaborative Task.
+     */
+    public void setEndTime(LocalDateTime endTime) {
+        this.endTime = endTime;
+    }
+
+    /**
+     * @return deadline for Collaborative Task.
+     */
+    public LocalDateTime getDeadline() {
+        return this.deadline;
+    }
+
+    /**
+     * Set a deadline for a Collaborative Task.
+     *
+     * @param deadline - deadline for Collaborative Task.
+     */
+    public void setDeadline(LocalDateTime deadline) {
+        this.deadline = deadline;
+    }
+
+    /**
+     * Get the time blocks of a Collaborative Task.
+     *
+     * @return - the time blocks of the Collaborative task in an Array List of Array Losts of LocalDateTimes.
+     */
+    public ArrayList<ArrayList<LocalDateTime>> getTimeBlocks() {
+        return this.timeBlocks;
+    }
+
+    /**
+     * Set new time blocks
+     *
+     * @param timeBlocks - Array List of Array Lists of time blocks of the Collaborative Task.
+     */
+    public void setTimeBlocks(ArrayList<ArrayList<LocalDateTime>> timeBlocks) {
+        this.timeBlocks = timeBlocks;
+    }
+
     /**
      * @return leader of the Collaborative Task
      */
@@ -135,86 +237,4 @@ public void addDeclinedTeammates(ArrayList<StudentUser> newTeammates) {
     public void removeDeclinedTeammates(ArrayList<StudentUser> oldTeammates) {
         this.declinedTeammates.removeAll(oldTeammates);
     }
-
-    /**
-     * @return whether the Collaborative Task is reoccurring or not.
-     */
-    public boolean getRecurring() {
-        return this.recurring;
-    }
-
-    /**
-     * @return frequency of Collaborative Task.
-     */
-    public String getFrequency() {
-        return this.frequency;
-    }
-
-    /**
-     * Set a Collaborative Task as recurring/not
-     * Set its new frequency if it is recurring
-     *
-     * @param recurring - whether the Collaborative Task is recurring
-     * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
-     */
-    public void setRecurring(boolean recurring, String frequency) {
-        this.recurring = recurring;
-        if (recurring) {
-            this.frequency = frequency;
-        } else {
-            this.frequency = "";
-        }
-    }
-
-    /**
-     * @return deadline for Collaborative Task.
-     */
-    public LocalDateTime getDeadline() {
-        return this.deadline;
-    }
-
-    /**
-     * Set a deadline for a Collaborative Task.
-     *
-     * @param deadline - deadline for Collaborative Task.
-     */
-    public void setDeadline(LocalDateTime deadline) {
-        this.deadline = deadline;
-    }
-
-    /**
-     * Get the time blocks of a Collaborative Task.
-     *
-     * @return - the time blocks of the Collaborative task in an Array List of Array Losts of LocalDateTimes.
-     */
-    public ArrayList<ArrayList<LocalDateTime>> getTimeBlocks() {
-        return this.timeBlocks;
-    }
-
-    /**
-     * Set new time blocks
-     *
-     * @param timeBlocks - Array List of Array Lists of time blocks of the Collaborative Task.
-     */
-    public void setTimeBlocks(ArrayList<ArrayList<LocalDateTime>> timeBlocks) {
-        this.timeBlocks = timeBlocks;
-    }
-
-    /**
-     * Schedule a time block for the user
-     *
-     * @return - whether the time block has been successfully scheduled
-     */
-    public boolean scheduleTimeBlocks() {
-        return true;
-    }
-
-    /**
-     * Remove a time block from the user's schedule
-     *
-     * @return - whether the time block has been successfully removed
-     */
-    public boolean removeTimeBlocks() {
-        return true;
-    }
 }

From a106087eca87c534fbe5b570bc911fa926f9bcfb Mon Sep 17 00:00:00 2001
From: sshmuylovich <simaeshmu@gmail.com>
Date: Mon, 21 Nov 2022 16:13:50 -0500
Subject: [PATCH 20/24] Fixed error with implementing Timeblockable interface.

---
 src/main/java/entities/CollaborativeTask.java | 38 +++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index 4e4a88b..4836f5b 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -121,6 +121,44 @@ public void setDeadline(LocalDateTime deadline) {
         this.deadline = deadline;
     }
 
+    // The following four methods (getTimeBlock, setTimeBlock, scheduleTimeBlock, and removeTimeBlock) are here because this class implements Timeblockable/
+    // Based on the way Collaborative Tasks are scheduled (Feature 5), not sure if they remain necessary.
+    /**
+     * Set the time block of a Collaborative Task
+     * @return - the time block of the Collaborative Task
+     *         - in array form: {startTime, endTime}
+     */
+    public LocalDateTime[] getTimeBlock() {
+        return new LocalDateTime[] {this.startTime, this.endTime};
+    }
+
+    /**
+     * Set a new time block and then schedule it
+     * @param startTime - the start of the time block
+     * @param endTime - the end of the time block
+     */
+    public void setTimeBlock(LocalDateTime startTime, LocalDateTime endTime) {
+        this.startTime = startTime;
+        this.endTime = endTime;
+        scheduleTimeBlock();
+    }
+
+    /**
+     * Schedule a time block for the user
+     * @return - whether the time block has been successfully scheduled
+     */
+    public boolean scheduleTimeBlock() {
+        return true;
+    }
+
+    /**
+     * Remove a time block from the user's schedule
+     * @return - whether the time block has been successfully removed
+     */
+    public boolean removeTimeBlock() {
+        return true;
+    }
+
     /**
      * Get the time blocks of a Collaborative Task.
      *

From f88b795e84b2c104be9470bd5c1dd242a91e9216 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simaeshmu@gmail.com>
Date: Mon, 21 Nov 2022 20:10:14 -0500
Subject: [PATCH 21/24] Priority param in java doc for CollaborativeTask
 constructor.

---
 src/main/java/entities/CollaborativeTask.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index 4836f5b..d2a06d1 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -22,6 +22,7 @@ public class CollaborativeTask extends Task implements Timeblockable {
      *
      * @param title     - the title of the Collaborative Task
      * @param id        - the unique ID of the Collaborative Task
+     * @param priority  - the priority value of the Collaborative Task
      * @param recurring - whether the Collaborative Task is recurring
      * @param frequency - the frequency at which the Collaborative Task occurs (if recurring)
      * @param startTime = the start time and date of the first occurrence of the Collaborative Task

From 124d80deac03397f26d2be080c9b8e7dd1aac299 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simaeshmu@gmail.com>
Date: Mon, 21 Nov 2022 21:15:52 -0500
Subject: [PATCH 22/24] Delete internalUserList.java and UserWhisperer.java

---
 src/main/java/entities/UserWhisperer.java    | 22 --------------------
 src/main/java/entities/internalUserList.java | 17 ---------------
 2 files changed, 39 deletions(-)
 delete mode 100644 src/main/java/entities/UserWhisperer.java
 delete mode 100644 src/main/java/entities/internalUserList.java

diff --git a/src/main/java/entities/UserWhisperer.java b/src/main/java/entities/UserWhisperer.java
deleted file mode 100644
index ef96570..0000000
--- a/src/main/java/entities/UserWhisperer.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package entities;
-
-// Entity
-
-public class UserWhisperer {
-
-    /** Entity Layer
-     * What this class does */
-
-    public StudentUser createStudent(String name, String password) {
-        return new StudentUser(name, password);
-    }
-
-    public InstructorUser createInstructor(String name, String password) {
-        return null;
-    }
-
-
-    public String SearchUser(String name) {
-        return null;
-    }
-}
diff --git a/src/main/java/entities/internalUserList.java b/src/main/java/entities/internalUserList.java
deleted file mode 100644
index 962010d..0000000
--- a/src/main/java/entities/internalUserList.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package entities;
-
-import java.util.ArrayList;
-
-public class internalUserList {
-
-    /** Entity Layer
-     * An internal list of all Users of this program */
-
-    private ArrayList<User> UserList;
-
-    public String getUser(String userid) {
-        return null;
-    }
-
-    public void addUser() {}
-}

From 18c592736c10200c8ac459265304e234c5fad8c4 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simaeshmu@gmail.com>
Date: Mon, 21 Nov 2022 21:49:42 -0500
Subject: [PATCH 23/24] Changed teammates, pendingTeammates, and
 declinedTeammates add and remove methods to one set method.

---
 src/main/java/entities/CollaborativeTask.java | 70 +++++++------------
 1 file changed, 24 insertions(+), 46 deletions(-)

diff --git a/src/main/java/entities/CollaborativeTask.java b/src/main/java/entities/CollaborativeTask.java
index d2a06d1..a0eae1c 100644
--- a/src/main/java/entities/CollaborativeTask.java
+++ b/src/main/java/entities/CollaborativeTask.java
@@ -124,19 +124,22 @@ public void setDeadline(LocalDateTime deadline) {
 
     // The following four methods (getTimeBlock, setTimeBlock, scheduleTimeBlock, and removeTimeBlock) are here because this class implements Timeblockable/
     // Based on the way Collaborative Tasks are scheduled (Feature 5), not sure if they remain necessary.
+
     /**
      * Set the time block of a Collaborative Task
+     *
      * @return - the time block of the Collaborative Task
-     *         - in array form: {startTime, endTime}
+     * - in array form: {startTime, endTime}
      */
     public LocalDateTime[] getTimeBlock() {
-        return new LocalDateTime[] {this.startTime, this.endTime};
+        return new LocalDateTime[]{this.startTime, this.endTime};
     }
 
     /**
      * Set a new time block and then schedule it
+     *
      * @param startTime - the start of the time block
-     * @param endTime - the end of the time block
+     * @param endTime   - the end of the time block
      */
     public void setTimeBlock(LocalDateTime startTime, LocalDateTime endTime) {
         this.startTime = startTime;
@@ -146,6 +149,7 @@ public void setTimeBlock(LocalDateTime startTime, LocalDateTime endTime) {
 
     /**
      * Schedule a time block for the user
+     *
      * @return - whether the time block has been successfully scheduled
      */
     public boolean scheduleTimeBlock() {
@@ -154,6 +158,7 @@ public boolean scheduleTimeBlock() {
 
     /**
      * Remove a time block from the user's schedule
+     *
      * @return - whether the time block has been successfully removed
      */
     public boolean removeTimeBlock() {
@@ -203,24 +208,13 @@ public ArrayList<StudentUser> getTeammates() {
     }
 
     /**
-     * To be used when invitations to join a Collaborative Task are accepted.
-     *
-     * @param newTeammates - an Array List of Student Users who are to be added as teammates.
-     */
-    public void addTeammates(ArrayList<StudentUser> newTeammates) {
-        this.teammates.addAll(newTeammates);
-    }
-
-    /**
-     * When this method is used by the leader of the Collaborative Task,
-     * the oldTeammates parameter can contain any Student User in the Collaborative Task's teammates list.
-     * When this method is used by any other teammate of the Collaborative Task,
-     * the oldTeammates parameter can only contain themselves.
+     * Set a new Array List of Student User teammates.
+     * To be used when invitations are accepted, teammates are removed by leader, or teammates remove themselves.
      *
-     * @param oldTeammates - an Array List of Student Users who are to be removed as teammates.
+     * @param teammates - an Array List of Student Users who are to be added as teammates.
      */
-    public void removeTeammates(ArrayList<StudentUser> oldTeammates) {
-        this.teammates.removeAll(oldTeammates);
+    public void setTeammates(ArrayList<StudentUser> teammates) {
+        this.teammates = teammates;
     }
 
     /**
@@ -232,23 +226,15 @@ public ArrayList<StudentUser> getPendingTeammates() {
     }
 
     /**
-     * To be used when invitations to join a Collaborative Task are sent.
+     * Set a new Array List of Student User pending teammates.
+     * To be used when invitations to join a Collaborative Task are sent, canceled, or responded to.
      *
-     * @param newTeammates - an Array List of Student Users who are being invited to join the Collaborative Task.
+     * @param pendingTeammates - an Array List of Student Users who are being invited to join the Collaborative Task.
      */
-    public void addPendingTeammates(ArrayList<StudentUser> newTeammates) {
-        this.pendingTeammates.addAll(newTeammates);
+    public void setPendingTeammates(ArrayList<StudentUser> pendingTeammates) {
+        this.pendingTeammates = pendingTeammates;
     }
 
-    /**
-     * To be used when invitations to join a Collaborative Task are canceled or responded to.
-     *
-     * @param oldTeammates - an Array List of Student Users who are no longer undergoing the process of being
-     *                     invited to join the Collaborative Task.
-     */
-    public void removePendingTeammates(ArrayList<StudentUser> oldTeammates) {
-        this.pendingTeammates.removeAll(oldTeammates);
-    }
 
     /**
      * @return an Array List of all Student Users who have declined invitations to join the Collaborative Task.
@@ -258,22 +244,14 @@ public ArrayList<StudentUser> getDeclinedTeammates() {
     }
 
     /**
-     * To be used when invitations to join a Collaborative Task are declined.
+     * Set a new Array List of Student User declined teammates.
+     * To be used when invitations to join a Collaborative Task are declined or when a Student User who has previously
+     * declined an invitation to join the Collaborative Task has accepted a reinvitation to join.
      *
-     * @param newTeammates - an Array List of Student Users who have declined invitations to join the Collaborative Task.
+     * @param declinedTeammates - an Array List of Student Users who have declined invitations to join the Collaborative Task.
      */
-    public void addDeclinedTeammates(ArrayList<StudentUser> newTeammates) {
-        this.declinedTeammates.addAll(newTeammates);
+    public void setDeclinedTeammates(ArrayList<StudentUser> declinedTeammates) {
+        this.declinedTeammates = declinedTeammates;
     }
 
-    /**
-     * To be used when a Student User who has previously declined an invitation to join the Collaborative Task has
-     * accepted a reinvitation to join.
-     *
-     * @param oldTeammates - an Array List of Student Users who have accepted an invitation to join the Collaborative
-     *                     Task after previously declining such an invitation.
-     */
-    public void removeDeclinedTeammates(ArrayList<StudentUser> oldTeammates) {
-        this.declinedTeammates.removeAll(oldTeammates);
-    }
 }

From 8383ab27791cf9af8e3426ba89e72807aec33ae0 Mon Sep 17 00:00:00 2001
From: sshmuylovich <simaeshmu@gmail.com>
Date: Mon, 21 Nov 2022 21:53:43 -0500
Subject: [PATCH 24/24] Created collaborative_task_creation_use_case and
 collaborative_task_edit_use_case

---
 ...ollaborativeTaskCreationInputBoundary.java |  7 ++
 .../CollaborativeTaskCreationInteractor.java  | 35 +++++++++
 .../CollaborativeTaskCreationPresenter.java   |  9 +++
 ...CollaborativeTaskCreationRequestModel.java | 61 ++++++++++++++++
 ...ollaborativeTaskCreationResponseModel.java | 22 ++++++
 .../CollaborativeTaskEditInputBoundary.java   |  7 ++
 .../CollaborativeTaskEditInteractor.java      | 35 +++++++++
 .../CollaborativeTaskEditPresenter.java       |  9 +++
 .../CollaborativeTaskEditRequestModel.java    | 73 +++++++++++++++++++
 .../CollaborativeTaskEditResponseModel.java   | 24 ++++++
 10 files changed, 282 insertions(+)
 create mode 100644 src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationInputBoundary.java
 create mode 100644 src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationInteractor.java
 create mode 100644 src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationPresenter.java
 create mode 100644 src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationRequestModel.java
 create mode 100644 src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationResponseModel.java
 create mode 100644 src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditInputBoundary.java
 create mode 100644 src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditInteractor.java
 create mode 100644 src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditPresenter.java
 create mode 100644 src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditRequestModel.java
 create mode 100644 src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditResponseModel.java

diff --git a/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationInputBoundary.java b/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationInputBoundary.java
new file mode 100644
index 0000000..2be69e3
--- /dev/null
+++ b/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationInputBoundary.java
@@ -0,0 +1,7 @@
+package collaborative_task_creation_use_case;
+
+import entities.CollaborativeTask;
+
+public interface CollaborativeTaskCreationInputBoundary {
+    CollaborativeTaskCreationResponseModel create(CollaborativeTaskCreationRequestModel requestModel);
+}
\ No newline at end of file
diff --git a/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationInteractor.java b/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationInteractor.java
new file mode 100644
index 0000000..776053c
--- /dev/null
+++ b/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationInteractor.java
@@ -0,0 +1,35 @@
+package collaborative_task_creation_use_case;
+
+import entities.CollaborativeTask;
+import entities.StudentUser;
+import entities.TaskMap;
+import read_write.*;
+
+import java.time.LocalDateTime;
+
+public class CollaborativeTaskCreationInteractor implements CollaborativeTaskCreationInputBoundary {
+    private final CollaborativeTaskCreationPresenter presenter;
+    private final StudentUser student;
+
+    public CollaborativeTaskCreationInteractor(CollaborativeTaskCreationPresenter collaborativeTaskPresenter, StudentUser student) {
+        this.presenter = collaborativeTaskPresenter;
+        this.student = student;
+    }
+
+    @Override
+    public CollaborativeTaskCreationResponseModel create(CollaborativeTaskCreationRequestModel requestModel) {
+        if (requestModel.getTitle().equals("") || requestModel.getStartTime() == null || requestModel.getEndTime() == null || requestModel.getDeadline() == null || (requestModel.getRecurring() && requestModel.getFrequency().equals(""))) {
+            return presenter.prepareFailView("Please fill in all required information.");
+        }
+
+        String id = LocalDateTime.now() + "_" + student.getName() + "_none";
+
+        CollaborativeTask collaborativeTask = new CollaborativeTask(requestModel.getTitle(), id, requestModel.getPriority(), requestModel.getRecurring(), requestModel.getFrequency(), requestModel.getStartTime(), requestModel.getEndTime(), requestModel.getDeadline(), student);
+
+        TaskReadWrite trw = new TaskReadWrite("src/data/TaskMap");
+        TaskMap.saveToFile(trw);
+
+        CollaborativeTaskCreationResponseModel collaborativeTaskResponseModel = new CollaborativeTaskCreationResponseModel(requestModel.getTitle(), requestModel.getStartTime(), requestModel.getEndTime(), requestModel.getDeadline(), requestModel.getLeader());
+        return presenter.prepareSuccessView(collaborativeTaskResponseModel);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationPresenter.java b/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationPresenter.java
new file mode 100644
index 0000000..d432461
--- /dev/null
+++ b/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationPresenter.java
@@ -0,0 +1,9 @@
+package collaborative_task_creation_use_case;
+
+import entities.CollaborativeTask;
+
+public interface CollaborativeTaskCreationPresenter {
+    CollaborativeTaskCreationResponseModel prepareSuccessView(CollaborativeTaskCreationResponseModel collaborativeTaskCreationResponseModel);
+
+    CollaborativeTaskCreationResponseModel prepareFailView(String error);
+}
\ No newline at end of file
diff --git a/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationRequestModel.java b/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationRequestModel.java
new file mode 100644
index 0000000..9fa8de5
--- /dev/null
+++ b/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationRequestModel.java
@@ -0,0 +1,61 @@
+package collaborative_task_creation_use_case;
+
+import entities.CollaborativeTask;
+import entities.StudentUser;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+
+public class CollaborativeTaskCreationRequestModel {
+    private final String title;
+    private final int priority;
+    private final boolean recurring;
+    private final String frequency;
+    private final LocalDateTime startTime;
+    private final LocalDateTime endTime;
+    private final LocalDateTime deadline;
+    private final StudentUser leader;
+
+    public CollaborativeTaskCreationRequestModel(String title, int priority, boolean recurring, String frequency, LocalDateTime startTime, LocalDateTime endTime, LocalDateTime deadline, StudentUser leader) {
+        this.title = title;
+        this.priority = priority;
+        this.recurring = recurring;
+        this.frequency = frequency;
+        this.startTime = startTime;
+        this.endTime = endTime;
+        this.deadline = deadline;
+        this.leader = leader;
+    }
+
+    public String getTitle() {
+        return this.title;
+    }
+
+    public int getPriority() {
+        return this.priority;
+    }
+
+    public boolean getRecurring() {
+        return this.recurring;
+    }
+
+    public String getFrequency() {
+        return this.frequency;
+    }
+
+    public LocalDateTime getStartTime() {
+        return this.startTime;
+    }
+
+    public LocalDateTime getEndTime() {
+        return this.endTime;
+    }
+
+    public LocalDateTime getDeadline() {
+        return this.deadline;
+    }
+
+    public StudentUser getLeader() {
+        return this.leader;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationResponseModel.java b/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationResponseModel.java
new file mode 100644
index 0000000..ff4f98c
--- /dev/null
+++ b/src/main/java/collaborative_task_creation_use_case/CollaborativeTaskCreationResponseModel.java
@@ -0,0 +1,22 @@
+package collaborative_task_creation_use_case;
+
+import entities.CollaborativeTask;
+import entities.StudentUser;
+
+import java.time.LocalDateTime;
+
+public class CollaborativeTaskCreationResponseModel {
+    final String title;
+    final LocalDateTime startTime;
+    final LocalDateTime endTime;
+    final LocalDateTime deadline;
+    final StudentUser leader;
+
+    public CollaborativeTaskCreationResponseModel(String title, LocalDateTime startTime, LocalDateTime endTime, LocalDateTime deadline, StudentUser leader) {
+        this.title = title;
+        this.startTime = startTime;
+        this.endTime = endTime;
+        this.deadline = deadline;
+        this.leader = leader;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditInputBoundary.java b/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditInputBoundary.java
new file mode 100644
index 0000000..a5bf1a8
--- /dev/null
+++ b/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditInputBoundary.java
@@ -0,0 +1,7 @@
+package collaborative_task_edit_use_case;
+
+import entities.CollaborativeTask;
+
+public interface CollaborativeTaskEditInputBoundary {
+    CollaborativeTaskEditResponseModel edit(CollaborativeTaskEditRequestModel requestModel);
+}
\ No newline at end of file
diff --git a/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditInteractor.java b/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditInteractor.java
new file mode 100644
index 0000000..3295ef8
--- /dev/null
+++ b/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditInteractor.java
@@ -0,0 +1,35 @@
+package collaborative_task_edit_use_case;
+
+import collaborative_task_creation_use_case.CollaborativeTaskCreationResponseModel;
+import entities.CollaborativeTask;
+import entities.StudentUser;
+
+import java.util.ArrayList;
+
+public class CollaborativeTaskEditInteractor implements CollaborativeTaskEditInputBoundary {
+    private final CollaborativeTaskEditPresenter presenter;
+    private final StudentUser student;
+
+    public CollaborativeTaskEditInteractor(CollaborativeTaskEditPresenter collaborativeTaskPresenter, StudentUser student) {
+        this.presenter = collaborativeTaskPresenter;
+        this.student = student;
+    }
+
+    @Override
+    public CollaborativeTaskEditResponseModel edit(CollaborativeTaskEditRequestModel requestModel) {
+        if (requestModel.getTitle().equals("") || requestModel.getStartTime() == null || requestModel.getEndTime() == null || requestModel.getDeadline() == null || requestModel.getLeader() != student) {
+            return presenter.prepareFailView("Please fill in all required information.");
+        }
+        requestModel.getCollaborativeTask().setTitle(requestModel.getTitle());
+        requestModel.getCollaborativeTask().setPriority(requestModel.getPriority());
+        requestModel.getCollaborativeTask().setTimeBlock(requestModel.getStartTime(), requestModel.getEndTime());
+        requestModel.getCollaborativeTask().setDeadline(requestModel.getDeadline());
+        requestModel.getCollaborativeTask().setRecurringAndFrequency(requestModel.getRecurring(), requestModel.getFrequency());
+        requestModel.getCollaborativeTask().setTeammates(requestModel.getTeammates());
+        requestModel.getCollaborativeTask().setLeader(requestModel.getLeader());
+
+
+        CollaborativeTaskEditResponseModel collaborativeTaskEditResponseModel = new CollaborativeTaskEditResponseModel(requestModel.getTitle(), requestModel.getStartTime(), requestModel.getEndTime(), requestModel.getDeadline(), requestModel.getTeammates(), requestModel.getLeader());
+        return presenter.prepareSuccessView(collaborativeTaskEditResponseModel);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditPresenter.java b/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditPresenter.java
new file mode 100644
index 0000000..22aa207
--- /dev/null
+++ b/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditPresenter.java
@@ -0,0 +1,9 @@
+package collaborative_task_edit_use_case;
+
+import entities.CollaborativeTask;
+
+public interface CollaborativeTaskEditPresenter {
+    CollaborativeTaskEditResponseModel prepareSuccessView(CollaborativeTaskEditResponseModel collaborativeTaskEditResponseModel);
+
+    CollaborativeTaskEditResponseModel prepareFailView(String error);
+}
\ No newline at end of file
diff --git a/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditRequestModel.java b/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditRequestModel.java
new file mode 100644
index 0000000..44b9abc
--- /dev/null
+++ b/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditRequestModel.java
@@ -0,0 +1,73 @@
+package collaborative_task_edit_use_case;
+
+import entities.CollaborativeTask;
+import entities.StudentUser;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+
+public class CollaborativeTaskEditRequestModel {
+    private final CollaborativeTask collaborativeTask;
+    private final String title;
+    private final int priority;
+    private final boolean recurring;
+    private final String frequency;
+    private final LocalDateTime startTime;
+    private final LocalDateTime endTime;
+    private final LocalDateTime deadline;
+    private final ArrayList<StudentUser> teammates;
+    private final StudentUser leader;
+
+
+    public CollaborativeTaskEditRequestModel(CollaborativeTask collaborativeTask, String title, int priority, boolean recurring, String frequency, LocalDateTime startTime, LocalDateTime endTime, LocalDateTime deadline, ArrayList<StudentUser> teammates, StudentUser leader) {
+        this.collaborativeTask = collaborativeTask;
+        this.title = title;
+        this.priority = priority;
+        this.recurring = recurring;
+        this.frequency = frequency;
+        this.startTime = startTime;
+        this.endTime = endTime;
+        this.deadline = deadline;
+        this.teammates = teammates;
+        this.leader = leader;
+    }
+    public CollaborativeTask getCollaborativeTask() {
+        return this.collaborativeTask;
+    }
+
+    public String getTitle() {
+        return this.title;
+    }
+
+    public int getPriority() {
+        return this.priority;
+    }
+
+    public boolean getRecurring() {
+        return this.recurring;
+    }
+
+    public String getFrequency() {
+        return this.frequency;
+    }
+
+    public LocalDateTime getStartTime() {
+        return this.startTime;
+    }
+
+    public LocalDateTime getEndTime() {
+        return this.endTime;
+    }
+
+    public LocalDateTime getDeadline() {
+        return this.deadline;
+    }
+
+    public ArrayList<StudentUser> getTeammates() {
+        return this.teammates;
+    }
+
+    public StudentUser getLeader() {
+        return this.leader;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditResponseModel.java b/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditResponseModel.java
new file mode 100644
index 0000000..d133967
--- /dev/null
+++ b/src/main/java/collaborative_task_edit_use_case/CollaborativeTaskEditResponseModel.java
@@ -0,0 +1,24 @@
+package collaborative_task_edit_use_case;
+
+import entities.StudentUser;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+
+public class CollaborativeTaskEditResponseModel {
+    final String title;
+    final LocalDateTime startTime;
+    final LocalDateTime endTime;
+    final LocalDateTime deadline;
+    final ArrayList<StudentUser> teammates;
+    final StudentUser leader;
+
+    public CollaborativeTaskEditResponseModel(String title, LocalDateTime startTime, LocalDateTime endTime, LocalDateTime deadline, ArrayList<StudentUser> teammates, StudentUser leader) {
+        this.title = title;
+        this.startTime = startTime;
+        this.endTime = endTime;
+        this.deadline = deadline;
+        this.teammates = teammates;
+        this.leader = leader;
+    }
+}
\ No newline at end of file