Skip to content

Commit 04b6fd2

Browse files
committed
Refactoring: Separate UI generation by java code (DB connection info)
1 parent 8cbce4a commit 04b6fd2

File tree

7 files changed

+472
-270
lines changed

7 files changed

+472
-270
lines changed

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

Lines changed: 36 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import java.util.Set;
1414
import java.util.regex.Matcher;
1515
import java.util.regex.Pattern;
16-
import java.util.stream.Collectors;
1716

1817
import org.apache.commons.configuration2.PropertiesConfiguration;
1918
import org.apache.log4j.Logger;
@@ -63,8 +62,8 @@
6362
import root.core.domain.JschConnectionInfo;
6463
import root.core.repository.constracts.PropertyRepository;
6564
import root.core.repository.implement.PropertyRepositoryImpl;
66-
import root.javafx.Service.DatabaseConnectService;
67-
import root.utils.AlertUtils;
65+
import root.javafx.CustomView.ConnectionInfoVBox;
66+
import root.javafx.CustomView.DBConnectionInfoAnchorPane;
6867
import root.utils.PropertiesUtils;
6968

7069
public class SettingMenuController implements Initializable {
@@ -120,6 +119,9 @@ public class SettingMenuController implements Initializable {
120119
@FXML
121120
FlowPane connectInfoFlowPane; // DB접속정보 VBOX, Server접속정보 VOX를 담는 컨테이너
122121

122+
@FXML
123+
VBox connInfoVBox;
124+
123125
@FXML
124126
StackPane dbConnInfoStackPane; // DB접속정보 설정 그리드를 담는 컨테이너
125127

@@ -404,8 +406,8 @@ private void loadSelectedConfigFile(String absoluteFilePath) {
404406
createSettingDynamicElements();
405407

406408
// 4. 첫번째 접속정보를 맨 앞으로 가져온다.
407-
bringFrontConnInfoAnchorPane(dbConnInfoIdxMap, 0, dbInfoCntText);
408-
bringFrontConnInfoAnchorPane(serverConnInfoIdxMap, 0, serverInfoCntText);
409+
//bringFrontConnInfoAnchorPane(dbConnInfoIdxMap, 0, dbInfoCntText);
410+
//bringFrontConnInfoAnchorPane(serverConnInfoIdxMap, 0, serverInfoCntText);
409411

410412
// 5. remember.properties 파일에 최근 사용된 설정파일 경로를 저장한다.
411413
PropertiesConfiguration rememberConfig = propertyRepository.getConfiguration("rememberConfig");
@@ -444,7 +446,7 @@ private void loadMonitoringConfigFile(String filePath) {
444446

445447
propertyRepository.loadMonitoringInfoConfig(filePath);
446448

447-
createMonitoringElements(monitoringElementsVBox, dbMonitorings, dbNames);
449+
// createMonitoringElements(monitoringElementsVBox, dbMonitorings, dbNames);
448450
createMonitoringElements(monitoringElementsVBox, serverMonitorings, serverNames);
449451
}
450452

@@ -1117,36 +1119,40 @@ private void createSettingDynamicElements() {
11171119
boolean createResult = false;
11181120

11191121
try {
1120-
// 기존 요소 초기화
1121-
dbConnInfoIdx = 0;
1122-
serverConnInfoIdx = 0;
1123-
dbConnInfoStackPane.getChildren().removeIf(c -> !c.getId().contains("noPropertiesFileAP2"));
1124-
serverConnInfoStackPane.getChildren().removeIf(c -> !c.getId().contains("noPropertiesFileAP1"));
1125-
dbConnInfoIdxMap.clear();
1126-
serverConnInfoIdxMap.clear();
1127-
1122+
alcMap = PropertiesUtils.getAlertLogCommandMap();
1123+
11281124
dbNames = propertyRepository.getMonitoringDBNames();
1129-
serverNames = propertyRepository.getMonitoringServerNames();
1125+
jdbcConnInfoList = PropertiesUtils.getJdbcConnectionMap();
11301126

1131-
jdbcConnInfoList = PropertiesUtils.getJdbcConnectionMap();
1132-
jschConnInfoList = PropertiesUtils.getJschConnectionMap();
1133-
alcMap = PropertiesUtils.getAlertLogCommandMap();
1127+
ConnectionInfoVBox dbConnVBox = new ConnectionInfoVBox();
1128+
connInfoVBox.getChildren().add(dbConnVBox);
11341129

1135-
// [설정] - [모니터링 여부 설정]
1136-
reloadingMonitoringSetting("");
1130+
for (JdbcConnectionInfo jdbc : jdbcConnInfoList) {
1131+
1132+
DBConnectionInfoAnchorPane dbConnAP = new DBConnectionInfoAnchorPane();
1133+
dbConnAP.getDriverCB().getItems().addAll(propertyRepository.getOracleDrivers());
1134+
dbConnAP.setInitialValue(jdbc);
11371135

1138-
// [설정] - [접속정보 설정] TAB 동적 요소 생성
1139-
if (jdbcConnInfoList.size() == 0) { // DB 접속정보 없음
1140-
dbConnInfoNoDataAP.setVisible(true);
1141-
dbInfoCntText.setText("※프로퍼티파일을 열거나 접속정보를 추가해주세요.");
1142-
} else {
1143-
dbConnInfoNoDataAP.setVisible(true);
1144-
jdbcConnInfoList.forEach(info -> {
1145-
createJdbcConnInfoElements(dbConnInfoStackPane, info, info.getJdbcDBName());
1146-
});
1147-
dbInfoCntText.setText("(" + (dbConnInfoIdx + 1) + "/" + dbConnInfoIdxMap.size() + ")");
1136+
dbConnVBox.addConnectionInfoAP(dbConnAP);
11481137
}
11491138

1139+
// [설정] - [접속정보 설정] TAB 동적 요소 생성
1140+
// if (connInfoList.size() == 0) { // DB 접속정보 없음
1141+
// connInfoNoDataAP.setVisible(true);
1142+
// connInfoCntText.setText("※프로퍼티파일을 열거나 접속정보를 추가해주세요.");
1143+
// } else {
1144+
// connInfoNoDataAP.setVisible(true);
1145+
// connInfoList.forEach(info -> {
1146+
//// createJdbcConnInfoElements(connInfoStackPane, info, "info.getJdbcDBName()");
1147+
// });
1148+
// connInfoCntText.setText("(" + (connInfoIdx + 1) + "/" + connInfoIdxMap.size() + ")");
1149+
// }
1150+
1151+
1152+
1153+
// [설정] - [모니터링 여부 설정]
1154+
reloadingMonitoringSetting("");
1155+
11501156
if (jschConnInfoList.size() == 0) { // 서버 접속정보 없음
11511157
serverConnInfoNoDataAP.setVisible(true);
11521158
serverInfoCntText.setText("※프로퍼티파일을 열거나 접속정보를 추가해주세요.");
@@ -1224,64 +1230,6 @@ private void reloadingMonitoringSetting(String presetName) {
12241230
}
12251231
}
12261232

1227-
/**
1228-
* [설정] - [접속정보설정] - 입력된 설정 값으로 DB 연동 테스트를 시도한다.
1229-
*
1230-
* @param e
1231-
*/
1232-
public void testDbConnection(ActionEvent e) {
1233-
// TODO dbConnInfoAP에 접속정보가 입력되어있는지 확인 (입력값 검사)
1234-
// TODO 입력되어있지 않으면 버튼 비활성화
1235-
1236-
// 아이콘 변경
1237-
FontAwesomeIconView icon = (FontAwesomeIconView) dbConnTestBtn.lookup("#icon");
1238-
icon.setIcon(FontAwesomeIcon.SPINNER);
1239-
icon.setFill(Paint.valueOf("#484989"));
1240-
icon.getStyleClass().add("fa-spin");
1241-
1242-
AnchorPane curAP = dbConnInfoIdxMap.get(dbConnInfoIdx);
1243-
1244-
// Get element Id
1245-
String curAPId = curAP.getId();
1246-
int startIdx = curAPId.indexOf("dbConnInfo") + 10;
1247-
int endIdx = curAPId.lastIndexOf("AP");
1248-
String elementId = curAPId.substring(startIdx, endIdx);
1249-
1250-
// Get TextFields
1251-
Map<String, String> textFieldMap = curAP.lookupAll("TextField").stream()
1252-
.collect(Collectors.toMap(Node::getId, (n) -> ((TextField) n).getText()));
1253-
1254-
String jdbcUrl = textFieldMap.get(elementId + "UrlTextField");
1255-
String jdbcId = textFieldMap.get(elementId + "UserTextField");
1256-
1257-
// Get PasswordField
1258-
Map<String, String> passwordFieldMap = curAP.lookupAll("PasswordField").stream()
1259-
.collect(Collectors.toMap(Node::getId, (n) -> ((PasswordField) n).getText()));
1260-
1261-
String jdbcPw = passwordFieldMap.get(elementId + "PasswordTextField");
1262-
1263-
// TODO JdbcDriver, Validation Query 하드코딩 변경 - DBMS에 따라 다르게 해야 함
1264-
JdbcConnectionInfo jdbc = new JdbcConnectionInfo("oracle.jdbc.driver.OracleDriver", jdbcUrl, jdbcId, jdbcPw,
1265-
"SELECT 1 FROM DUAL", 1);
1266-
1267-
DatabaseConnectService dbConnService = new DatabaseConnectService(jdbc);
1268-
dbConnService.setOnSucceeded(s -> {
1269-
AlertUtils.showAlert(AlertType.INFORMATION, "DB 연동테스트",
1270-
String.format(DatabaseConnectService.SUCCESS_MSG, jdbc.getJdbcUrl(), jdbc.getJdbcDriver()));
1271-
icon.setIcon(FontAwesomeIcon.CHECK);
1272-
icon.setFill(Paint.valueOf("#49a157"));
1273-
});
1274-
1275-
dbConnService.setOnFailed(f -> {
1276-
AlertUtils.showAlert(AlertType.ERROR, "DB 연동테스트",
1277-
String.format(DatabaseConnectService.FAIL_MSG, jdbc.getJdbcUrl(), jdbc.getJdbcDriver()));
1278-
icon.setIcon(FontAwesomeIcon.TIMES);
1279-
icon.setFill(Paint.valueOf("#c40a0a"));
1280-
});
1281-
1282-
dbConnService.start();
1283-
}
1284-
12851233
/**
12861234
* [설정] - [접속정보설정] - 입력된 설정 값으로 Server 연동 테스트를 시도한다.
12871235
*
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
package root.javafx.CustomView;
2+
3+
import java.io.IOException;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
7+
import com.jfoenix.controls.JFXButton;
8+
9+
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
10+
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView;
11+
import javafx.event.ActionEvent;
12+
import javafx.fxml.FXML;
13+
import javafx.fxml.FXMLLoader;
14+
import javafx.scene.Node;
15+
import javafx.scene.control.Alert.AlertType;
16+
import javafx.scene.control.PasswordField;
17+
import javafx.scene.control.TextField;
18+
import javafx.scene.layout.AnchorPane;
19+
import javafx.scene.layout.StackPane;
20+
import javafx.scene.layout.VBox;
21+
import javafx.scene.paint.Paint;
22+
import javafx.scene.text.Text;
23+
import root.core.domain.JdbcConnectionInfo;
24+
import root.core.repository.constracts.PropertyRepository;
25+
import root.core.repository.implement.PropertyRepositoryImpl;
26+
import root.javafx.Service.DatabaseConnectService;
27+
import root.utils.AlertUtils;
28+
29+
public class ConnectionInfoVBox extends VBox {
30+
31+
/* Dependency Injection */
32+
PropertyRepository propertyRepository = PropertyRepositoryImpl.getInstance();
33+
34+
@FXML
35+
StackPane connInfoStackPane; // 접속정보 설정 그리드를 담는 컨테이너
36+
37+
@FXML
38+
AnchorPane connInfoNoDataAP; // 접속정보 No Data AchorPane
39+
40+
@FXML
41+
Text connInfoText; // 접속정보 인덱스 텍스트
42+
43+
@FXML
44+
JFXButton connTestBtn;
45+
46+
private Map<Integer, AnchorPane> connInfoAPMap = new HashMap<>();
47+
48+
private int connInfoIdx = 0;
49+
50+
public ConnectionInfoVBox() {
51+
try {
52+
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/ConnectionInfoVBox.fxml"));
53+
loader.setController(this);
54+
loader.setRoot(this);
55+
loader.load();
56+
57+
} catch (IOException e) {
58+
e.printStackTrace();
59+
}
60+
}
61+
62+
public void addConnectionInfoAP(Node connInfoAP) {
63+
connInfoAPMap.put(connInfoAPMap.size(), (AnchorPane) connInfoAP);
64+
connInfoStackPane.getChildren().add(connInfoAP);
65+
bringFrontConnInfoAnchorPane(connInfoAPMap.size() - 1);
66+
}
67+
68+
public void addConnInfo(ActionEvent e) {
69+
connInfoIdx = connInfoAPMap.size();
70+
71+
// String newConnInfoId = String.valueOf(new Date().getTime());
72+
// JdbcConnectionInfo jdbc = new JdbcConnectionInfo();
73+
// jdbc.setJdbcDBName(newConnInfoId);
74+
75+
DBConnectionInfoAnchorPane dbConnAP = new DBConnectionInfoAnchorPane();
76+
dbConnAP.getDriverCB().getItems().addAll(propertyRepository.getOracleDrivers());
77+
// dbConnAP.setInitialValue(jdbc);
78+
79+
addConnectionInfoAP(dbConnAP);
80+
}
81+
82+
public void bringFrontConnInfoAnchorPane(int connInfoIdx) {
83+
this.connInfoIdx = connInfoIdx;
84+
connInfoAPMap.get(connInfoIdx).toFront();
85+
connInfoText.setText(String.format("(%d/%d)", connInfoIdx + 1, connInfoAPMap.size()));
86+
}
87+
88+
public void prevConnInfo(ActionEvent e) {
89+
if (connInfoAPMap.size() == 0) {
90+
return;
91+
}
92+
93+
connInfoIdx = connInfoIdx == 0 ? connInfoAPMap.size() - 1 : connInfoIdx - 1;
94+
setConnectionBtnIcon(1);
95+
bringFrontConnInfoAnchorPane(connInfoIdx);
96+
}
97+
98+
public void nextConnInfo(ActionEvent e) {
99+
if (connInfoAPMap.size() == 0) {
100+
return;
101+
}
102+
103+
connInfoIdx = connInfoIdx == connInfoAPMap.size() - 1 ? 0 : connInfoIdx + 1;
104+
setConnectionBtnIcon(1);
105+
bringFrontConnInfoAnchorPane(connInfoIdx);
106+
}
107+
108+
private void setConnectionBtnIcon(int type) {
109+
FontAwesomeIconView icon = (FontAwesomeIconView) connTestBtn.lookup("#icon");
110+
switch (type) {
111+
case 1:
112+
icon.setIcon(FontAwesomeIcon.PLUG);
113+
icon.setFill(Paint.valueOf("#000000"));
114+
break;
115+
case 2:
116+
icon.setIcon(FontAwesomeIcon.CHECK);
117+
icon.setFill(Paint.valueOf("#49a157"));
118+
break;
119+
case 3:
120+
icon.setIcon(FontAwesomeIcon.TIMES);
121+
icon.setFill(Paint.valueOf("#c40a0a"));
122+
break;
123+
case 4:
124+
icon.setIcon(FontAwesomeIcon.SPINNER);
125+
icon.setFill(Paint.valueOf("#484989"));
126+
icon.getStyleClass().add("fa-spin");
127+
break;
128+
}
129+
}
130+
131+
public void testConnection(ActionEvent e) {
132+
133+
// 아이콘 변경
134+
setConnectionBtnIcon(4);
135+
136+
AnchorPane curAP = connInfoAPMap.get(connInfoIdx);
137+
138+
String jdbcUrl = ((TextField) curAP.lookup("#urlTF")).getText();
139+
String jdbcId = ((TextField) curAP.lookup("#userTF")).getText();
140+
String jdbcPw = ((PasswordField) curAP.lookup("#passwordPF")).getText();
141+
142+
// TODO JdbcDriver, Validation Query 하드코딩 변경 - DBMS에 따라 다르게 해야 함
143+
JdbcConnectionInfo jdbc = new JdbcConnectionInfo("oracle.jdbc.driver.OracleDriver", jdbcUrl, jdbcId, jdbcPw,
144+
"SELECT 1 FROM DUAL", 1);
145+
146+
DatabaseConnectService dbConnService = new DatabaseConnectService(jdbc);
147+
dbConnService.setOnSucceeded(s -> {
148+
AlertUtils.showAlert(AlertType.INFORMATION, "DB 연동테스트",
149+
String.format(DatabaseConnectService.SUCCESS_MSG, jdbc.getJdbcUrl(), jdbc.getJdbcDriver()));
150+
setConnectionBtnIcon(2);
151+
});
152+
153+
dbConnService.setOnFailed(f -> {
154+
AlertUtils.showAlert(AlertType.ERROR, "DB 연동테스트",
155+
String.format(DatabaseConnectService.FAIL_MSG, jdbc.getJdbcUrl(), jdbc.getJdbcDriver()));
156+
setConnectionBtnIcon(3);
157+
});
158+
159+
dbConnService.start();
160+
}
161+
}

0 commit comments

Comments
 (0)