Skip to content
Open
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
7 changes: 6 additions & 1 deletion src/app/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import data_access.FileUserDataAccessObject;
import entity.CommonUserFactory;
import interface_adapter.clear_users.ClearViewModel;
import interface_adapter.login.LoginViewModel;
import interface_adapter.logged_in.LoggedInViewModel;
import interface_adapter.signup.SignupViewModel;
Expand Down Expand Up @@ -43,14 +44,18 @@ public static void main(String[] args) {
LoggedInViewModel loggedInViewModel = new LoggedInViewModel();
SignupViewModel signupViewModel = new SignupViewModel();

// add clearViewModel
ClearViewModel clearViewModel = new ClearViewModel();

FileUserDataAccessObject userDataAccessObject;
try {
userDataAccessObject = new FileUserDataAccessObject("./users.csv", new CommonUserFactory());
} catch (IOException e) {
throw new RuntimeException(e);
}

SignupView signupView = SignupUseCaseFactory.create(viewManagerModel, loginViewModel, signupViewModel, userDataAccessObject);
// add clearViewModel and userDataAccessObject
SignupView signupView = SignupUseCaseFactory.create(viewManagerModel, loginViewModel, signupViewModel, userDataAccessObject, clearViewModel, userDataAccessObject);
views.add(signupView, signupView.viewName);

LoginView loginView = LoginUseCaseFactory.create(viewManagerModel, loginViewModel, loggedInViewModel, userDataAccessObject);
Expand Down
25 changes: 23 additions & 2 deletions src/app/SignupUseCaseFactory.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
package app;

import interface_adapter.clear_users.ClearController;
import interface_adapter.clear_users.ClearPresenter;
import interface_adapter.clear_users.ClearViewModel;
import interface_adapter.login.LoginViewModel;
import interface_adapter.signup.SignupController;
import interface_adapter.signup.SignupPresenter;
import interface_adapter.signup.SignupViewModel;
import use_case.clear_users.ClearInputBoundary;
import use_case.clear_users.ClearInteractor;
import use_case.clear_users.ClearOutputBoundary;
import use_case.clear_users.ClearUserDataAccessInterface;
import use_case.signup.SignupUserDataAccessInterface;
import entity.CommonUserFactory;
import entity.UserFactory;
Expand All @@ -22,15 +29,17 @@ public class SignupUseCaseFactory {
private SignupUseCaseFactory() {}

public static SignupView create(
ViewManagerModel viewManagerModel, LoginViewModel loginViewModel, SignupViewModel signupViewModel, SignupUserDataAccessInterface userDataAccessObject) {
ViewManagerModel viewManagerModel, LoginViewModel loginViewModel, SignupViewModel signupViewModel, SignupUserDataAccessInterface userDataAccessObject, ClearViewModel clearViewModel, ClearUserDataAccessInterface clearUserDataAccessObject) {

try {
SignupController signupController = createUserSignupUseCase(viewManagerModel, signupViewModel, loginViewModel, userDataAccessObject);
return new SignupView(signupController, signupViewModel);
ClearController clearController = createUserClearUseCase(viewManagerModel, clearViewModel, clearUserDataAccessObject);
return new SignupView(signupController, signupViewModel, clearController, clearViewModel);
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Could not open user data file.");
}


return null;
}

Expand All @@ -46,4 +55,16 @@ private static SignupController createUserSignupUseCase(ViewManagerModel viewMan

return new SignupController(userSignupInteractor);
}

private static ClearController createUserClearUseCase(ViewManagerModel viewManagerModel, ClearViewModel clearViewModel, ClearUserDataAccessInterface userDataAccessObject) throws IOException {

// Notice how we pass this method's parameters to the Presenter.
ClearOutputBoundary clearOutputBoundary = new ClearPresenter(viewManagerModel, clearViewModel);

// no UserFactorty
ClearInputBoundary clearInteractor = new ClearInteractor(
userDataAccessObject, clearOutputBoundary);

return new ClearController(clearInteractor);
}
}
28 changes: 27 additions & 1 deletion src/data_access/FileUserDataAccessObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@

import entity.User;
import entity.UserFactory;
import use_case.clear_users.ClearUserDataAccessInterface;
import use_case.login.LoginUserDataAccessInterface;
import use_case.signup.SignupUserDataAccessInterface;

import java.io.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

public class FileUserDataAccessObject implements SignupUserDataAccessInterface, LoginUserDataAccessInterface {
public class FileUserDataAccessObject implements SignupUserDataAccessInterface, LoginUserDataAccessInterface, ClearUserDataAccessInterface {

private final File csvFile;

Expand Down Expand Up @@ -85,6 +87,30 @@ private void save() {
}
}

@Override
public String delete() {
StringBuilder deleted = new StringBuilder();
ArrayList<String> accountsToDelete = new ArrayList<>(accounts.keySet());

for (String account : accountsToDelete) {
accounts.remove(account);
// start a new line after each user
deleted.append(account).append("\n");
}

BufferedWriter writer;
try {
writer = new BufferedWriter(new FileWriter(csvFile));
writer.flush();

writer.close();

} catch (IOException e) {
throw new RuntimeException(e);
}
return deleted.toString();
}


/**
* Return whether a user exists with username identifier.
Expand Down
12 changes: 11 additions & 1 deletion src/interface_adapter/clear_users/ClearController.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
package interface_adapter.clear_users;

// TODO Complete me
import use_case.clear_users.ClearInputBoundary;

public class ClearController {
final ClearInputBoundary clearUseCaseInteractor;

public ClearController(ClearInputBoundary clearUseCaseInteractor) {
this.clearUseCaseInteractor = clearUseCaseInteractor;
}

public void execute() {
clearUseCaseInteractor.execute();
}
}
33 changes: 31 additions & 2 deletions src/interface_adapter/clear_users/ClearPresenter.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,35 @@
package interface_adapter.clear_users;

// TODO Complete me

public class ClearPresenter {
import interface_adapter.ViewManagerModel;
import use_case.clear_users.ClearOutputBoundary;
import use_case.clear_users.ClearOutputData;

public class ClearPresenter implements ClearOutputBoundary {
private final ClearViewModel clearViewModel;
private ViewManagerModel viewManagerModel;

public ClearPresenter(ViewManagerModel viewManagerModel,
ClearViewModel clearViewModel) {
this.viewManagerModel = viewManagerModel;
this.clearViewModel = clearViewModel;
}

@Override
public void prepareSuccessView(ClearOutputData users) {
ClearState clearState = clearViewModel.getState();
clearState.setClear(users.getUsernames());
this.clearViewModel.setState(clearState);
this.clearViewModel.firePropertyChanged();

this.viewManagerModel.setActiveView(clearViewModel.getViewName());
this.viewManagerModel.firePropertyChanged();
}

@Override
public void prepareFailView(String error) {
ClearState clearState = clearViewModel.getState();
clearState.setClearError(error);
clearViewModel.firePropertyChanged();
}
}
26 changes: 25 additions & 1 deletion src/interface_adapter/clear_users/ClearState.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,30 @@
package interface_adapter.clear_users;

// TODO Complete me

public class ClearState {
private String clear = null;
private String clearError = null;

public ClearState(ClearState copy) {
clear = copy.clear;
clearError = copy.clearError;
}

public ClearState() {}

public String getClear() {
return clear;
}

public String getClearError() {
return clearError;
}

public void setClear(String clear) {
this.clear = clear;
}

public void setClearError(String clearError) {
this.clearError = clearError;
}
}
28 changes: 26 additions & 2 deletions src/interface_adapter/clear_users/ClearViewModel.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,30 @@
package interface_adapter.clear_users;

// TODO Complete me
import interface_adapter.ViewModel;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;

public class ClearViewModel {
public class ClearViewModel extends ViewModel{
private ClearState state = new ClearState();
public ClearViewModel() {
super("clear");
}

public void setState(ClearState state) {
this.state = state;
}
private final PropertyChangeSupport support = new PropertyChangeSupport(this);


public void firePropertyChanged() {
support.firePropertyChange("clear", null, this.state);
}

public void addPropertyChangeListener(PropertyChangeListener listener) {
support.addPropertyChangeListener(listener);
}

public ClearState getState() {
return state;
}
}
3 changes: 2 additions & 1 deletion src/use_case/clear_users/ClearInputBoundary.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package use_case.clear_users;

// TODO Complete me
// Complete me

public interface ClearInputBoundary {
void execute();
}
2 changes: 1 addition & 1 deletion src/use_case/clear_users/ClearInputData.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package use_case.clear_users;

// TODO Complete me

public class ClearInputData {
// no input
}
17 changes: 15 additions & 2 deletions src/use_case/clear_users/ClearInteractor.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
package use_case.clear_users;

// TODO Complete me

public class ClearInteractor {
public class ClearInteractor implements ClearInputBoundary{
final ClearUserDataAccessInterface userDataAccessObject;
final ClearOutputBoundary clearPresenter;

public ClearInteractor(ClearUserDataAccessInterface userDataAccessInterface, ClearOutputBoundary clearOutputBoundary) {
this.userDataAccessObject = userDataAccessInterface;
this.clearPresenter = clearOutputBoundary;
}

@Override
public void execute() {
String usernames = userDataAccessObject.delete();
ClearOutputData clearOutputData = new ClearOutputData(usernames, false);
clearPresenter.prepareSuccessView(clearOutputData);
}
}
5 changes: 3 additions & 2 deletions src/use_case/clear_users/ClearOutputBoundary.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package use_case.clear_users;

// TODO Complete me

public interface ClearOutputBoundary {

void prepareSuccessView(ClearOutputData user);
void prepareFailView(String error);
}
10 changes: 8 additions & 2 deletions src/use_case/clear_users/ClearOutputData.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
package use_case.clear_users;
public class ClearOutputData {
private final String usernames;
private boolean useCaseFailed;

// TODO Complete me
public ClearOutputData(String usernames, boolean useCaseFailed) {
this.usernames = usernames;
this.useCaseFailed = useCaseFailed;
}

public class ClearOutputData {
public String getUsernames() { return usernames; }
}
3 changes: 1 addition & 2 deletions src/use_case/clear_users/ClearUserDataAccessInterface.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package use_case.clear_users;

// TODO Complete me

public interface ClearUserDataAccessInterface {
String delete();
}
Loading