-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAdminDashboardController.java
More file actions
144 lines (135 loc) · 5.29 KB
/
AdminDashboardController.java
File metadata and controls
144 lines (135 loc) · 5.29 KB
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
package com.noteapp.controller;
import com.noteapp.common.service.NoteAppService;
import com.noteapp.common.service.NoteAppServiceException;
import com.noteapp.user.dao.AdminDAO;
import com.noteapp.user.dao.UserDAO;
import com.noteapp.user.service.AdminService;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* Controller cho view Dashboard của Admin
* @author admin
*/
public class AdminDashboardController extends RequestServiceController implements Initable {
@FXML
private Button viewUsersButton;
@FXML
private TextField searchUserField;
@FXML
private VBox userCardLayout;
@FXML
private Button closeButton;
@FXML
private Button logoutButton;
private Map<String, Boolean> lockedStatusOfUsers;
@Override
public void init() {
noteAppService = new NoteAppService();
noteAppService.setAdminService(new AdminService(UserDAO.getInstance(), AdminDAO.getInstance()));
initView();
closeButton.setOnAction((ActionEvent event) -> {
close();
});
logoutButton.setOnAction((ActionEvent event) -> {
LoginController.open(stage);
});
viewUsersButton.setOnAction((ActionEvent event) -> {
initView();
});
searchUserField.setOnAction((ActionEvent event) -> {
searchUser();
});
}
protected void initView() {
try {
lockedStatusOfUsers = noteAppService.getAdminService().getAllLockedStatus();
loadUsers(lockedStatusOfUsers);
} catch (NoteAppServiceException ex) {
showAlert(Alert.AlertType.ERROR, ex.getMessage());
}
}
private void saveLockedStatus(String username, boolean lockedStatus) {
try {
noteAppService.getAdminService().updateLockedStatus(username, lockedStatus);
} catch (NoteAppServiceException ex) {
showAlert(Alert.AlertType.ERROR, ex.getMessage());
}
}
/**
* Tải thông tin về các User và trạng thái Locked của họ vào
* một danh sách có thể hiển thị trên màn hình
* @param lockedStatusOfUsers Một Map lưu giữ trạng thái Locked của mỗi User
* @see userCardLayout
* @see UserItemController
*/
protected void loadUsers(Map<String, Boolean> lockedStatusOfUsers) {
userCardLayout.getChildren().clear();
if (lockedStatusOfUsers.isEmpty()) {
return;
}
String filePath = Controller.DEFAULT_FXML_RESOURCE + "UserItemView.fxml";
//Load từng user vào UserItemController
for (Map.Entry<String, Boolean> entry: lockedStatusOfUsers.entrySet()) {
String username = entry.getKey();
boolean isLocked = entry.getValue();
try {
UserItemController controller = new UserItemController();
HBox box = controller.loadFXML(filePath);
controller.setData(username, isLocked);
//Thêm action cho nút đổi trạng thái lock
controller.getChangeLockStatusButton().setOnAction((ActionEvent event) -> {
controller.changeLockedStatus();
String thisUsername = controller.getUsername();
boolean thisLockedStatus = controller.isLocked();
this.lockedStatusOfUsers.put(thisUsername, thisLockedStatus);
saveLockedStatus(thisUsername, thisLockedStatus);
});
userCardLayout.getChildren().add(box);
} catch (IOException ex) {
showAlert(Alert.AlertType.ERROR, "Can load user items");
}
}
}
/**
* Thực hiện tìm kiếm user có username chứa chuỗi được nhập vào
* {@link searchUserField} và load lại danh sách hiển thị những
* user khớp với yêu cầu
*/
protected void searchUser() {
String searchText = searchUserField.getText();
Map<String, Boolean> searchUsers = new HashMap<>();
for (Map.Entry<String, Boolean> entry: lockedStatusOfUsers.entrySet()) {
String username = entry.getKey();
boolean isLocked = entry.getValue();
if (username.contains(searchText)) {
searchUsers.put(username, isLocked);
}
}
loadUsers(searchUsers);
}
/**
* Mở một giao diện Dashboard cho Admin
* @param stage Stage được truyền vào để chứa giao diện này
*/
public static void open(Stage stage) {
try {
String filePath = Controller.DEFAULT_FXML_RESOURCE + "AdminDashboardView.fxml";
AdminDashboardController controller = new AdminDashboardController();
controller.setStage(stage);
controller.loadFXMLAndSetScene(filePath);
controller.init();
controller.showFXML();
} catch (IOException ex) {
showAlert(Alert.AlertType.ERROR, "Can't open admin dashboard");
}
}
}