Skip to content

Commit 8fb6912

Browse files
committed
Paging monitoring result tableview view boxes by monitoring alias
1 parent d4cd0a7 commit 8fb6912

File tree

6 files changed

+306
-106
lines changed

6 files changed

+306
-106
lines changed
Lines changed: 166 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
package root.javafx.Controller;
22

33
import java.io.IOException;
4-
import java.util.ArrayList;
5-
import java.util.HashMap;
4+
import java.util.Collections;
5+
import java.util.Date;
6+
import java.util.LinkedHashMap;
67
import java.util.List;
78
import java.util.Map;
89

910
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
1011
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView;
11-
import javafx.collections.FXCollections;
12+
import javafx.event.ActionEvent;
1213
import javafx.fxml.FXML;
1314
import javafx.fxml.FXMLLoader;
1415
import javafx.scene.control.Label;
1516
import javafx.scene.layout.AnchorPane;
16-
import javafx.scene.layout.HBox;
1717
import javafx.scene.layout.StackPane;
18-
import javafx.scene.text.Font;
19-
import root.core.domain.ASMDiskUsage;
20-
import root.core.domain.ArchiveUsage;
18+
import lombok.AllArgsConstructor;
19+
import lombok.Data;
2120
import root.core.domain.MonitoringResult;
22-
import root.core.domain.OSDiskUsage;
23-
import root.core.domain.TableSpaceUsage;
2421
import root.core.domain.enums.UsageUIType;
25-
import root.javafx.CustomView.MonitoringTableView;
26-
import root.javafx.CustomView.MonitoringTableViewFactory;
22+
import root.javafx.CustomView.MonitoringTableViewContainer;
2723
import root.javafx.DI.DependencyInjection;
24+
import root.utils.DateUtils;
2825

29-
public class MonitoringResultTableViewAP extends AnchorPane {
26+
public class MonitoringTableViewPagingBox extends AnchorPane {
27+
28+
@FXML
29+
private FontAwesomeIconView iconView;
3030

3131
@FXML
3232
private Label aliasLabel;
@@ -37,79 +37,178 @@ public class MonitoringResultTableViewAP extends AnchorPane {
3737
@FXML
3838
private StackPane tableViewSP;
3939

40-
@FXML
41-
private HBox tableViewHBox;
42-
43-
private static final Map<Class<? extends MonitoringResult>, String> titleMap = new HashMap<>();
44-
static {
45-
titleMap.put(ArchiveUsage.class, "Archive 사용량");
46-
titleMap.put(TableSpaceUsage.class, "TableSpace 사용량");
47-
titleMap.put(ASMDiskUsage.class, "ASM Disk 사용량");
48-
titleMap.put(OSDiskUsage.class, "OS Disk 사용량");
49-
}
50-
51-
private Map<Class<? extends MonitoringResult>, MonitoringTableView<? extends MonitoringResult>> tableViewMap = new HashMap<>();
52-
53-
private Map<Class<? extends MonitoringResult>, List<Object>> tableDataListMap = new HashMap<>();
40+
private Map<AliasInfo, MonitoringTableViewContainer> tableViewContainerMap = new LinkedHashMap<>();
5441

55-
public MonitoringResultTableViewAP() {
42+
public MonitoringTableViewPagingBox(String monitoringType) {
5643
try {
57-
FXMLLoader loader = DependencyInjection.getLoader("/fxml/MonitoringResultTableViewAP.fxml");
44+
FXMLLoader loader = DependencyInjection.getLoader("/fxml/MonitoringTableViewPagingBox.fxml");
5845
loader.setController(this);
5946
loader.setRoot(this);
6047
loader.load();
6148
} catch (IOException e) {
6249
e.printStackTrace();
6350
}
51+
iconView.setIcon(monitoringType.equals("DB") ? FontAwesomeIcon.DATABASE : FontAwesomeIcon.SERVER);
52+
setMonitoringTimeLabel(new Date());
6453
}
6554

6655
/**
67-
* 모니터링 결과 TableView를 추가한다.
56+
* Alias별로 모니터링 TableView를 나열할 컨테이너를 생성한다.
6857
*
58+
* @param alias
6959
* @param type
7060
*/
71-
private void addMonitoringTableView(Class<? extends MonitoringResult> type, UsageUIType usageUIType) {
72-
AnchorPane tableViewWrapper = new AnchorPane();
73-
tableViewWrapper.setMinWidth(350);
74-
75-
Label titleLabel = new Label();
76-
titleLabel.setText(titleMap.get(type));
77-
titleLabel.setFont(Font.font("Noto Sans Korean Regular"));
78-
79-
FontAwesomeIconView icon = new FontAwesomeIconView(FontAwesomeIcon.ASTERISK, "9");
80-
titleLabel.setGraphic(icon);
81-
82-
AnchorPane.setTopAnchor(titleLabel, 0.0);
83-
AnchorPane.setLeftAnchor(titleLabel, 0.0);
84-
AnchorPane.setRightAnchor(titleLabel, 0.0);
85-
86-
MonitoringTableView<? extends MonitoringResult> tableView = MonitoringTableViewFactory.create(type, usageUIType);
87-
AnchorPane.setTopAnchor(tableView, 20.0);
88-
AnchorPane.setLeftAnchor(tableView, 0.0);
89-
AnchorPane.setRightAnchor(tableView, 0.0);
90-
AnchorPane.setBottomAnchor(tableView, 0.0);
91-
tableViewMap.put(type, tableView);
92-
93-
tableViewWrapper.getChildren().addAll(titleLabel, tableView);
94-
tableViewHBox.getChildren().add(tableViewWrapper);
95-
}
96-
97-
@SuppressWarnings("unchecked")
98-
public <T extends MonitoringResult> void setTableData(String alias, Class<T> type, List<T> dataList,
99-
UsageUIType usageUIType) {
100-
List<Object> list = tableDataListMap.get(type);
101-
if (list == null) {
102-
list = new ArrayList<>();
61+
public void addMonitoringTableViewContainer(String alias, Class<? extends MonitoringResult> type) {
62+
if (tableViewContainerMap.get(findAliasInfoByAlias(alias)) == null) {
63+
MonitoringTableViewContainer container = new MonitoringTableViewContainer();
64+
tableViewContainerMap.put(new AliasInfo(alias, findLastAliasInfoIndex() + 1), container);
65+
tableViewSP.getChildren().add(container);
10366
}
10467

105-
list.clear();
106-
list.addAll(dataList);
68+
MonitoringTableViewContainer container = tableViewContainerMap.get(findAliasInfoByAlias(alias));
69+
container.addMonitoringTableView(type);
70+
container.setUsageUIType(type, UsageUIType.NUMERIC); // default
71+
tableViewContainerMap.put(findAliasInfoByAlias(alias), container);
72+
}
73+
74+
/**
75+
* 모니터링 결과 TableView의 사용량 컬럼의 UI 타입을 설정한다.
76+
*
77+
* @param alias
78+
* @param type
79+
* @param uiType
80+
*/
81+
public void setMonitoringTableViewUsageUIType(String alias, Class<? extends MonitoringResult> type,
82+
UsageUIType uiType) {
83+
tableViewContainerMap.get(findAliasInfoByAlias(alias)).setUsageUIType(type, uiType);
84+
}
85+
86+
/**
87+
* 모니터링 결과 TableView에 데이터셋을 설정한다.
88+
*
89+
* @param <T>
90+
* @param alias
91+
* @param type
92+
* @param dataList
93+
*/
94+
public <T extends MonitoringResult> void setMonitoringTableViewData(String alias, Class<T> type, List<T> dataList) {
95+
tableViewContainerMap.get(findAliasInfoByAlias(alias)).setTableData(type, dataList);
96+
showTableViewContainer(alias);
97+
}
98+
99+
/**
100+
* 특정 Alias의 TableViewContainer를 맨 앞으로 가져오고 라벨을 변경한다.
101+
*
102+
* @param alias
103+
*/
104+
private void showTableViewContainer(String alias) {
105+
setAliasLabel(alias);
106+
tableViewContainerMap.get(findAliasInfoByAlias(alias)).toFront();
107+
}
108+
109+
/**
110+
* Alias Label의 텍스트를 설정한다.
111+
*
112+
* @param alias
113+
*/
114+
private void setAliasLabel(String alias) {
115+
aliasLabel.setText(alias);
116+
}
117+
118+
/**
119+
* Monitoring Time Label의 텍스트를 설정한다.
120+
*
121+
* @param time
122+
*/
123+
public void setMonitoringTimeLabel(Date time) {
124+
monitoringTimeLabel.setText(DateUtils.format(time, "yyyy-MM-dd HH:mm:ss"));
125+
}
126+
127+
private AliasInfo findAliasInfoByAlias(String alias) {
128+
return tableViewContainerMap.keySet()
129+
.stream()
130+
.filter(info -> info.getAlias().equals(alias))
131+
.findFirst()
132+
.orElse(null);
133+
}
134+
135+
private AliasInfo findAliasInfoByIndex(int index) {
136+
return tableViewContainerMap.keySet()
137+
.stream()
138+
.filter(info -> info.getIndex() == index)
139+
.findFirst()
140+
.orElse(null);
141+
}
107142

108-
if (tableViewMap.get(type) == null) {
109-
addMonitoringTableView(type, usageUIType);
143+
private int findAliasInfoIndex(String alias) {
144+
return findAliasInfoByAlias(alias).getIndex();
145+
}
146+
147+
private int findFirstAliasInfoIndex() {
148+
return tableViewContainerMap.keySet()
149+
.stream()
150+
.sorted()
151+
.map(info -> info.getIndex())
152+
.findFirst()
153+
.orElse(-1);
154+
}
155+
156+
private int findLastAliasInfoIndex() {
157+
return tableViewContainerMap.keySet()
158+
.stream()
159+
.sorted(Collections.reverseOrder())
160+
.map(info -> info.getIndex())
161+
.findFirst()
162+
.orElse(-1);
163+
}
164+
165+
private int findPrevAliasInfoIndex(int curIndex) {
166+
return tableViewContainerMap.keySet()
167+
.stream()
168+
.filter(info -> info.getIndex() < curIndex)
169+
.sorted(Collections.reverseOrder())
170+
.map(info -> info.getIndex())
171+
.findFirst()
172+
.orElse(-1);
173+
}
174+
175+
private int findNextAliasInfoIndex(int curIndex) {
176+
return tableViewContainerMap.keySet()
177+
.stream()
178+
.filter(info -> info.getIndex() > curIndex)
179+
.sorted()
180+
.map(info -> info.getIndex())
181+
.findFirst()
182+
.orElse(-1);
183+
}
184+
185+
public void prevContainer(ActionEvent e) {
186+
int curIndex = findAliasInfoIndex(aliasLabel.getText());
187+
int prevIndex = findPrevAliasInfoIndex(curIndex);
188+
if(prevIndex == -1) {
189+
prevIndex = findLastAliasInfoIndex();
110190
}
191+
showTableViewContainer(findAliasInfoByIndex(prevIndex).getAlias());
192+
}
193+
194+
public void nextContainer(ActionEvent e) {
195+
int curIndex = findAliasInfoIndex(aliasLabel.getText());
196+
int nextIndex = findNextAliasInfoIndex(curIndex);
197+
if(nextIndex == -1) {
198+
nextIndex = findFirstAliasInfoIndex();
199+
}
200+
showTableViewContainer(findAliasInfoByIndex(nextIndex).getAlias());
201+
}
202+
203+
@AllArgsConstructor
204+
@Data
205+
private static class AliasInfo implements Comparable<AliasInfo> {
206+
String alias;
207+
int index;
111208

112-
MonitoringTableView<T> tableView = (MonitoringTableView<T>) tableViewMap.get(type);
113-
tableView.setItems(FXCollections.observableArrayList(dataList));
209+
@Override
210+
public int compareTo(AliasInfo o) {
211+
return this.index - o.index;
212+
}
114213
}
115214
}

src/main/java/root/javafx/Controller/RunMenuController.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ public class RunMenuController implements Initializable {
108108
@FXML
109109
HBox step3ToStep4Arrow;
110110

111-
private MonitoringResultTableViewAP dbResults;
112-
private MonitoringResultTableViewAP serverResults;
111+
private MonitoringTableViewPagingBox dbResults;
112+
private MonitoringTableViewPagingBox serverResults;
113113

114114
@Override
115115
public void initialize(URL location, ResourceBundle resources) {
@@ -239,9 +239,18 @@ public void runMonitoring(ActionEvent e) {
239239
List<TableSpaceUsage> tableSpaceUsageList = usecase.getCurrentTableSpaceUsage();
240240
List<ASMDiskUsage> asmDiskUsageList = usecase.getCurrentASMDiskUsage();
241241

242-
dbResults.setTableData(jdbc.getJdbcDBName(), ArchiveUsage.class, archiveUsageList, usageUIType);
243-
dbResults.setTableData(jdbc.getJdbcDBName(), TableSpaceUsage.class, tableSpaceUsageList, usageUIType);
244-
dbResults.setTableData(jdbc.getJdbcDBName(), ASMDiskUsage.class, asmDiskUsageList, usageUIType);
242+
String dbName = jdbc.getJdbcDBName();
243+
dbResults.addMonitoringTableViewContainer(dbName, ArchiveUsage.class);
244+
dbResults.setMonitoringTableViewUsageUIType(dbName, ArchiveUsage.class, usageUIType);
245+
dbResults.setMonitoringTableViewData(dbName, ArchiveUsage.class, archiveUsageList);
246+
247+
dbResults.addMonitoringTableViewContainer(dbName, TableSpaceUsage.class);
248+
dbResults.setMonitoringTableViewUsageUIType(dbName, TableSpaceUsage.class, usageUIType);
249+
dbResults.setMonitoringTableViewData(dbName, TableSpaceUsage.class, tableSpaceUsageList);
250+
251+
dbResults.addMonitoringTableViewContainer(dbName, ASMDiskUsage.class);
252+
dbResults.setMonitoringTableViewUsageUIType(dbName, ASMDiskUsage.class, usageUIType);
253+
dbResults.setMonitoringTableViewData(dbName, ASMDiskUsage.class, asmDiskUsageList);
245254
}
246255

247256
List<JschConnectionInfo> jschConnectionList = propService.getJschConnInfoList(serverNames);
@@ -259,8 +268,11 @@ public void runMonitoring(ActionEvent e) {
259268
}
260269
}
261270

271+
String serverName = jsch.getServerName();
262272
List<OSDiskUsage> osDiskUsageList = usecase.getCurrentOSDiskUsage();
263-
serverResults.setTableData(jsch.getServerName(), OSDiskUsage.class, osDiskUsageList, usageUIType);
273+
serverResults.addMonitoringTableViewContainer(serverName, OSDiskUsage.class);
274+
serverResults.setMonitoringTableViewUsageUIType(serverName, OSDiskUsage.class, usageUIType);
275+
serverResults.setMonitoringTableViewData(serverName, OSDiskUsage.class, osDiskUsageList);
264276

265277
// AlertLogCommandPeriod alcp = new AlertLogCommandPeriod(jsch.getAlc(),
266278
// DateUtils.addDate(DateUtils.getToday("yyyy-MM-dd"), 0, 0, -1), DateUtils.getToday("yyyy-MM-dd"));
@@ -391,12 +403,12 @@ public UsageUIType fromString(String string) {
391403
* 4. 실행결과 영역의 View를 초기화한다.
392404
*/
393405
private void initRunStep4() {
394-
dbResults = new MonitoringResultTableViewAP();
395-
serverResults = new MonitoringResultTableViewAP();
396-
406+
dbResults = new MonitoringTableViewPagingBox("DB");
407+
serverResults = new MonitoringTableViewPagingBox("SERVER");
408+
397409
resultSplitPane.getItems().clear();
398410
resultSplitPane.getItems().addAll(dbResults, serverResults);
399-
411+
400412
step4AP.setVisible(true);
401413
step4AP.setMinWidth(Control.USE_COMPUTED_SIZE);
402414
step4AP.setMaxWidth(Control.USE_COMPUTED_SIZE);

0 commit comments

Comments
 (0)