-
Notifications
You must be signed in to change notification settings - Fork 0
/
HomeController.java
184 lines (150 loc) · 5.54 KB
/
HomeController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.XYChart;
import javafx.scene.control.*;
import javafx.scene.input.MouseEvent;
import javafx.collections.FXCollections;
import java.net.URL;
import java.util.Date;
import java.util.ResourceBundle;
public class HomeController implements Initializable {
private Account currentUser;
private Market market;
public HomeController(Account currentUser, Market market){
this.currentUser = currentUser;
this.market = market;
}
@FXML
private Label username;
@FXML
private Label balance;
@FXML
private Label stockTitle;
@FXML
private TextField key;
@FXML
private ListView<String> stocksList;
@FXML
private Button buyStockButton;
@FXML
private Button sellStockButton;
@FXML
private Label ownedStock;
@FXML
private LineChart<String, Double> stockChart;
@FXML
private SplitPane stocksPane;
@FXML
private SplitPane accountsPane;
@FXML
private ListView<String> accountsList;
@FXML
private Label usernameLabel;
@FXML
private Label totalStocksLabel;
@FXML
private Button deleteButton;
@FXML
private Button blockButton;
@FXML
void buyStock(MouseEvent event){
Stock selected = market.getStocks().get(stocksList.getSelectionModel().getSelectedIndex());
((User)currentUser).buyStock(selected);
setStockDetails(selected);
}
@FXML
void sellStock(MouseEvent event){
Stock selected = market.getStocks().get(stocksList.getSelectionModel().getSelectedIndex());
((User)currentUser).sellStock(selected);
setStockDetails(selected);
}
@FXML
void deleteAccount(MouseEvent event){
int selectedIndex = accountsList.getSelectionModel().getSelectedIndex();
Account selected = market.getInvestors().get(selectedIndex);
market.removeInvestor(selected);
updateAccountList();
accountsList.getSelectionModel().select(0 );
setAccountDetails(market.getInvestors().get(0));
}
@FXML
void blockAccount(MouseEvent event){
int selectedIndex = accountsList.getSelectionModel().getSelectedIndex();
Account selected = market.getInvestors().get(selectedIndex);
market.removeInvestor(selected);
updateAccountList();
accountsList.getSelectionModel().select(0 );
setAccountDetails(market.getInvestors().get(0));
}
@FXML
void changeStockSelected(MouseEvent event){
setStockDetails(market.getStocks().get(stocksList.getSelectionModel().getSelectedIndex()));
setStockChart(market.getStocks().get(stocksList.getSelectionModel().getSelectedIndex()));
}
@FXML
void changeAccountSelected(MouseEvent event){
setAccountDetails(market.getInvestors().get(accountsList.getSelectionModel().getSelectedIndex()));
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
username.setText(currentUser.getUsername().toUpperCase());
if(currentUser instanceof Admin){
stocksPane.setVisible(false);
key.setText(((Admin)currentUser).getKey());
updateAccountList();
setAccountDetails(market.getInvestors().get(0));
}else{
accountsPane.setVisible(false);
balance.setText("$" + String.format( "%.3f",((User) currentUser).getBalance()));
key.setVisible(false);
updateStockList();
setStockDetails(market.getStocks().get(0));
setStockChart(market.getStocks().get(0));
}
}
public void saveState(){
market.toFile();
}
public void setStockDetails(Stock stock){
stockTitle.setText(stock.getCompany() + " (" + stock.getTicker() + ")");
balance.setText("$" + String.format( "%.3f",((User) currentUser).getBalance()));
buyStockButton.setText("Buy " + stock.getTicker());
sellStockButton.setText("Sell " + stock.getTicker());
ownedStock.setText("Owned: " + ((User)currentUser).getNStockByTicker(stock.getTicker()));
}
public void setAccountDetails(Account account){
usernameLabel.setText(account.getUsername());
if(account instanceof User) {
totalStocksLabel.setText("Total stocks: " + ((User) account).getMyStocks().size());
}else {
totalStocksLabel.setVisible(false);
}
deleteButton.setText("Delete " + account.getUsername());
blockButton.setText("Block " + account.getUsername());
}
public void updateAccountList(){
ObservableList<String> usernames = FXCollections.observableArrayList();
for(Account account: market.getInvestors()){
usernames.add(account.getUsername());
}
accountsList.setItems(usernames);
accountsList.getSelectionModel().select(0);
}
public void updateStockList(){
ObservableList<String> tickers = FXCollections.observableArrayList();
for(Stock stock: market.getStocks()){
tickers.add(stock.getTicker());
}
stocksList.setItems(tickers);
stocksList.getSelectionModel().select(0);
}
public void setStockChart(Stock stock){
XYChart.Series series = new XYChart.Series();
for (Price price: stock.getPrices()){
series.getData().add(new XYChart.Data(price.getDate().toString().substring(4,7), price.getClose()));
}
stockChart.getData().setAll(series);
}
}