diff --git a/src/main/java/app/Main.java b/src/main/java/app/Main.java index 424404fb..371338cd 100644 --- a/src/main/java/app/Main.java +++ b/src/main/java/app/Main.java @@ -12,6 +12,7 @@ public static void main(String[] args) { .addSignupUseCase() .addLoginUseCase() .addChangePasswordUseCase() + .addLogoutUseCase() .build(); application.pack(); diff --git a/src/main/java/interface_adapter/logout/LogoutController.java b/src/main/java/interface_adapter/logout/LogoutController.java index 49eedf89..e66d16cc 100644 --- a/src/main/java/interface_adapter/logout/LogoutController.java +++ b/src/main/java/interface_adapter/logout/LogoutController.java @@ -1,5 +1,6 @@ package interface_adapter.logout; +import use_case.login.LoginInputData; import use_case.logout.LogoutInputBoundary; /** @@ -10,13 +11,13 @@ public class LogoutController { private LogoutInputBoundary logoutUseCaseInteractor; public LogoutController(LogoutInputBoundary logoutUseCaseInteractor) { - // TODO: Save the interactor in the instance variable. + this.logoutUseCaseInteractor = logoutUseCaseInteractor; } /** * Executes the Logout Use Case. */ public void execute() { - // TODO: run the use case interactor for the logout use case + logoutUseCaseInteractor.execute(); } } diff --git a/src/main/java/interface_adapter/logout/LogoutPresenter.java b/src/main/java/interface_adapter/logout/LogoutPresenter.java index 4df31e73..e504e5fa 100644 --- a/src/main/java/interface_adapter/logout/LogoutPresenter.java +++ b/src/main/java/interface_adapter/logout/LogoutPresenter.java @@ -19,6 +19,9 @@ public LogoutPresenter(ViewManagerModel viewManagerModel, LoggedInViewModel loggedInViewModel, LoginViewModel loginViewModel) { // TODO: assign to the three instance variables. + this.loggedInViewModel = loggedInViewModel; + this.viewManagerModel = viewManagerModel; + this.loginViewModel = loginViewModel; } @Override @@ -29,18 +32,25 @@ public void prepareSuccessView(LogoutOutputData response) { // We also need to set the username in the LoggedInState to // the empty string. - // TODO: have prepareSuccessView update the LoggedInState // 1. get the LoggedInState out of the appropriate View Model, // 2. set the username in the state to the empty string // 3. firePropertyChanged so that the View that is listening is updated. + String username = this.loggedInViewModel.getState().getUsername(); + this.loggedInViewModel.getState().setUsername(""); + this.viewManagerModel.firePropertyChange(); - // TODO: have prepareSuccessView update the LoginState // 1. get the LoginState out of the appropriate View Model, // 2. set the username in the state to be the username of the user that just logged out, // 3. firePropertyChanged so that the View that is listening is updated. + this.loginViewModel.getState().setUsername(username); + this.loginViewModel.getState().setPassword(""); + this.loginViewModel.firePropertyChange(); // This code tells the View Manager to switch to the LoginView. this.viewManagerModel.setState(loginViewModel.getViewName()); this.viewManagerModel.firePropertyChange(); + + + } } diff --git a/src/main/java/use_case/logout/LogoutInteractor.java b/src/main/java/use_case/logout/LogoutInteractor.java index d252f7c4..83f17548 100644 --- a/src/main/java/use_case/logout/LogoutInteractor.java +++ b/src/main/java/use_case/logout/LogoutInteractor.java @@ -4,20 +4,25 @@ * The Logout Interactor. */ public class LogoutInteractor implements LogoutInputBoundary { - private LogoutUserDataAccessInterface userDataAccessObject; - private LogoutOutputBoundary logoutPresenter; + private final LogoutUserDataAccessInterface userDataAccessObject; + private final LogoutOutputBoundary logoutPresenter; public LogoutInteractor(LogoutUserDataAccessInterface userDataAccessInterface, LogoutOutputBoundary logoutOutputBoundary) { - // TODO: save the DAO and Presenter in the instance variables. + this.userDataAccessObject = userDataAccessInterface; + this.logoutPresenter = logoutOutputBoundary; } @Override public void execute() { - // TODO: implement the logic of the Logout Use Case // * set the current username to null in the DAO // * instantiate the `LogoutOutputData`, which needs to contain the username. // * tell the presenter to prepare a success view. + + String username = userDataAccessObject.getCurrentUsername(); + userDataAccessObject.setCurrentUsername(null); + LogoutOutputData outputData = new LogoutOutputData(username); + logoutPresenter.prepareSuccessView(outputData); } } diff --git a/src/main/java/view/LoggedInView.java b/src/main/java/view/LoggedInView.java index 1eb2cbd8..90f88c69 100644 --- a/src/main/java/view/LoggedInView.java +++ b/src/main/java/view/LoggedInView.java @@ -108,8 +108,7 @@ public void changedUpdate(DocumentEvent e) { * @param evt the ActionEvent to react to */ public void actionPerformed(ActionEvent evt) { - // TODO: execute the logout use case through the Controller - System.out.println("Click " + evt.getActionCommand()); + this.logoutController.execute(); } @Override @@ -140,6 +139,6 @@ public void setChangePasswordController(ChangePasswordController changePasswordC } public void setLogoutController(LogoutController logoutController) { - // TODO: save the logout controller in the instance variable. + this.logoutController = logoutController; } } diff --git a/src/main/java/view/LoginView.java b/src/main/java/view/LoginView.java index f7809810..0ba3d7f5 100644 --- a/src/main/java/view/LoginView.java +++ b/src/main/java/view/LoginView.java @@ -141,6 +141,7 @@ public void propertyChange(PropertyChangeEvent evt) { private void setFields(LoginState state) { usernameInputField.setText(state.getUsername()); + passwordInputField.setText(state.getPassword()); } public String getViewName() {