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
+
+
+ 1753150307898
+
+
+
+
+
+
+
+ 1753150870127
+
+
+
+ 1753150870127
+
+
+
+ 1753150931916
+
+
+
+ 1753150931916
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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