diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..6c4abfb --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b2eea27 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git "a/.idea/shelf/Uncommitted_changes_before_Checkout_at_2025-07-22,_2_55\342\200\257p_m__[Changes]/shelved.patch" "b/.idea/shelf/Uncommitted_changes_before_Checkout_at_2025-07-22,_2_55\342\200\257p_m__[Changes]/shelved.patch" new file mode 100644 index 0000000..7c3f1ff --- /dev/null +++ "b/.idea/shelf/Uncommitted_changes_before_Checkout_at_2025-07-22,_2_55\342\200\257p_m__[Changes]/shelved.patch" @@ -0,0 +1,17 @@ +Index: homework-5.iml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n\n \n \n \n \n \n +=================================================================== +diff --git a/homework-5.iml b/homework-5.iml +--- a/homework-5.iml (revision 2464bb34945ff7277545ec16f38bf975a00749c3) ++++ b/homework-5.iml (date 1753150947110) +@@ -5,4 +5,7 @@ + + + ++ ++ + +\ No newline at end of file diff --git "a/.idea/shelf/Uncommitted_changes_before_Checkout_at_2025-07-22,_2_55\342\200\257p_m__[Changes]1/shelved.patch" "b/.idea/shelf/Uncommitted_changes_before_Checkout_at_2025-07-22,_2_55\342\200\257p_m__[Changes]1/shelved.patch" new file mode 100644 index 0000000..e69de29 diff --git a/.idea/shelf/Uncommitted_changes_before_Checkout_at_2025-07-22__2_55p_m___Changes_.xml b/.idea/shelf/Uncommitted_changes_before_Checkout_at_2025-07-22__2_55p_m___Changes_.xml new file mode 100644 index 0000000..81004f0 --- /dev/null +++ b/.idea/shelf/Uncommitted_changes_before_Checkout_at_2025-07-22__2_55p_m___Changes_.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..8af1b76 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + { + "lastFilter": { + "state": "OPEN", + "assignee": "rexho0" + } +} + { + "selectedUrlAndAccountId": { + "url": "https://github.com/Ethan-Hapurne/CSC207-Miao-Miao.git", + "accountId": "98f1e1ae-56d5-4bf6-9bb8-23381d17611e" + } +} + { + "associatedIndex": 3 +} + + + + + + + + + + + + + + + + + + + + + + + + 1753150307898 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main/java/app/AppBuilder.java b/main/java/app/AppBuilder.java index 3a59fe8..db5d4d0 100644 --- a/main/java/app/AppBuilder.java +++ b/main/java/app/AppBuilder.java @@ -21,6 +21,9 @@ import interface_adapter.signup.SignupController; import interface_adapter.signup.SignupPresenter; import interface_adapter.signup.SignupViewModel; +import interface_adapter.post_page.PostPageState; +import interface_adapter.post_page.PostPageViewModel; +import interface_adapter.main_page.MainPageViewModel; import use_case.change_password.ChangePasswordInputBoundary; import use_case.change_password.ChangePasswordInteractor; import use_case.change_password.ChangePasswordOutputBoundary; @@ -37,6 +40,8 @@ import view.LoginView; import view.SignupView; import view.ViewManager; +import view.MainPageView; +import view.PostPageView; /** * The AppBuilder class is responsible for putting together the pieces of @@ -67,6 +72,11 @@ public class AppBuilder { private LoggedInViewModel loggedInViewModel; private LoggedInView loggedInView; private LoginView loginView; + private MainPageView mainPageView; + private MainPageViewModel mainPageViewModel; + private PostPageView postPageView; + private PostPageViewModel postPageViewModel; + private PostPageState postPageState; public AppBuilder() { cardPanel.setLayout(cardLayout); @@ -105,6 +115,28 @@ public AppBuilder addLoggedInView() { return this; } + /** + * Adds the Main Page View to the application. + * @return this builder + */ + public AppBuilder addMainPageView() { + mainPageViewModel = new MainPageViewModel(); + mainPageView = new MainPageView(mainPageViewModel); + cardPanel.add(mainPageView, mainPageView.getViewName()); + return this; + } + + /** + * Adds the Post Page View to the application. + * @return this builder + */ + public AppBuilder addPostPageView() { + postPageViewModel = new PostPageViewModel(); + postPageView = new PostPageView(postPageViewModel); + cardPanel.add(postPageView, postPageView.getViewName()); + return this; + } + /** * Adds the Signup Use Case to the application. * @return this builder @@ -126,7 +158,7 @@ public AppBuilder addSignupUseCase() { */ public AppBuilder addLoginUseCase() { final LoginOutputBoundary loginOutputBoundary = new LoginPresenter(viewManagerModel, - loggedInViewModel, loginViewModel); + loggedInViewModel, loginViewModel, mainPageViewModel); final LoginInputBoundary loginInteractor = new LoginInteractor( userDataAccessObject, loginOutputBoundary); diff --git a/main/java/app/Main.java b/main/java/app/Main.java index 0d41ddf..6621db8 100644 --- a/main/java/app/Main.java +++ b/main/java/app/Main.java @@ -16,6 +16,8 @@ public static void main(String[] args) { .addLoginView() .addSignupView() .addLoggedInView() + .addMainPageView() + .addPostPageView() .addSignupUseCase() .addLoginUseCase() .addLogoutUseCase() diff --git a/main/java/interface_adapter/login/LoginPresenter.java b/main/java/interface_adapter/login/LoginPresenter.java index 6596d8b..3f47203 100644 --- a/main/java/interface_adapter/login/LoginPresenter.java +++ b/main/java/interface_adapter/login/LoginPresenter.java @@ -3,6 +3,7 @@ import interface_adapter.ViewManagerModel; import interface_adapter.change_password.LoggedInState; import interface_adapter.change_password.LoggedInViewModel; +import interface_adapter.main_page.MainPageViewModel; import use_case.login.LoginOutputBoundary; import use_case.login.LoginOutputData; @@ -14,25 +15,34 @@ public class LoginPresenter implements LoginOutputBoundary { private final LoginViewModel loginViewModel; private final LoggedInViewModel loggedInViewModel; private final ViewManagerModel viewManagerModel; + private final MainPageViewModel mainPageViewModel; public LoginPresenter(ViewManagerModel viewManagerModel, LoggedInViewModel loggedInViewModel, - LoginViewModel loginViewModel) { + LoginViewModel loginViewModel, + MainPageViewModel mainPageViewModel) { this.viewManagerModel = viewManagerModel; this.loggedInViewModel = loggedInViewModel; this.loginViewModel = loginViewModel; + this.mainPageViewModel = mainPageViewModel; } @Override public void prepareSuccessView(LoginOutputData response) { - // On success, switch to the logged in view. - final LoggedInState loggedInState = loggedInViewModel.getState(); - loggedInState.setUsername(response.getUsername()); - this.loggedInViewModel.setState(loggedInState); - this.loggedInViewModel.firePropertyChanged(); - - this.viewManagerModel.pushView(loggedInViewModel.getViewName()); +// // On success, switch to the logged in view. +// +// final LoggedInState loggedInState = loggedInViewModel.getState(); +// loggedInState.setUsername(response.getUsername()); +// this.loggedInViewModel.setState(loggedInState); +// this.loggedInViewModel.firePropertyChanged(); +// +// this.viewManagerModel.setState(loggedInViewModel.getViewName()); + + // On success, switch to the main page view. + this.mainPageViewModel.firePropertyChanged(); + this.viewManagerModel.setState(mainPageViewModel.getViewName()); + this.viewManagerModel.firePropertyChanged(); } @Override diff --git a/main/java/interface_adapter/main_page/MainPageController.java b/main/java/interface_adapter/main_page/MainPageController.java new file mode 100644 index 0000000..2841d09 --- /dev/null +++ b/main/java/interface_adapter/main_page/MainPageController.java @@ -0,0 +1,23 @@ +package interface_adapter.main_page; + +import interface_adapter.ViewManagerModel; +import interface_adapter.post_page.PostPageViewModel; + +/** + * The controller for the Login Use Case. + */ +public class MainPageController { + private final PostPageViewModel postPageViewModel; + private final ViewManagerModel viewManagerModel; + + public MainPageController(PostPageViewModel postPageViewModel, ViewManagerModel viewManagerModel) { + this.postPageViewModel = postPageViewModel; + this.viewManagerModel = viewManagerModel; + } + + public void navigateToPostsPage() { + this.postPageViewModel.firePropertyChanged(); + this.viewManagerModel.setState(postPageViewModel.getViewName()); + this.viewManagerModel.firePropertyChanged(); + } +} diff --git a/main/java/interface_adapter/main_page/MainPageState.java b/main/java/interface_adapter/main_page/MainPageState.java new file mode 100644 index 0000000..f0dfc9c --- /dev/null +++ b/main/java/interface_adapter/main_page/MainPageState.java @@ -0,0 +1,4 @@ +package interface_adapter.main_page; + +public class MainPageState { +} diff --git a/main/java/interface_adapter/main_page/MainPageViewModel.java b/main/java/interface_adapter/main_page/MainPageViewModel.java new file mode 100644 index 0000000..7b51d64 --- /dev/null +++ b/main/java/interface_adapter/main_page/MainPageViewModel.java @@ -0,0 +1,10 @@ +package interface_adapter.main_page; + +import interface_adapter.ViewModel; + +public class MainPageViewModel extends ViewModel { + public MainPageViewModel() { + super("main page"); + setState(new MainPageState()); + } +} diff --git a/main/java/interface_adapter/post_page/PostPageState.java b/main/java/interface_adapter/post_page/PostPageState.java new file mode 100644 index 0000000..e924f7d --- /dev/null +++ b/main/java/interface_adapter/post_page/PostPageState.java @@ -0,0 +1,4 @@ +package interface_adapter.post_page; + +public class PostPageState { +} diff --git a/main/java/interface_adapter/post_page/PostPageViewModel.java b/main/java/interface_adapter/post_page/PostPageViewModel.java new file mode 100644 index 0000000..455a06c --- /dev/null +++ b/main/java/interface_adapter/post_page/PostPageViewModel.java @@ -0,0 +1,10 @@ +package interface_adapter.post_page; + +import interface_adapter.ViewModel; + +public class PostPageViewModel extends ViewModel { + public PostPageViewModel() { + super("post page"); + setState(new PostPageState()); + } +} diff --git a/main/java/view/PostPageView.java b/main/java/view/PostPageView.java new file mode 100644 index 0000000..9b6f35a --- /dev/null +++ b/main/java/view/PostPageView.java @@ -0,0 +1,69 @@ +package view; + +import interface_adapter.post_page.PostPageState; +import interface_adapter.post_page.PostPageViewModel; + +import javax.swing.JPanel; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +public class PostPageView extends JPanel implements ActionListener, PropertyChangeListener { + private final String viewName = "post page"; + + private final PostPageViewModel postPageViewModel; + private final JButton postsButton; + private final JButton searchButton; + private final JButton backButton; + + public PostPageView(PostPageViewModel postPageViewModel) { + this.postPageViewModel = postPageViewModel; + this.postPageViewModel.addPropertyChangeListener(this); + + final JLabel title = new JLabel("Post Page Screen"); + title.setAlignmentX(Component.CENTER_ALIGNMENT); + + final JPanel buttons = new JPanel(); + + postsButton = new JButton("Posts"); + buttons.add(postsButton); + postsButton.addActionListener(this); + + searchButton = new JButton("search"); + buttons.add(searchButton); + searchButton.addActionListener(this); + + backButton = new JButton("Back"); + buttons.add(backButton); + backButton.addActionListener(this); + + this.add(title); + this.add(buttons); + } + + public String getViewName() { + return viewName; + } + + /** + * @param evt the event to be processed + */ + @Override + public void actionPerformed(ActionEvent evt) { + JOptionPane.showMessageDialog(this, evt.getActionCommand() + " clicked!"); + } + + /** + * @param evt A PropertyChangeEvent object describing the event source + * and the property that has changed. + */ + @Override + public void propertyChange(PropertyChangeEvent evt) { + + } +} \ No newline at end of file