Skip to content

Commit 5b751d6

Browse files
committed
Refactoring: Separate UI generation by java code (Server connection info)
1 parent 04b6fd2 commit 5b751d6

File tree

9 files changed

+225
-248
lines changed

9 files changed

+225
-248
lines changed

src/main/java/root/core/domain/JschConnectionInfo.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class JschConnectionInfo {
1212
private String userName;
1313
private String password;
1414
private AlertLogCommand alc;
15-
15+
1616
public JschConnectionInfo(String serverName, String host, int port, String userName, String password) {
1717
this.serverName = serverName;
1818
this.host = host;
@@ -21,4 +21,14 @@ public JschConnectionInfo(String serverName, String host, int port, String userN
2121
this.password = password;
2222
this.alc = new AlertLogCommand();
2323
}
24+
25+
public JschConnectionInfo(String serverName, String host, int port, String userName, String password,
26+
AlertLogCommand alc) {
27+
this.serverName = serverName;
28+
this.host = host;
29+
this.port = port;
30+
this.userName = userName;
31+
this.password = password;
32+
this.alc = alc;
33+
}
2434
}

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

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import root.core.repository.implement.PropertyRepositoryImpl;
6565
import root.javafx.CustomView.ConnectionInfoVBox;
6666
import root.javafx.CustomView.DBConnectionInfoAnchorPane;
67+
import root.javafx.CustomView.ServerConnectionInfoAnchorPane;
6768
import root.utils.PropertiesUtils;
6869

6970
public class SettingMenuController implements Initializable {
@@ -116,9 +117,6 @@ public class SettingMenuController implements Initializable {
116117
@FXML
117118
AnchorPane connectInfoAnchorPane;
118119

119-
@FXML
120-
FlowPane connectInfoFlowPane; // DB접속정보 VBOX, Server접속정보 VOX를 담는 컨테이너
121-
122120
@FXML
123121
VBox connInfoVBox;
124122

@@ -1119,37 +1117,33 @@ private void createSettingDynamicElements() {
11191117
boolean createResult = false;
11201118

11211119
try {
1122-
alcMap = PropertiesUtils.getAlertLogCommandMap();
11231120

1124-
dbNames = propertyRepository.getMonitoringDBNames();
11251121
jdbcConnInfoList = PropertiesUtils.getJdbcConnectionMap();
1122+
jschConnInfoList = PropertiesUtils.getJschConnectionMap();
1123+
alcMap = PropertiesUtils.getAlertLogCommandMap();
11261124

1127-
ConnectionInfoVBox dbConnVBox = new ConnectionInfoVBox();
1125+
// DB 접속정보 UI
1126+
ConnectionInfoVBox dbConnVBox = new ConnectionInfoVBox(DBConnectionInfoAnchorPane.class);
1127+
dbConnVBox.setMenuTitle("DB 접속정보", FontAwesomeIcon.DATABASE);
11281128
connInfoVBox.getChildren().add(dbConnVBox);
11291129

11301130
for (JdbcConnectionInfo jdbc : jdbcConnInfoList) {
1131-
11321131
DBConnectionInfoAnchorPane dbConnAP = new DBConnectionInfoAnchorPane();
1133-
dbConnAP.getDriverCB().getItems().addAll(propertyRepository.getOracleDrivers());
11341132
dbConnAP.setInitialValue(jdbc);
1135-
11361133
dbConnVBox.addConnectionInfoAP(dbConnAP);
11371134
}
11381135

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-
1136+
// Server 접속정보 UI
1137+
ConnectionInfoVBox serverConnVBox = new ConnectionInfoVBox(ServerConnectionInfoAnchorPane.class);
1138+
serverConnVBox.setMenuTitle("서버 접속정보", FontAwesomeIcon.SERVER);
1139+
connInfoVBox.getChildren().add(serverConnVBox);
11521140

1141+
for (JschConnectionInfo jsch : jschConnInfoList) {
1142+
ServerConnectionInfoAnchorPane serverConnAP = new ServerConnectionInfoAnchorPane();
1143+
serverConnAP.setInitialValue(jsch);
1144+
serverConnVBox.addConnectionInfoAP(serverConnAP);
1145+
}
1146+
11531147
// [설정] - [모니터링 여부 설정]
11541148
reloadingMonitoringSetting("");
11551149

src/main/java/root/javafx/CustomView/ConnectionInfoVBox.java

Lines changed: 56 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,30 @@
1313
import javafx.fxml.FXMLLoader;
1414
import javafx.scene.Node;
1515
import javafx.scene.control.Alert.AlertType;
16+
import javafx.scene.control.Label;
1617
import javafx.scene.control.PasswordField;
1718
import javafx.scene.control.TextField;
1819
import javafx.scene.layout.AnchorPane;
1920
import javafx.scene.layout.StackPane;
2021
import javafx.scene.layout.VBox;
2122
import javafx.scene.paint.Paint;
2223
import javafx.scene.text.Text;
24+
import lombok.Data;
25+
import lombok.EqualsAndHashCode;
2326
import root.core.domain.JdbcConnectionInfo;
24-
import root.core.repository.constracts.PropertyRepository;
25-
import root.core.repository.implement.PropertyRepositoryImpl;
2627
import root.javafx.Service.DatabaseConnectService;
2728
import root.utils.AlertUtils;
2829

30+
@EqualsAndHashCode(callSuper = false)
31+
@Data
2932
public class ConnectionInfoVBox extends VBox {
3033

31-
/* Dependency Injection */
32-
PropertyRepository propertyRepository = PropertyRepositoryImpl.getInstance();
33-
34+
@FXML
35+
Label menuTitleLB;
36+
37+
@FXML
38+
FontAwesomeIconView menuIconIV;
39+
3440
@FXML
3541
StackPane connInfoStackPane; // 접속정보 설정 그리드를 담는 컨테이너
3642

@@ -43,11 +49,14 @@ public class ConnectionInfoVBox extends VBox {
4349
@FXML
4450
JFXButton connTestBtn;
4551

52+
private Class<? extends AnchorPane> childAPClazz;
53+
4654
private Map<Integer, AnchorPane> connInfoAPMap = new HashMap<>();
4755

4856
private int connInfoIdx = 0;
4957

50-
public ConnectionInfoVBox() {
58+
public ConnectionInfoVBox(Class<? extends AnchorPane> childAPClazz) {
59+
this.childAPClazz = childAPClazz;
5160
try {
5261
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/ConnectionInfoVBox.fxml"));
5362
loader.setController(this);
@@ -59,6 +68,11 @@ public ConnectionInfoVBox() {
5968
}
6069
}
6170

71+
public void setMenuTitle(String menuTitle, FontAwesomeIcon menuIcon) {
72+
menuTitleLB.setText(menuTitle);
73+
menuIconIV.setIcon(menuIcon);
74+
}
75+
6276
public void addConnectionInfoAP(Node connInfoAP) {
6377
connInfoAPMap.put(connInfoAPMap.size(), (AnchorPane) connInfoAP);
6478
connInfoStackPane.getChildren().add(connInfoAP);
@@ -67,16 +81,12 @@ public void addConnectionInfoAP(Node connInfoAP) {
6781

6882
public void addConnInfo(ActionEvent e) {
6983
connInfoIdx = connInfoAPMap.size();
70-
71-
// String newConnInfoId = String.valueOf(new Date().getTime());
72-
// JdbcConnectionInfo jdbc = new JdbcConnectionInfo();
73-
// jdbc.setJdbcDBName(newConnInfoId);
7484

75-
DBConnectionInfoAnchorPane dbConnAP = new DBConnectionInfoAnchorPane();
76-
dbConnAP.getDriverCB().getItems().addAll(propertyRepository.getOracleDrivers());
77-
// dbConnAP.setInitialValue(jdbc);
78-
79-
addConnectionInfoAP(dbConnAP);
85+
if (childAPClazz == DBConnectionInfoAnchorPane.class) {
86+
addConnectionInfoAP(new DBConnectionInfoAnchorPane());
87+
} else if (childAPClazz == ServerConnectionInfoAnchorPane.class) {
88+
addConnectionInfoAP(new ServerConnectionInfoAnchorPane());
89+
}
8090
}
8191

8292
public void bringFrontConnInfoAnchorPane(int connInfoIdx) {
@@ -129,33 +139,36 @@ private void setConnectionBtnIcon(int type) {
129139
}
130140

131141
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();
142+
if (childAPClazz == DBConnectionInfoAnchorPane.class) {
143+
// 아이콘 변경
144+
setConnectionBtnIcon(4);
145+
146+
AnchorPane curAP = connInfoAPMap.get(connInfoIdx);
147+
148+
String jdbcUrl = ((TextField) curAP.lookup("#urlTF")).getText();
149+
String jdbcId = ((TextField) curAP.lookup("#userTF")).getText();
150+
String jdbcPw = ((PasswordField) curAP.lookup("#passwordPF")).getText();
151+
152+
// TODO JdbcDriver, Validation Query 하드코딩 변경 - DBMS에 따라 다르게 해야 함
153+
JdbcConnectionInfo jdbc = new JdbcConnectionInfo("oracle.jdbc.driver.OracleDriver", jdbcUrl, jdbcId, jdbcPw,
154+
"SELECT 1 FROM DUAL", 1);
155+
156+
DatabaseConnectService dbConnService = new DatabaseConnectService(jdbc);
157+
dbConnService.setOnSucceeded(s -> {
158+
AlertUtils.showAlert(AlertType.INFORMATION, "DB 연동테스트",
159+
String.format(DatabaseConnectService.SUCCESS_MSG, jdbc.getJdbcUrl(), jdbc.getJdbcDriver()));
160+
setConnectionBtnIcon(2);
161+
});
162+
163+
dbConnService.setOnFailed(f -> {
164+
AlertUtils.showAlert(AlertType.ERROR, "DB 연동테스트",
165+
String.format(DatabaseConnectService.FAIL_MSG, jdbc.getJdbcUrl(), jdbc.getJdbcDriver()));
166+
setConnectionBtnIcon(3);
167+
});
168+
169+
dbConnService.start();
170+
} else if (childAPClazz == ServerConnectionInfoAnchorPane.class) {
171+
172+
}
160173
}
161174
}

src/main/java/root/javafx/CustomView/DBConnectionInfoAnchorPane.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,16 @@
1212
import lombok.Data;
1313
import lombok.EqualsAndHashCode;
1414
import root.core.domain.JdbcConnectionInfo;
15+
import root.core.repository.constracts.PropertyRepository;
16+
import root.core.repository.implement.PropertyRepositoryImpl;
1517

1618
@EqualsAndHashCode(callSuper = false)
1719
@Data
1820
public class DBConnectionInfoAnchorPane extends AnchorPane {
1921

22+
/* Dependency Injection */
23+
private PropertyRepository propertyRepository = PropertyRepositoryImpl.getInstance();
24+
2025
@FXML
2126
TextField hostTF;
2227

@@ -54,6 +59,8 @@ public DBConnectionInfoAnchorPane() {
5459
}
5560

5661
public void setInitialValue(JdbcConnectionInfo jdbc) {
62+
driverCB.getItems().addAll(propertyRepository.getOracleDrivers());
63+
5764
hostTF.setText(jdbc.getJdbcHost());
5865
sidTF.setText(jdbc.getJdbcSID());
5966
userTF.setText(jdbc.getJdbcId());
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package root.javafx.CustomView;
2+
3+
import java.io.IOException;
4+
5+
import com.jfoenix.controls.JFXComboBox;
6+
7+
import javafx.fxml.FXML;
8+
import javafx.fxml.FXMLLoader;
9+
import javafx.scene.control.PasswordField;
10+
import javafx.scene.control.TextField;
11+
import javafx.scene.layout.AnchorPane;
12+
import lombok.Data;
13+
import lombok.EqualsAndHashCode;
14+
import root.core.domain.JschConnectionInfo;
15+
import root.core.repository.constracts.PropertyRepository;
16+
import root.core.repository.implement.PropertyRepositoryImpl;
17+
18+
@EqualsAndHashCode(callSuper = false)
19+
@Data
20+
public class ServerConnectionInfoAnchorPane extends AnchorPane {
21+
22+
/* Dependency Injection */
23+
private PropertyRepository propertyRepository = PropertyRepositoryImpl.getInstance();
24+
25+
@FXML
26+
TextField serverNameTF;
27+
28+
@FXML
29+
TextField hostTF;
30+
31+
@FXML
32+
TextField portTF;
33+
34+
@FXML
35+
TextField userTF;
36+
37+
@FXML
38+
PasswordField passwordPF;
39+
40+
@FXML
41+
TextField alertLogFilePathTF;
42+
43+
@FXML
44+
JFXComboBox<String> alertLogDateFormatCB;
45+
46+
public ServerConnectionInfoAnchorPane() {
47+
try {
48+
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/ServerConnectionInfoAnchorPane.fxml"));
49+
loader.setController(this);
50+
loader.setRoot(this);
51+
loader.load();
52+
53+
} catch (IOException e) {
54+
e.printStackTrace();
55+
}
56+
}
57+
58+
// "※프로퍼티파일을 열거나 접속정보를 추가해주세요."
59+
public void setInitialValue(JschConnectionInfo jsch) {
60+
alertLogDateFormatCB.getItems()
61+
.addAll(propertyRepository.getCommonResources("server.setting.dateformat.combo"));
62+
63+
serverNameTF.setText(jsch.getServerName());
64+
hostTF.setText(jsch.getHost());
65+
portTF.setText(String.valueOf(jsch.getPort()));
66+
userTF.setText(jsch.getUserName());
67+
passwordPF.setText(jsch.getPassword());
68+
alertLogFilePathTF.setText(jsch.getAlc().getReadFilePath());
69+
alertLogDateFormatCB.getSelectionModel().select(jsch.getAlc().getDateFormat());
70+
}
71+
}

src/main/java/root/utils/PropertiesUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ public static JschConnectionInfo getJschConnectionInfo(String serverName) {
133133
int serverPort = connInfoConfig.getInt(serverName + ".server.port");
134134
String serverUserName = connInfoConfig.getString(serverName + ".server.username");
135135
String serverPassword = connInfoConfig.getString(serverName + ".server.password");
136-
return new JschConnectionInfo(serverName.toUpperCase(), serverHost, serverPort, serverUserName, serverPassword);
136+
AlertLogCommand alc = getAlertLogCommand(serverName);
137+
return new JschConnectionInfo(serverName.toUpperCase(), serverHost, serverPort, serverUserName, serverPassword, alc);
137138
}
138139

139140
/**

src/main/resources/fxml/ConnectionInfoVBox.fxml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<children>
2323
<AnchorPane>
2424
<children>
25-
<Label graphicTextGap="10.0" maxHeight="50.0" minHeight="50.0" text="DB 접속정보" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.topAnchor="0.0">
25+
<Label fx:id="menuTitleLB" graphicTextGap="10.0" maxHeight="50.0" minHeight="50.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.topAnchor="0.0">
2626
<padding>
2727
<Insets bottom="5.0" left="20.0" right="20.0" top="5.0" />
2828
</padding>
@@ -32,7 +32,7 @@
3232
<String fx:value="font-black" />
3333
</styleClass>
3434
<graphic>
35-
<FontAwesomeIconView fill="#0132ac" glyphName="DATABASE" selectionFill="BLACK" size="20" />
35+
<FontAwesomeIconView fx:id="menuIconIV" fill="#0132ac" glyphName="" selectionFill="BLACK" size="20" />
3636
</graphic>
3737
</Label>
3838
<ToolBar style="-fx-background-color: #ffffff00;" AnchorPane.bottomAnchor="0.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="0.0">

0 commit comments

Comments
 (0)