Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions config/checkstyle.xml
Original file line number Diff line number Diff line change
Expand Up @@ -673,7 +673,7 @@
</module> -->

<module name="ClassFanOutComplexity">
<property name="max" value="90"/>
<property name="max" value="100"/>

<!--Default classes are also listed -->
<property name="excludedClasses"
Expand Down Expand Up @@ -803,7 +803,7 @@
</module>
<!-- <module name="LambdaBodyLength"/> -->
<module name="MethodCount">
<property name="maxTotal" value="34"/>
<property name="maxTotal" value="37"/>
</module>
<module name="MethodLength"/>
<module name="OuterTypeNumber"/>
Expand Down
42 changes: 37 additions & 5 deletions src/main/java/app/AppBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import interface_adapter.creategrouptasks.CreateGroupTasksController;
import interface_adapter.creategrouptasks.CreateGroupTasksPresenter;
import interface_adapter.creategrouptasks.CreateGroupTasksViewModel;
import interface_adapter.create_schedule.CreateScheduleViewModel;
import interface_adapter.dashboard.DashboardViewModel;
import interface_adapter.joingroup.JoinGroupController;
import interface_adapter.joingroup.JoinGroupPresenter;
Expand All @@ -32,7 +31,6 @@
import use_case.join_group.JoinGroupInputBoundary;
import use_case.join_group.JoinGroupInteractor;
import use_case.join_group.JoinGroupOutputBoundary;
import view.JoinGroupView;
import interface_adapter.editgrouptask.EditGroupTaskController;
import interface_adapter.editgrouptask.EditGroupTaskPresenter;
import interface_adapter.editgrouptask.EditGroupTaskViewModel;
Expand All @@ -50,6 +48,11 @@
import interface_adapter.manage_members.update_role.UpdateRoleControllerFactory;
import interface_adapter.manage_members.view_members.ViewMembersControllerFactory;
import interface_adapter.manage_members.view_pending.ViewPendingControllerFactory;
import interface_adapter.schedule.create_schedule.CreateScheduleController;
import interface_adapter.schedule.create_schedule.CreateScheduleControllerFactory;
import interface_adapter.schedule.create_schedule.CreateScheduleViewModel;
import interface_adapter.schedule.view_schedule.ScheduleTabPresenter;
import interface_adapter.schedule.view_schedule.ScheduleTabViewModel;
import interface_adapter.signup.SignupController;
import interface_adapter.signup.SignupPresenter;
import interface_adapter.signup.SignupViewModel;
Expand Down Expand Up @@ -102,6 +105,9 @@ public class AppBuilder {
final ViewManagerModel viewManagerModel = new ViewManagerModel();
final PeopleTabViewModel peopleTabViewModel = new PeopleTabViewModel();
ViewManager viewManager = new ViewManager(cardPanel, cardLayout, viewManagerModel);
CreateScheduleViewModel createScheduleViewModel = new CreateScheduleViewModel();
ScheduleTabViewModel groupScheduleViewModel = new ScheduleTabViewModel();
final ScheduleTabViewModel scheduleTabViewModel = new ScheduleTabViewModel();

private final java.util.Map<String, Dimension> viewSizes = new java.util.HashMap<>();

Expand Down Expand Up @@ -155,7 +161,7 @@ public class AppBuilder {
private EditGroupTaskViewModel editGroupTaskViewModel;
private CreateGroupTasksViewModel createGroupTasksViewModel;
private CreateScheduleView createScheduleView;
private CreateScheduleViewModel createScheduleViewModel;
private ScheduleTabPresenter groupSchedulePresenter;

private JFrame application;
private ViewTasksView viewTasksView;
Expand Down Expand Up @@ -291,6 +297,8 @@ public AppBuilder addGroupTasksUseCases() {
this.dashboardView.setCreateGroupTasksViewModel(createGroupTasksViewModel);
this.dashboardView.setEditGroupTasksViewModel(editGroupTaskViewModel);
this.dashboardView.setViewGroupTasksViewModel(viewGroupTasksViewModel);
this.dashboardView.setCreateScheduleViewModel(createScheduleViewModel);
this.dashboardView.setCreateScheduleView(createScheduleView);
return this;
}

Expand Down Expand Up @@ -492,14 +500,38 @@ public AppBuilder addLogoutUseCase() {
}

/**
* Adds create schedule use case to application (Not done).
* @return this builder
* Adds create schedule view.
* @return app builder
*/
public AppBuilder addCreateScheduleView() {
createScheduleViewModel = new CreateScheduleViewModel();
createScheduleView = new CreateScheduleView(createScheduleViewModel);
return this;
}

/**
* Method to add the Create Group Use Case.
*
* @return App Builder
*/
public AppBuilder addCreateScheduleUseCase() {
CreateScheduleControllerFactory factory = new CreateScheduleControllerFactory(
userDataAccessObject,
groupDataAccessObject,
membershipDataAccessObject,
viewManagerModel,
createScheduleViewModel,
groupScheduleViewModel
);

CreateScheduleController modalController =
factory.create(scheduleTabViewModel);

dashboardView.setCreateScheduleControllerFactory(factory);
createScheduleView.setCreateScheduleController(modalController);
createScheduleView.hookCreateScheduleModalOpen(application);
return this;
}

/**
* Build the JFrame.
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/app/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public static void main(String[] args) {
.addSignupView()
.addViewTasksUseCase()
.addDashboardView()
.addCreateScheduleView()
.addCreateGroupView()
.addJoinGroupView()
.addSignupUseCase()
Expand All @@ -35,7 +36,7 @@ public static void main(String[] args) {
.addRemoveMemberUseCase()
.addRespondRequestUseCase()
.addUpdateRoleUseCase()
.addCreateScheduleView()
.addCreateScheduleUseCase()
.build();

application.pack();
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/data_access/DBMembershipDataAccessObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import entity.user.UserRole;
import org.bson.Document;
import use_case.create_group.CreateGroupMembershipDataAccessInterface;
import use_case.create_schedule.CreateScheduleMembershipDataAccessInterface;
import use_case.join_group.JoinGroupMembershipDataAccessInterface;
import use_case.manage_members.remove_member.RemoveMemberDataAccessInterface;
import use_case.manage_members.respond_request.RespondRequestDataAccessInterface;
Expand Down Expand Up @@ -41,7 +42,8 @@ public class DBMembershipDataAccessObject implements
EditGroupTasksMembershipDataAccessInterface,
RemoveMemberDataAccessInterface,
RespondRequestDataAccessInterface,
UpdateRoleDataAccessInterface {
UpdateRoleDataAccessInterface,
CreateScheduleMembershipDataAccessInterface {

private static final String USER_FIELD = "user";
private static final String GROUP_FIELD = "group";
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/entity/group/Group.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public Group(String name, String groupId, GroupType groupType) {
this.groupType = groupType;
this.memberships = new ArrayList<>();
this.tasks = new ArrayList<>();
this.masterSchedule = new int[7][12];
this.masterSchedule = new int[12][7];
}

public String getGroupID() {
Expand Down Expand Up @@ -84,8 +84,6 @@ public int[][] getMasterSchedule() {

/**
* Method to get the moderator of this group.
* TODO: modify so it returns ALL the moderators
*
* @return The moderator of this group
* @throws NoSuchElementException if the group has no moderator
*/
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/entity/user/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public User(String name, String email, String password) {
this.password = password;
this.memberships = new ArrayList<>();
this.tasks = new ArrayList<>();
this.schedule = new boolean[7][12];
this.schedule = new boolean[12][7];
}

public String getUserID() {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package interface_adapter.create_schedule;
package interface_adapter.schedule.create_schedule;

import use_case.create_schedule.CreateScheduleInputBoundary;
import use_case.create_schedule.CreateScheduleInputData;
Expand All @@ -12,13 +12,12 @@ public CreateScheduleController(CreateScheduleInputBoundary createScheduleIntera

/**
* Executes the Create Schedule use case.
* @param userID the user creating the schedule.
* @param groupID the group this user is creating the schedule in.
* @param availabilityGrid the grid of the user's available time slots.
* @param groupID the group ID.
*/
public void execute(String userID, String groupID, boolean[][] availabilityGrid) {
public void execute(boolean[][] availabilityGrid, String groupID) {
final CreateScheduleInputData createScheduleInputData =
new CreateScheduleInputData(userID, groupID, availabilityGrid);
new CreateScheduleInputData(groupID, availabilityGrid);

createScheduleInteractor.execute(createScheduleInputData);
}
Expand All @@ -30,5 +29,13 @@ public void execute(String userID, String groupID, boolean[][] availabilityGrid)
public void openScheduleModal() {
createScheduleInteractor.openCreateScheduleModal();
}

/**
* Load the existing schedule for a group.
* @param groupID the group ID to load the schedule for
*/
public void loadSchedule(String groupID) {
createScheduleInteractor.loadSchedule(groupID);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package interface_adapter.schedule.create_schedule;

import interface_adapter.ViewManagerModel;
import interface_adapter.schedule.view_schedule.ScheduleTabViewModel;
import interface_adapter.schedule.view_schedule.ScheduleTabPresenter;
import use_case.create_schedule.CreateScheduleGroupDataAccessInterface;
import use_case.create_schedule.CreateScheduleInputBoundary;
import use_case.create_schedule.CreateScheduleUserDataAccessInterface;
import use_case.create_schedule.CreateScheduleOutputBoundary;
import use_case.create_schedule.CreateScheduleInteractor;
import use_case.create_schedule.CreateScheduleMembershipDataAccessInterface;

public class CreateScheduleControllerFactory {

private final CreateScheduleUserDataAccessInterface userDao;
private final CreateScheduleGroupDataAccessInterface groupDao;
private final CreateScheduleMembershipDataAccessInterface membershipDao;
private final ViewManagerModel viewManagerModel;
private final CreateScheduleViewModel createScheduleViewModel;
private final ScheduleTabViewModel groupScheduleViewModel;

public CreateScheduleControllerFactory(
CreateScheduleUserDataAccessInterface userDao,
CreateScheduleGroupDataAccessInterface groupDao,
CreateScheduleMembershipDataAccessInterface membershipDao,
ViewManagerModel viewManagerModel,
CreateScheduleViewModel createScheduleViewModel,
ScheduleTabViewModel groupScheduleViewModel
) {
this.userDao = userDao;
this.groupDao = groupDao;
this.membershipDao = membershipDao;
this.viewManagerModel = viewManagerModel;
this.createScheduleViewModel = createScheduleViewModel;
this.groupScheduleViewModel = groupScheduleViewModel;
}

/**
* Creates a fully wired CreateScheduleController for the given ScheduleTabViewModel.
* This method sets up the presenter and interactor so that the controller can
* retrieve members for a specific group and update the People tab UI.
*
* @param viewModel the view model that will be updated with retrieved member data
* @return a new RemoveMemberController wired to the appropriate interactor and presenter

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minor issue: CreateScheduleController not RemoveMemberController

*/
public CreateScheduleController create(ScheduleTabViewModel viewModel) {

CreateScheduleOutputBoundary presenter =
new CreateSchedulePresenter(
createScheduleViewModel,
viewManagerModel,
groupScheduleViewModel
);

ScheduleTabPresenter groupSchedulePresenter =
new ScheduleTabPresenter(viewModel);

CreateScheduleInputBoundary interactor =
new CreateScheduleInteractor(
userDao,
groupDao,
presenter,
membershipDao,
groupSchedulePresenter
);

return new CreateScheduleController(interactor);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package interface_adapter.schedule.create_schedule;

import interface_adapter.ViewManagerModel;
import interface_adapter.schedule.view_schedule.ScheduleTabViewModel;
import use_case.create_schedule.CreateScheduleOutputBoundary;
import use_case.create_schedule.CreateScheduleOutputData;

public class CreateSchedulePresenter implements CreateScheduleOutputBoundary {
private final CreateScheduleViewModel createScheduleViewModel;
private final ViewManagerModel viewManagerModel;
private final ScheduleTabViewModel groupScheduleViewModel;

public CreateSchedulePresenter(CreateScheduleViewModel createScheduleViewModel, ViewManagerModel viewManagerModel,
ScheduleTabViewModel groupScheduleViewModel
) {
this.createScheduleViewModel = createScheduleViewModel;
this.viewManagerModel = viewManagerModel;
this.groupScheduleViewModel = groupScheduleViewModel;
}

@Override
public void prepareSuccessView(CreateScheduleOutputData response) {
createScheduleViewModel.getState().setOpenModal(false);
createScheduleViewModel.firePropertyChange("openModal");

createScheduleViewModel.setState(new CreateScheduleState());
viewManagerModel.firePropertyChange("view");

}

@Override
public void prepareFailView(String error) {
final CreateScheduleState state = createScheduleViewModel.getState();
state.setError(error);

createScheduleViewModel.setState(state);
createScheduleViewModel.firePropertyChange("state");
}

@Override
public void openCreateScheduleModal() {
createScheduleViewModel.getState().setOpenModal(true);
createScheduleViewModel.firePropertyChange("openModal");
}

}
Loading