diff --git a/src/main/java/app/AppBuilder.java b/src/main/java/app/AppBuilder.java index e3c143a..3df177e 100644 --- a/src/main/java/app/AppBuilder.java +++ b/src/main/java/app/AppBuilder.java @@ -274,7 +274,7 @@ public AppBuilder addDashboardUseCase() { DynamoDbClientSingleton.getInstance()); final DashboardOutputBoundary dashboardOutputBoundary = new DashboardPresenter( - dashboardViewModel); + dashboardViewModel, viewManagerModel, choreCreationViewModel); final DashboardInputBoundary dashboardInteractor = new DashboardInteractor(dashboardOutputBoundary, userService, roomDataAccess, commitDataAccess); @@ -282,6 +282,7 @@ public AppBuilder addDashboardUseCase() { final DashboardController dashboardController = new DashboardController( dashboardInteractor); + dashboardView.setDashboardController(dashboardController); mainView.setDashboardController(dashboardController); return this; } @@ -398,7 +399,7 @@ public AppBuilder addChoreCreationUseCase() { final RoomDataAccessInterface roomDataAccess = new RoomDataAccessObject(DynamoDbClientSingleton.getInstance()); final ChoreCreationOutputBoundary choreCreationOutputBoundary = new ChoreCreationPresenter( choreCreationViewModel, - viewManagerModel); + viewManagerModel, loggedInViewModel); final ChoreCreationInputBoundary choreCreationInteractor = new ChoreCreationInteractor( choreCreationOutputBoundary, choreDataAccess, diff --git a/src/main/java/app/Main.java b/src/main/java/app/Main.java index 4b6da15..d0cfeaa 100644 --- a/src/main/java/app/Main.java +++ b/src/main/java/app/Main.java @@ -22,13 +22,13 @@ public static void main(String[] args) { .addGitConsoleView() .addProfileView() .addMainView() + .addChoreCreationView() .addSignupUseCase() .addLoginUseCase() .addGitConsoleUseCase() .addRoomUseCases() .addProfileUseCase() .addDashboardUseCase() - .addChoreCreationView() .addChoreCreationUseCase() .build(); diff --git a/src/main/java/interface_adapter/chore_creation/ChoreCreationPresenter.java b/src/main/java/interface_adapter/chore_creation/ChoreCreationPresenter.java index 7230d61..d823ae2 100644 --- a/src/main/java/interface_adapter/chore_creation/ChoreCreationPresenter.java +++ b/src/main/java/interface_adapter/chore_creation/ChoreCreationPresenter.java @@ -1,6 +1,7 @@ package interface_adapter.chore_creation; import interface_adapter.ViewManagerModel; +import interface_adapter.logged_in.LoggedInViewModel; import use_case.chore_creation.ChoreCreationOutputBoundary; import use_case.chore_creation.ChoreCreationOutputData; @@ -8,11 +9,13 @@ public class ChoreCreationPresenter implements ChoreCreationOutputBoundary { private final ChoreCreationViewModel viewModel; private final ViewManagerModel viewManagerModel; + private final LoggedInViewModel loggedInViewModel; public ChoreCreationPresenter(ChoreCreationViewModel viewModel, - ViewManagerModel viewManagerModel) { + ViewManagerModel viewManagerModel, LoggedInViewModel loggedInViewModel) { this.viewModel = viewModel; this.viewManagerModel = viewManagerModel; + this.loggedInViewModel = loggedInViewModel; } @Override @@ -20,7 +23,7 @@ public void prepareSuccessView(ChoreCreationOutputData outputData) { final ChoreCreationState state = new ChoreCreationState(); viewModel.setState(state); viewModel.firePropertyChange(); - viewManagerModel.setState("main"); + viewManagerModel.setState(loggedInViewModel.getViewName()); viewManagerModel.firePropertyChange(); } @@ -34,7 +37,7 @@ public void prepareFailView(String errorMessage) { @Override public void switchToDashboardView() { - viewManagerModel.setState("main"); + viewManagerModel.setState(loggedInViewModel.getViewName()); viewManagerModel.firePropertyChange(); } } diff --git a/src/main/java/interface_adapter/chore_creation/ChoreCreationViewModel.java b/src/main/java/interface_adapter/chore_creation/ChoreCreationViewModel.java index 8f6e6d8..feb7593 100644 --- a/src/main/java/interface_adapter/chore_creation/ChoreCreationViewModel.java +++ b/src/main/java/interface_adapter/chore_creation/ChoreCreationViewModel.java @@ -1,11 +1,5 @@ package interface_adapter.chore_creation; -import java.awt.*; -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; - -import javax.swing.*; - import interface_adapter.ViewModel; /** @@ -22,31 +16,8 @@ public class ChoreCreationViewModel extends ViewModel { public static final String CREATE_BUTTON_LABEL = "Create Chore"; public static final String CANCEL_BUTTON_LABEL = "Cancel Creation"; - private final PropertyChangeSupport support = new PropertyChangeSupport(this); - private ChoreCreationState state = new ChoreCreationState(); - public ChoreCreationViewModel() { super("chore creation"); setState(new ChoreCreationState()); } - - @Override - public ChoreCreationState getState() { - return state; - } - - @Override - public void setState(ChoreCreationState state) { - this.state = state; - } - - @Override - public void firePropertyChange() { - support.firePropertyChange("state", null, this.state); - } - - @Override - public void addPropertyChangeListener(PropertyChangeListener listener) { - support.addPropertyChangeListener(listener); - } } diff --git a/src/main/java/interface_adapter/dashboard/DashboardController.java b/src/main/java/interface_adapter/dashboard/DashboardController.java index 3cbbe26..f201f5b 100644 --- a/src/main/java/interface_adapter/dashboard/DashboardController.java +++ b/src/main/java/interface_adapter/dashboard/DashboardController.java @@ -17,4 +17,11 @@ public void execute() { final DashboardInputData inputData = new DashboardInputData(); dashboardInteractor.execute(inputData); } + + /** + * Switches the view to the Chore Creation View. + */ + public void switchToChoreCreationView() { + dashboardInteractor.switchToChoreCreationView(); + } } diff --git a/src/main/java/interface_adapter/dashboard/DashboardPresenter.java b/src/main/java/interface_adapter/dashboard/DashboardPresenter.java index 8377380..03fcee5 100644 --- a/src/main/java/interface_adapter/dashboard/DashboardPresenter.java +++ b/src/main/java/interface_adapter/dashboard/DashboardPresenter.java @@ -1,14 +1,20 @@ package interface_adapter.dashboard; +import interface_adapter.ViewManagerModel; +import interface_adapter.chore_creation.ChoreCreationViewModel; import use_case.dashboard.DashboardOutputBoundary; import use_case.dashboard.DashboardOutputData; public class DashboardPresenter implements DashboardOutputBoundary { private final DashboardViewModel dashboardViewModel; + private final ViewManagerModel viewManagerModel; + private final ChoreCreationViewModel choreCreationViewModel; - public DashboardPresenter(DashboardViewModel dashboardViewModel) { + public DashboardPresenter(DashboardViewModel dashboardViewModel, ViewManagerModel viewManagerModel, + ChoreCreationViewModel choreCreationViewModel) { this.dashboardViewModel = dashboardViewModel; - + this.viewManagerModel = viewManagerModel; + this.choreCreationViewModel = choreCreationViewModel; } @Override @@ -32,4 +38,10 @@ public void prepareFailView(String errorMessage) { dashboardViewModel.setState(dashboardState); dashboardViewModel.firePropertyChange(); } + + @Override + public void presentChoreCreationView() { + viewManagerModel.setState(choreCreationViewModel.getViewName()); + viewManagerModel.firePropertyChange(); + } } diff --git a/src/main/java/use_case/chore_creation/ChoreCreationInteractor.java b/src/main/java/use_case/chore_creation/ChoreCreationInteractor.java index 04d4acf..39bba69 100644 --- a/src/main/java/use_case/chore_creation/ChoreCreationInteractor.java +++ b/src/main/java/use_case/chore_creation/ChoreCreationInteractor.java @@ -79,8 +79,7 @@ public void execute(ChoreCreationInputData inputData) { inputData.getDescription(), dueDate, ChoreStatus.PENDING, - false - ); + false); choreDao.saveChore(chore); final ChoreCreationOutputData output = new ChoreCreationOutputData(chore.getTitle()); presenter.prepareSuccessView(output); diff --git a/src/main/java/use_case/dashboard/DashboardInputBoundary.java b/src/main/java/use_case/dashboard/DashboardInputBoundary.java index 2fb6946..67700d8 100644 --- a/src/main/java/use_case/dashboard/DashboardInputBoundary.java +++ b/src/main/java/use_case/dashboard/DashboardInputBoundary.java @@ -8,4 +8,9 @@ public interface DashboardInputBoundary { * @param dashboardInputData the input data for the login use case */ void execute(DashboardInputData dashboardInputData); + + /** + * Switches the view to the Chore Creation View. + */ + void switchToChoreCreationView(); } diff --git a/src/main/java/use_case/dashboard/DashboardInteractor.java b/src/main/java/use_case/dashboard/DashboardInteractor.java index ffe97ad..1ad910e 100644 --- a/src/main/java/use_case/dashboard/DashboardInteractor.java +++ b/src/main/java/use_case/dashboard/DashboardInteractor.java @@ -71,4 +71,9 @@ public void execute(DashboardInputData dashboardInputData) { dashboardPresenter.prepareSuccessView(dashboardOutputData); } + + @Override + public void switchToChoreCreationView() { + dashboardPresenter.presentChoreCreationView(); + } } diff --git a/src/main/java/use_case/dashboard/DashboardOutputBoundary.java b/src/main/java/use_case/dashboard/DashboardOutputBoundary.java index d2ceeb3..22aaf94 100644 --- a/src/main/java/use_case/dashboard/DashboardOutputBoundary.java +++ b/src/main/java/use_case/dashboard/DashboardOutputBoundary.java @@ -14,4 +14,9 @@ public interface DashboardOutputBoundary { * @param errorMessage the explanation of the failure */ void prepareFailView(String errorMessage); + + /** + * Presents the Chore Creation View. + */ + void presentChoreCreationView(); } diff --git a/src/main/java/view/ChoreCreationView.java b/src/main/java/view/ChoreCreationView.java index 966764c..61a7535 100644 --- a/src/main/java/view/ChoreCreationView.java +++ b/src/main/java/view/ChoreCreationView.java @@ -42,7 +42,7 @@ public class ChoreCreationView extends JPanel implements ActionListener, Propert * * @param choreCreationViewModel the ChoreCreationViewModel */ - @SuppressWarnings({"checkstyle:ExecutableStatementCountCheck", "JavaNCSS"}) + @SuppressWarnings({ "checkstyle:ExecutableStatementCountCheck", "JavaNCSS" }) public ChoreCreationView(ChoreCreationViewModel choreCreationViewModel) { this.choreCreationViewModel = choreCreationViewModel; choreCreationViewModel.addPropertyChangeListener(this); @@ -280,8 +280,7 @@ public void actionPerformed(ActionEvent evt) { currentState.getDescription(), currentState.getPriority(), currentState.getDueDate(), - currentState.getAssignedUser() - ); + currentState.getAssignedUser()); } else if (evt.getSource() == cancelButton) { choreCreationController.switchToDashboardView(); diff --git a/src/main/java/view/DashboardView.java b/src/main/java/view/DashboardView.java index 2fc0153..69b1465 100644 --- a/src/main/java/view/DashboardView.java +++ b/src/main/java/view/DashboardView.java @@ -1,11 +1,14 @@ package view; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.*; +import interface_adapter.dashboard.DashboardController; import interface_adapter.dashboard.DashboardState; import interface_adapter.dashboard.DashboardViewModel; @@ -14,6 +17,7 @@ public class DashboardView extends JPanel implements PropertyChangeListener { private final ActivityTilesPanel activityTilesPanel; private final DashboardViewModel dashboardViewModel; + private DashboardController dashboardController; public DashboardView(DashboardViewModel dashboardViewModel) { this.dashboardViewModel = dashboardViewModel; @@ -56,12 +60,31 @@ private JPanel createSection(Component content) { BorderFactory.createEmptyBorder(ViewConstants.DASHBOARD_BORDER, ViewConstants.DASHBOARD_BORDER, ViewConstants.DASHBOARD_BORDER, ViewConstants.DASHBOARD_BORDER))); + final JPanel headerPanel = new JPanel(new BorderLayout()); + headerPanel.setBackground(ViewColors.SAND_BACKGROUND); + headerPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, ViewConstants.DASHBOARD_BORDER, 0)); + final JLabel titleLabel = new JLabel("Chore Activity"); titleLabel.setFont(ViewConstants.TITLE_FONT); titleLabel.setForeground(ViewColors.DARK_BLUE); - titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, ViewConstants.DASHBOARD_BORDER, 0)); - section.add(titleLabel, BorderLayout.NORTH); + final JButton createChoreButton = new ButtonBuilder() + .setText("Create Chore") + .setFont(ViewConstants.LABEL_FONT) + .setBackground(ViewColors.ORANGE) + .setForeground(Color.WHITE) + .build(); + + createChoreButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + dashboardController.switchToChoreCreationView(); + } + }); + + headerPanel.add(titleLabel, BorderLayout.WEST); + headerPanel.add(createChoreButton, BorderLayout.EAST); + section.add(headerPanel, BorderLayout.NORTH); section.add(content, BorderLayout.CENTER); return section; @@ -89,4 +112,8 @@ public void propertyChange(PropertyChangeEvent evt) { public String getViewName() { return "dashboard"; } + + public void setDashboardController(DashboardController dashboardController) { + this.dashboardController = dashboardController; + } }