Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
4b8f3db
removed README file
albenaloo Nov 21, 2025
f7eeeac
Added Filter Search Files
albenaloo Nov 22, 2025
9edd16b
Added more Filter Search Files
albenaloo Nov 24, 2025
8211c6f
Added more Filter Search Files + AppBuilder functions
albenaloo Nov 24, 2025
805151c
Copy and Paste from old repo
Samario-in-UofT24 Nov 24, 2025
1e34e64
Copy and Paste from old repo
Samario-in-UofT24 Nov 24, 2025
f0a42a0
Test for News Interactor
Samario-in-UofT24 Nov 24, 2025
2fbab25
Test for MarketStatus Interactor
Samario-in-UofT24 Nov 24, 2025
00b9295
dash with stockpage sample
lyzsa Nov 24, 2025
01f500d
incomplete filter search data access, complete Stock entity
albenaloo Nov 24, 2025
6673cb8
earning
lindaaaaen Nov 25, 2025
d71800b
incomplete filter search data access, complete Stock entity
albenaloo Nov 27, 2025
2394f4b
Standardize the naming of packages
Samario-in-UofT24 Nov 29, 2025
b5f1b45
Standardize the naming of packages
Samario-in-UofT24 Nov 29, 2025
7d9ab95
semi complete missing display
albenaloo Nov 30, 2025
7e1d95f
added apikey
albenaloo Nov 30, 2025
ced0e96
added apikey
albenaloo Nov 30, 2025
d1de7a2
Completed view minus link to dash
albenaloo Nov 30, 2025
3f1b27a
adding dashboard by changing loggedinview and the appbuilder to add t…
shivambavo Nov 30, 2025
d811fb2
Completed view minus link to dash
albenaloo Nov 30, 2025
1b5c341
Merge pull request #12 from shivambavo/dashboard
albenaloo Nov 30, 2025
6bc5b2c
Added corrected Error message
albenaloo Nov 30, 2025
8502aff
Use the main implemented by Shivam
Samario-in-UofT24 Nov 30, 2025
0eeebf1
history
lindaaaaen Nov 30, 2025
63b2efd
Added addNewsView, addNewsUseCase and getViewName method for AppBuild…
albenaloo Nov 30, 2025
047f28c
Added method calls to Main
albenaloo Nov 30, 2025
f975ed0
Modify the code in FilterSearchView to achieve a cleaner architecture.
Samario-in-UofT24 Nov 30, 2025
382c30d
Merge pull request #10 from lyzsa/2-news-page
Samario-in-UofT24 Nov 30, 2025
32fc4c5
Revert "2 news page"
Samario-in-UofT24 Nov 30, 2025
eaaa196
Merge pull request #15 from lyzsa/revert-10-2-news-page
Samario-in-UofT24 Nov 30, 2025
fed3315
Merge remote-tracking branch 'origin/2-news-page' into 2-news-page
Samario-in-UofT24 Nov 30, 2025
88ce771
Synchronized with Main branch
Samario-in-UofT24 Nov 30, 2025
c523673
Synchronized with Main branch
Samario-in-UofT24 Nov 30, 2025
9b5c0b9
Revert "Revert "2 news page""
Samario-in-UofT24 Nov 30, 2025
c101510
Merge pull request #17 from lyzsa/revert-15-revert-10-2-news-page
Samario-in-UofT24 Nov 30, 2025
03a24be
Add the News Feature into the app
Samario-in-UofT24 Nov 30, 2025
ed77aba
Add the News Feature into the app.
Samario-in-UofT24 Nov 30, 2025
9c1eca5
Merge branch 'main' into 2-news-page
Samario-in-UofT24 Nov 30, 2025
243dcd7
Merge pull request #16 from lyzsa/2-news-page
Samario-in-UofT24 Nov 30, 2025
d124e95
cleanup
lindaaaaen Nov 30, 2025
f52667e
cleanup1
lindaaaaen Nov 30, 2025
16ffc92
cleaning
lindaaaaen Nov 30, 2025
f4f0c4e
update
lindaaaaen Nov 30, 2025
5ca38d3
Merge pull request #14 from lyzsa/history
lindaaaaen Nov 30, 2025
4c6f8c7
Copy and Paste from old repo
Samario-in-UofT24 Nov 24, 2025
03d206c
Test for MarketStatus Interactor
Samario-in-UofT24 Nov 24, 2025
f7e1097
Standardize the naming of packages
Samario-in-UofT24 Nov 29, 2025
8357909
Merge remote-tracking branch 'origin/7-marketstatus' into 7-marketstatus
Samario-in-UofT24 Nov 30, 2025
05d7755
Integrate Market Status in the toolbar of LoggedInView
Samario-in-UofT24 Nov 30, 2025
30f258c
Merge branch 'main' into FilterSearch
albenaloo Nov 30, 2025
4184460
Merge pull request #13 from lyzsa/FilterSearch
albenaloo Nov 30, 2025
efe9355
display
lindaaaaen Nov 30, 2025
723357d
Merge branch 'main' into 7-marketstatus
Samario-in-UofT24 Nov 30, 2025
12ae9fb
Fixed small conflicts in PR merge
albenaloo Nov 30, 2025
21bd317
Merge pull request #11 from lyzsa/7-marketstatus
Samario-in-UofT24 Nov 30, 2025
4169a2a
Connect History button to earnings history view
lindaaaaen Nov 30, 2025
7b6b881
improvement
lindaaaaen Nov 30, 2025
965185c
small changes
albenaloo Nov 30, 2025
cdc2c27
match mainMerge branch 'main' of https://github.com/lyzsa/CSC207_Stoc…
albenaloo Nov 30, 2025
1549c56
Merge branch 'main' into history-display
lindaaaaen Nov 30, 2025
d27f50c
Added filter searcg button code and back button
albenaloo Nov 30, 2025
28e100a
Merge pull request #18 from lyzsa/history-display
lindaaaaen Nov 30, 2025
b5a638b
fixerror
lindaaaaen Nov 30, 2025
3ace096
Add stockquote in entities for quote from finnhub api
shivambavo Dec 1, 2025
a51c8be
adding files for my stock feature
shivambavo Dec 1, 2025
a02b845
contents for stocksearchdatainterface
shivambavo Dec 1, 2025
9705b2b
adding stocksearchinputboundary
shivambavo Dec 1, 2025
e748873
adding search interactor file update
shivambavo Dec 1, 2025
aacb6a2
search output boundary file content
shivambavo Dec 1, 2025
49a5f7a
Merge branch 'main' into FilterSearch
albenaloo Dec 1, 2025
5c132ea
request model code
shivambavo Dec 1, 2025
31454ae
search response addition feature
shivambavo Dec 1, 2025
c5c75a1
adding searchcontroller
shivambavo Dec 1, 2025
edbe1b6
adding controller code
shivambavo Dec 1, 2025
8977446
adding presenter for stock search
shivambavo Dec 1, 2025
c21ac67
changed error in view and added view code
shivambavo Dec 1, 2025
6ef1e34
adding relevant components on app builder
shivambavo Dec 1, 2025
286c304
adding relevant starting files on main
shivambavo Dec 1, 2025
ee957c4
changing logged in view to show changes
shivambavo Dec 1, 2025
4541877
adding search controller
shivambavo Dec 1, 2025
5292f7c
Merge pull request #19 from lyzsa/FilterSearch
shivambavo Dec 1, 2025
b8726d3
improving searchability on filtersearch by adding symbol, name, isin,…
shivambavo Dec 1, 2025
bf79a5b
adding extended version
shivambavo Dec 1, 2025
e2c6bde
adding extended version in dataaccess class
shivambavo Dec 1, 2025
81c1a6c
adding new feature in response
shivambavo Dec 1, 2025
21e93a3
adding extended version in interactor
shivambavo Dec 1, 2025
6d28900
adding new feature in presentor
shivambavo Dec 1, 2025
4b1a345
fixing bugs
shivambavo Dec 1, 2025
0da65da
adding test case
shivambavo Dec 1, 2025
90f6014
Created watchlist use case
zoemhn Dec 1, 2025
8d1220f
changecomment
lindaaaaen Dec 1, 2025
df6baa1
Delete repeat initialization of History button
Samario-in-UofT24 Dec 1, 2025
4a1a0b6
Merge pull request #23 from lyzsa/history-display
Samario-in-UofT24 Dec 1, 2025
5f62ec4
Delete the strange introduction of filterSearchDAO which has already …
Samario-in-UofT24 Dec 1, 2025
33da597
Merge pull request #24 from lyzsa/FilterSearch
Samario-in-UofT24 Dec 1, 2025
4f75546
made account
zoemhn Dec 1, 2025
443b84f
made account
zoemhn Dec 1, 2025
3eb431d
Merge pull request #20 from lyzsa/dashstocksearch
shivambavo Dec 1, 2025
77efb4b
Real time search function implemented
lyzsa Dec 1, 2025
d2f2708
Merge branch 'main' into 21-current-market-trades
lyzsa Dec 1, 2025
8bb88c8
Merge pull request #26 from lyzsa/21-current-market-trades
lyzsa Dec 1, 2025
254e457
Delete useless Market Open button on toolbar. Only leave the string
Samario-in-UofT24 Dec 1, 2025
f25ddcd
Real time search function implemented
lyzsa Dec 1, 2025
a0d4e9a
Merge remote-tracking branch 'origin/21-current-market-trades' into 2…
lyzsa Dec 1, 2025
ac687ac
Merge pull request #28 from lyzsa/21-current-market-trades
lyzsa Dec 1, 2025
f6bf82a
Merge remote-tracking branch 'origin/main' into watchlist2
zoemhn Dec 1, 2025
7b4ad4f
Merge remote-tracking branch 'origin/main' into watchlist2
zoemhn Dec 1, 2025
f508557
Merge branch 'main' into 25-following-marketstatus-problem
Samario-in-UofT24 Dec 1, 2025
b05bbc7
Revert "21 current market trades new files added"
shivambavo Dec 1, 2025
bc39408
f
lindaaaaen Dec 1, 2025
cbde571
Revert "Real time search function implemented"
shivambavo Dec 1, 2025
4ad345b
Merge pull request #31 from lyzsa/revert-26-21-current-market-trades
shivambavo Dec 1, 2025
6aa6057
Merge pull request #30 from lyzsa/revert-28-21-current-market-trades
shivambavo Dec 1, 2025
336747e
Merge branch 'main' into 25-following-marketstatus-problem
Samario-in-UofT24 Dec 1, 2025
e5ea2b0
readme updated
lyzsa Dec 1, 2025
10dbfb6
Merge pull request #29 from lyzsa/25-following-marketstatus-problem
Samario-in-UofT24 Dec 1, 2025
2fb3fd7
Merge remote-tracking branch 'origin/main' into watchlist2
zoemhn Dec 1, 2025
e2e1da0
history test
lindaaaaen Dec 1, 2025
15fa23b
Merge pull request #32 from lyzsa/history-test
lindaaaaen Dec 1, 2025
5f3af1b
made account
zoemhn Dec 1, 2025
f892fff
made account
zoemhn Dec 1, 2025
fc620b1
made account
zoemhn Dec 1, 2025
845b99c
architecture updated with fixed bugs
lyzsa Dec 1, 2025
2558b33
delete testing display
lindaaaaen Dec 1, 2025
05d5a54
Merge pull request #33 from lyzsa/history-test
lindaaaaen Dec 1, 2025
0569af6
Merge pull request #35 from lyzsa/watchlist2
shivambavo Dec 1, 2025
cec302b
fixed something really quick
zoemhn Dec 1, 2025
2d760ff
Merge pull request #36 from lyzsa/watchlist2
albenaloo Dec 1, 2025
89de9df
Minor Bug fix
albenaloo Dec 1, 2025
ac07e6a
Merge pull request #37 from lyzsa/FilterSearch
shivambavo Dec 1, 2025
d45af9f
Merge origin/main into 21-current-market-trades: Resolve conflicts an…
lyzsa Dec 1, 2025
23d4976
architecture updated with fixed bugs
lyzsa Dec 1, 2025
8bf5a8a
Unnecessary code deletion and simplification
lyzsa Dec 2, 2025
cb3423b
minor simplification and formatting
lyzsa Dec 2, 2025
b8ee464
deletion of unused code for data accessing
lyzsa Dec 2, 2025
dd7e68c
deletion of debugging logger terminal prints
lyzsa Dec 2, 2025
8250617
Trade test
lyzsa Dec 3, 2025
405d69e
README update with watchlist functionality
lyzsa Dec 3, 2025
e043760
Error Handling for closed market
lyzsa Dec 3, 2025
1dd1855
Error Handling for closed market
lyzsa Dec 3, 2025
cccada7
Minor changes for detecting symbol type
lyzsa Dec 3, 2025
c626868
Refactor tradecode to meet Checkstyle
lyzsa Dec 3, 2025
0c1f28f
minor style updates
lyzsa Dec 3, 2025
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
488 changes: 267 additions & 221 deletions README.md

Large diffs are not rendered by default.

39 changes: 0 additions & 39 deletions plantuml/login_presenter_sequence_diagram.puml

This file was deleted.

243 changes: 237 additions & 6 deletions src/main/java/app/AppBuilder.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,34 @@
package app;

import data_access.FinnhubEarningsDataAccessObject;
import interface_adapter.account.AccountController;
import interface_adapter.account.AccountPresenter;
import interface_adapter.account.AccountViewModel;
import interface_adapter.earnings_history.EarningsHistoryController;
import interface_adapter.earnings_history.EarningsHistoryPresenter;
import interface_adapter.earnings_history.EarningsHistoryViewModel;
import use_case.earnings_history.EarningsDataAccessInterface;
import use_case.earnings_history.GetEarningsHistoryInputBoundary;
import use_case.earnings_history.GetEarningsHistoryInteractor;
import use_case.earnings_history.GetEarningsHistoryOutputBoundary;
import use_case.watchlist.WatchlistInputBoundary;
import use_case.watchlist.WatchlistInteractor;
import use_case.watchlist.WatchlistOutputBoundary;
import use_case.watchlist.WatchlistUserDataAccessInterface;
import view.EarningsHistoryView;

import data_access.FileUserDataAccessObject;
import data_access.FilterSearchDataAccessObject;
import data_access.stock_search.FinnhubStockSearchDataAccessObject;
import data_access.NewsDataAccessObject;
import entity.UserFactory;
import interface_adapter.ViewManagerModel;
import interface_adapter.filter_search.FilterSearchController;
import interface_adapter.filter_search.FilterSearchPresenter;
import interface_adapter.filter_search.FilterSearchViewModel;
import interface_adapter.stock_search.StockSearchController;
import interface_adapter.stock_search.StockSearchPresenter;
import interface_adapter.stock_search.StockSearchViewModel;
import interface_adapter.logged_in.ChangePasswordController;
import interface_adapter.logged_in.ChangePasswordPresenter;
import interface_adapter.logged_in.LoggedInViewModel;
Expand All @@ -11,25 +37,52 @@
import interface_adapter.login.LoginViewModel;
import interface_adapter.logout.LogoutController;
import interface_adapter.logout.LogoutPresenter;
import interface_adapter.news.NewsController;
import interface_adapter.news.NewsPresenter;
import interface_adapter.news.NewsViewModel;
import interface_adapter.signup.SignupController;
import interface_adapter.signup.SignupPresenter;
import interface_adapter.signup.SignupViewModel;
import use_case.change_password.ChangePasswordInputBoundary;
import use_case.change_password.ChangePasswordInteractor;
import use_case.change_password.ChangePasswordOutputBoundary;
import use_case.filter_search.FilterSearchDataAccessInterface;
import use_case.filter_search.FilterSearchInputBoundary;
import use_case.filter_search.FilterSearchInteractor;
import use_case.filter_search.FilterSearchOutputBoundary;
import use_case.stock_search.StockSearchDataAccessInterface;
import use_case.stock_search.StockSearchInputBoundary;
import use_case.stock_search.StockSearchInteractor;
import use_case.stock_search.StockSearchOutputBoundary;
import use_case.login.LoginInputBoundary;
import use_case.login.LoginInteractor;
import use_case.login.LoginOutputBoundary;
import use_case.logout.LogoutInputBoundary;
import use_case.logout.LogoutInteractor;
import use_case.logout.LogoutOutputBoundary;
import use_case.news.NewsInputBoundary;
import use_case.news.NewsInteractor;
import use_case.news.NewsOutputBoundary;
import use_case.signup.SignupInputBoundary;
import use_case.signup.SignupInteractor;
import use_case.signup.SignupOutputBoundary;
import view.LoggedInView;
import view.LoginView;
import view.SignupView;
import view.ViewManager;
import interface_adapter.market_status.MarketStatusViewModel;
import interface_adapter.market_status.MarketStatusPresenter;
import interface_adapter.market_status.MarketStatusController;
import use_case.market_status.MarketStatusInputBoundary;
import use_case.market_status.MarketStatusInteractor;
import use_case.market_status.MarketStatusOutputBoundary;
import use_case.market_status.MarketStatusDataAccessInterface;
import data_access.MarketStatusDataAccessObject;
import data_access.FinnhubTradeDataAccessObject;
import use_case.trade.TradeDataAccessInterface;
import use_case.trade.TradeInputBoundary;
import use_case.trade.TradeInteractor;
import use_case.trade.TradeOutputBoundary;
import interface_adapter.trade.TradeController;
import interface_adapter.trade.TradePresenter;
import interface_adapter.trade.TradeViewModel;
import view.*;

import javax.swing.*;
import java.awt.*;
Expand All @@ -44,8 +97,22 @@ public class AppBuilder {
// set which data access implementation to use, can be any
// of the classes from the data_access package

// This key should be retrieved from the environment
String apiKey = "d4lpdgpr01qr851prp30d4lpdgpr01qr851prp3g";

// DAO version using local file storage
final FileUserDataAccessObject userDataAccessObject = new FileUserDataAccessObject("users.csv", userFactory);
// DAO for earnings history
final EarningsDataAccessInterface earningsDataAccessObject =
new FinnhubEarningsDataAccessObject();
final WatchlistUserDataAccessInterface watchlistDataAccessObject = userDataAccessObject;
final FilterSearchDataAccessInterface filterSearchDataAccessObject =
new FilterSearchDataAccessObject(apiKey);
final StockSearchDataAccessInterface stockSearchDataAccessObject =
new FinnhubStockSearchDataAccessObject(apiKey);
final NewsDataAccessObject newsDataAccessObject = new NewsDataAccessObject(apiKey);
final MarketStatusDataAccessInterface marketStatusDataAccessObject =
new MarketStatusDataAccessObject(apiKey);

// DAO version using a shared external database
// final DBUserDataAccessObject userDataAccessObject = new DBUserDataAccessObject(userFactory);
Expand All @@ -56,6 +123,21 @@ public class AppBuilder {
private LoggedInViewModel loggedInViewModel;
private LoggedInView loggedInView;
private LoginView loginView;
private FilterSearchViewModel filterSearchViewModel;
private FilterSearchView filterSearchView;
private StockSearchViewModel stockSearchViewModel;
private StockSearchController stockSearchController;
private NewsViewModel newsViewModel;
private NewsView newsView;
private EarningsHistoryViewModel earningsHistoryViewModel;
private EarningsHistoryView earningsHistoryView;
private AccountView accountView;
private AccountViewModel accountViewModel;
private TradeView tradeView;
private TradeViewModel tradeViewModel;

private MarketStatusViewModel marketStatusViewModel;
private MarketStatusController marketStatusController;

public AppBuilder() {
cardPanel.setLayout(cardLayout);
Expand All @@ -82,6 +164,59 @@ public AppBuilder addLoggedInView() {
return this;
}

public AppBuilder addFilterSearchView() {
filterSearchViewModel = new FilterSearchViewModel();
filterSearchView = new FilterSearchView(filterSearchViewModel);
cardPanel.add(filterSearchView, filterSearchView.getViewName());
return this;
}

public AppBuilder addNewsView() {
newsViewModel = new NewsViewModel();
NewsOutputBoundary newsOutputBoundary = new NewsPresenter(newsViewModel);
NewsInputBoundary newsInputBoundary =
new NewsInteractor(newsDataAccessObject, newsOutputBoundary);
NewsController newsController = new NewsController(newsInputBoundary);

newsView = new NewsView(newsController, newsViewModel);
cardPanel.add(newsView, newsView.getViewName());
return this;
}
public AppBuilder addEarningsHistoryView() {
// ViewModel
earningsHistoryViewModel = new EarningsHistoryViewModel();

// Presenter + interactor
GetEarningsHistoryOutputBoundary outputBoundary =
new EarningsHistoryPresenter(earningsHistoryViewModel);
GetEarningsHistoryInputBoundary interactor =
new GetEarningsHistoryInteractor(earningsDataAccessObject, outputBoundary);

// Controller
EarningsHistoryController controller =
new EarningsHistoryController(interactor, earningsHistoryViewModel);

// Swing view
earningsHistoryView = new EarningsHistoryView(controller, earningsHistoryViewModel);

cardPanel.add(earningsHistoryView, earningsHistoryView.getViewName());
return this;
}

public AppBuilder addTradeView() {
tradeViewModel = new TradeViewModel();

TradeOutputBoundary tradeOutputBoundary = new TradePresenter(tradeViewModel);
TradeDataAccessInterface tradeDataAccess = new FinnhubTradeDataAccessObject();
TradeInputBoundary tradeInteractor = new TradeInteractor(tradeDataAccess, tradeOutputBoundary);
TradeController tradeController = new TradeController(tradeInteractor);


tradeView = new TradeView(tradeController, tradeViewModel);
cardPanel.add(tradeView, tradeView.getViewName());
return this;
}

public AppBuilder addSignupUseCase() {
final SignupOutputBoundary signupOutputBoundary = new SignupPresenter(viewManagerModel,
signupViewModel, loginViewModel);
Expand Down Expand Up @@ -116,6 +251,81 @@ public AppBuilder addChangePasswordUseCase() {
return this;
}

public AppBuilder addFilterSearchUseCase() {
final FilterSearchOutputBoundary filterSearchOutputBoundary = new FilterSearchPresenter(filterSearchViewModel);
final FilterSearchInputBoundary filterSearchInteractor =
new FilterSearchInteractor(filterSearchDataAccessObject, filterSearchOutputBoundary);

FilterSearchController filterSearchController = new FilterSearchController(filterSearchInteractor);
filterSearchView.setFilterSearchController(filterSearchController);

loggedInView.setFilterSearchNavigation(viewManagerModel, filterSearchView.getViewName());
filterSearchView.setBackNavigation(viewManagerModel, loggedInView.getViewName());
return this;
}
public AppBuilder addStockSearchUseCase() {
stockSearchViewModel = new StockSearchViewModel();
StockSearchOutputBoundary outputBoundary = new StockSearchPresenter(stockSearchViewModel);
StockSearchInputBoundary interactor =
new StockSearchInteractor(stockSearchDataAccessObject, outputBoundary);

stockSearchController = new StockSearchController(interactor, stockSearchViewModel);
loggedInView.setStockSearchController(stockSearchController);
loggedInView.setStockSearchViewModel(stockSearchViewModel);
return this;
}

public AppBuilder addNewsUsecase() {
// Logged-in page: News button → News view
loggedInView.setNewsNavigation(viewManagerModel, newsView.getViewName());

// News page: Back button → Logged-in view
newsView.setBackNavigation(viewManagerModel, loggedInView.getViewName());

return this;
}
public AppBuilder addEarningsHistoryUseCase() {
// Logged-in page: History button → Earnings history view
loggedInView.setHistoryNavigation(
viewManagerModel, earningsHistoryView.getViewName());

// Earnings history page: Back button → Logged-in view
earningsHistoryView.setBackNavigation(
viewManagerModel, loggedInView.getViewName());

return this;
}

public AppBuilder addAccount() {
accountViewModel = new AccountViewModel();
WatchlistOutputBoundary watchlistPresenter =
new AccountPresenter(accountViewModel);
WatchlistInputBoundary watchlistInteractor =
new WatchlistInteractor(watchlistDataAccessObject, watchlistPresenter);
AccountController accountController = new AccountController(watchlistInteractor);

accountView = new AccountView(accountViewModel);
accountView.setController(accountController);
cardPanel.add(accountView, accountView.getViewName());
loggedInView.setAccountController(accountController);

// Logged in page: Account button → Account view
loggedInView.setAccountNavigation(
viewManagerModel, accountView.getViewName());
viewManagerModel.addPropertyChangeListener(evt -> {
if (viewManagerModel.getState().equals(accountView.getViewName())) {
String username = userDataAccessObject.getCurrentUsername();
accountView.loadAccount(username);
}
});

// Account page: Back button → Logged-in view
accountView.setBackNavigation(
viewManagerModel, loggedInView.getViewName());

return this;
}

/**
* Adds the Logout Use Case to the application.
* @return this builder
Expand All @@ -132,8 +342,29 @@ public AppBuilder addLogoutUseCase() {
return this;
}

public AppBuilder addMarketStatusUseCase() {
marketStatusViewModel = new MarketStatusViewModel();
MarketStatusOutputBoundary msPresenter = new MarketStatusPresenter(marketStatusViewModel);
MarketStatusDataAccessInterface msDao = marketStatusDataAccessObject;
MarketStatusInputBoundary msInteractor = new MarketStatusInteractor(msDao, msPresenter);
marketStatusController = new MarketStatusController(msInteractor);
loggedInView.setMarketStatusViewModel(marketStatusViewModel);
if (tradeView != null) {
tradeView.setMarketStatusViewModel(marketStatusViewModel);
}
marketStatusController.updateStatus();
return this;
}

public AppBuilder addRealtimeTradeUseCase() {
String tradeViewName = tradeView.getViewName();
loggedInView.setRealtimeTradeNavigation(viewManagerModel, tradeViewName);
tradeView.setBackNavigation(viewManagerModel, loggedInView.getViewName());
return this;
}

public JFrame build() {
final JFrame application = new JFrame("User Login Example");
final JFrame application = new JFrame("Stock Application");
application.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

application.add(cardPanel);
Expand All @@ -145,4 +376,4 @@ public JFrame build() {
}


}
}
16 changes: 15 additions & 1 deletion src/main/java/app/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,27 @@ public static void main(String[] args) {
.addLoginView()
.addSignupView()
.addLoggedInView()
.addFilterSearchView()
.addSignupUseCase()
.addLoginUseCase()
.addChangePasswordUseCase()
.addFilterSearchUseCase()
.addNewsView()
.addEarningsHistoryView()
.addTradeView()
.addStockSearchUseCase()
.addSignupUseCase()
.addLoginUseCase()
.addChangePasswordUseCase()
.addNewsUsecase()
.addEarningsHistoryUseCase()
.addAccount()
.addMarketStatusUseCase()
.addRealtimeTradeUseCase()
.build();

application.pack();
application.setLocationRelativeTo(null);
application.setVisible(true);
}
}
}
Loading