Skip to content

Commit 4ed4d5c

Browse files
committed
Refactoring: Database settings save
1 parent fd454ca commit 4ed4d5c

File tree

3 files changed

+64
-117
lines changed

3 files changed

+64
-117
lines changed

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

Lines changed: 15 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22

33
import java.io.File;
44
import java.net.URL;
5-
import java.util.ArrayList;
6-
import java.util.Arrays;
75
import java.util.HashMap;
86
import java.util.List;
97
import java.util.Map;
108
import java.util.Optional;
119
import java.util.ResourceBundle;
12-
import java.util.Set;
13-
import java.util.regex.Matcher;
1410
import java.util.regex.Pattern;
1511

1612
import org.apache.commons.configuration2.PropertiesConfiguration;
@@ -33,7 +29,6 @@
3329
import javafx.scene.control.ButtonBar.ButtonData;
3430
import javafx.scene.control.ButtonType;
3531
import javafx.scene.control.Label;
36-
import javafx.scene.control.PasswordField;
3732
import javafx.scene.control.Separator;
3833
import javafx.scene.control.SplitPane;
3934
import javafx.scene.control.TextField;
@@ -63,9 +58,11 @@ public class SettingMenuController implements Initializable {
6358
private static Logger logger = Logger.getLogger(SettingMenuController.class);
6459

6560
/**
66-
* Pattern 객체를 정적필드로 선언한 이유 - Pattern 객체는 입력받은 정규표현식에 해당하는 유한상태머신(finite state
67-
* machine)을 생성하기 때문에 인스턴스 생성비용이 높다. - 따라서, 한 번 생성하두고 이를 재사용하는 것이 효과적이다. - 뿐만
68-
* 아니라, 패턴 객체에 이름을 부여하여 해당 객체의 의미가 명확해진다.
61+
* Pattern 객체를 정적필드로 선언한 이유
62+
* - Pattern 객체는 입력받은 정규표현식에 해당하는 유한상태머신(finite statemachine)을
63+
* 생성하기 때문에 인스턴스 생성비용이 높다.
64+
* - 따라서, 한 번 생성하두고 이를 재사용하는 것이 효과적이다.
65+
* - 뿐만 아니라, 패턴 객체에 이름을 부여하여 해당 객체의 의미가 명확해진다.
6966
*/
7067
private static Pattern DB_CONNINFO_AP_NAME_PATTERN = Pattern.compile("dbConnInfo(.*)AP");
7168
private static Pattern SERVER_CONNINFO_AP_NAME_PATTERN = Pattern.compile("serverConnInfo(.*)AP");
@@ -101,29 +98,17 @@ public class SettingMenuController implements Initializable {
10198
@FXML
10299
JFXComboBox<String> monitoringPresetComboBox; // 모니터링여부 설정 Preset ComboBox
103100

104-
@FXML
105-
JFXButton dbConnTestBtn;
106-
107101
/* Common Data */
108102
String[] dbMonitorings;
109103
String[] serverMonitorings;
110104

111105
String[] dbNames;
112106
String[] serverNames;
113107

114-
// dbConnInfo
115108
List<JdbcConnectionInfo> jdbcConnInfoList;
116109
List<JschConnectionInfo> jschConnInfoList;
117110
Map<String, AlertLogCommand> alcMap;
118111

119-
// dbConnInfo Index 배열
120-
Map<Integer, AnchorPane> dbConnInfoIdxMap = new HashMap<>();
121-
int dbConnInfoIdx = 0;
122-
123-
// serverConnInfo Index 배열
124-
Map<Integer, AnchorPane> serverConnInfoIdxMap = new HashMap<>();
125-
int serverConnInfoIdx = 0;
126-
127112
Map<String, String> monitoringPresetMap = new HashMap<>();
128113

129114
// 모니터링 여부 설정 Preset Popup
@@ -253,10 +238,6 @@ private void loadSelectedConfigFile(String absoluteFilePath) {
253238
// 3. 프로퍼티파일에 작성된 내용에 따라 동적 요소를 생성한다.
254239
createSettingDynamicElements();
255240

256-
// 4. 첫번째 접속정보를 맨 앞으로 가져온다.
257-
// bringFrontConnInfoAnchorPane(dbConnInfoIdxMap, 0, dbInfoCntText);
258-
// bringFrontConnInfoAnchorPane(serverConnInfoIdxMap, 0, serverInfoCntText);
259-
260241
// 5. remember.properties 파일에 최근 사용된 설정파일 경로를 저장한다.
261242
PropertiesConfiguration rememberConfig = propertyRepository.getConfiguration("rememberConfig");
262243
rememberConfig.setProperty("filepath.config.lastuse", filePath.replace("\\", "/"));
@@ -312,97 +293,8 @@ public void saveConnInfoSettings(ActionEvent e) {
312293
String configFilePath = fileChooserText.getText();
313294
PropertiesConfiguration config = PropertiesUtils.connInfoConfig;
314295

315-
/*
316-
* DB 접속정보 StackPane에서 얻어내야 할 데이터
317-
*
318-
* (TextField) {dbName}HostTextField {dbName}.jdbc.host (TextField)
319-
* {dbName}PortTextField {dbName}.jdbc.port (TextField) {dbName}SIDTextField
320-
* {dbName} (TextField) {dbName}UrlTextField {dbName}.jdbc.url (TextField)
321-
* {dbName}AliasTextField {dbName}.jdbc.alias (TextField) {dbName}UserTextField
322-
* {dbName}.jdbc.id (PasswordField) {dbName}PasswordTextField {dbName}.jdbc.pw
323-
* (JFXComboBox) {dbName}DriverComboBox {dbName}.jdbc.driver
324-
*/
325-
326-
List<String> dbNames = new ArrayList<String>(Arrays.asList(propertyRepository.getMonitoringDBNames()));
327-
for (AnchorPane ap : dbConnInfoIdxMap.values()) {
328-
String apId = ap.getId();
329-
330-
Matcher m = DB_CONNINFO_AP_NAME_PATTERN.matcher(apId);
331-
if (m.matches()) {
332-
String elementId = m.group(1);
333-
String newElementId = elementId;
334-
boolean isNewConnInfo = false;
335-
336-
// 새로 추가된 접속정보
337-
if (!dbNames.contains(elementId)) {
338-
Set<Node> textFields = ap.lookupAll("TextField");
339-
for (Node n : textFields) {
340-
if (((TextField) n).getId().equals(elementId + "AliasTextField")) {
341-
isNewConnInfo = true;
342-
newElementId = ((TextField) n).getText();
343-
logger.debug("NEW dbName : " + newElementId);
344-
break;
345-
}
346-
}
347-
}
348-
349-
String elementIdLower = newElementId.toLowerCase();
350-
351-
// dbNames 추가
352-
if (isNewConnInfo) {
353-
dbNames.add(newElementId);
354-
config.setProperty("#DB", newElementId);
355-
config.setProperty(elementIdLower + ".jdbc.validation", "select 1 from dual");
356-
config.setProperty(elementIdLower + ".jdbc.connections", 10);
357-
}
358-
359-
// TextField Value Update
360-
Set<Node> textFields = ap.lookupAll("TextField");
361-
for (Node n : textFields) {
362-
TextField tf = (TextField) n;
363-
String tfId = tf.getId();
364-
String tfText = tf.getText();
365-
366-
if (tfId.equals(elementId + "UserTextField")) {
367-
config.setProperty(elementIdLower + ".jdbc.id", tfText);
368-
} else if (tfId.equals(elementId + "UrlTextField")) {
369-
config.setProperty(elementIdLower + ".jdbc.url", tfText);
370-
} else if (tfId.equals(elementId + "AliasTextField")) {
371-
config.setProperty(elementIdLower + ".jdbc.alias", tfText);
372-
}
373-
}
374-
375-
// PasswordField Value Update
376-
Set<Node> passwordFields = ap.lookupAll("PasswordField");
377-
for (Node n : passwordFields) {
378-
PasswordField pf = (PasswordField) n;
379-
String pfId = pf.getId();
380-
String pfText = pf.getText();
381-
382-
if (pfId.equals(elementId + "PasswordTextField")) {
383-
config.setProperty(elementIdLower + ".jdbc.pw", pfText);
384-
}
385-
}
386-
387-
// JFXComboBox Value Update
388-
Set<Node> comboBoxs = ap.lookupAll("JFXComboBox");
389-
for (Node n : comboBoxs) {
390-
@SuppressWarnings("unchecked")
391-
JFXComboBox<String> cb = (JFXComboBox<String>) n;
392-
String cbId = cb.getId();
393-
String cbSelectedItem = cb.getSelectionModel().getSelectedItem();
394-
395-
if (cbId.equals(elementId + "DriverComboBox")) {
396-
if (cbSelectedItem.equals("thin")) {
397-
// TODO 선택된 Oracle Driver Type에 따라서, Driver 값 변경하기, 현재는 임시로 모두 동일한 값 입력
398-
config.setProperty(elementIdLower + ".jdbc.driver", "oracle.jdbc.driver.OracleDriver");
399-
}
400-
}
401-
}
402-
}
403-
}
404-
// dbNames Update
405-
config.setProperty("dbnames", dbNames);
296+
ConnectionInfoVBox dbConnVBox = (ConnectionInfoVBox) connInfoVBox.lookup("#dbConnVBox");
297+
dbConnVBox.saveConnInfoSettings("configFilePath");
406298

407299
/*
408300
* 서버 접속정보 StackPane에서 얻어내야 할 데이터
@@ -416,8 +308,11 @@ public void saveConnInfoSettings(ActionEvent e) {
416308
* (JFXComboBox) {ServerName}AlertLogDateFormatComboBox
417309
* {ServerName}.server.alertlog.dateformat
418310
*/
311+
312+
/*
419313
List<String> serverNames = new ArrayList<String>(Arrays.asList(config.getStringArray("servernames")));
420-
for (AnchorPane ap : serverConnInfoIdxMap.values()) {
314+
ConnectionInfoVBox serverConnVBox = (ConnectionInfoVBox) connInfoVBox.lookup("#serverConnVBox");
315+
for (AnchorPane ap : serverConnVBox.getConnInfoAPMap().values()) {
421316
String apId = ap.getId();
422317
423318
Matcher m = SERVER_CONNINFO_AP_NAME_PATTERN.matcher(apId);
@@ -503,7 +398,8 @@ public void saveConnInfoSettings(ActionEvent e) {
503398
}
504399
// ServerNames Update
505400
config.setProperty("servernames", serverNames);
506-
401+
*/
402+
507403
// 변경사항 저장
508404
propertyRepository.save(configFilePath, config);
509405
// 설정파일 ReLoading
@@ -678,6 +574,7 @@ private void createSettingDynamicElements() {
678574
// DB 접속정보 UI
679575
ConnectionInfoVBox dbConnVBox = new ConnectionInfoVBox(DBConnectionInfoAnchorPane.class);
680576
dbConnVBox.setMenuTitle("DB 접속정보", FontAwesomeIcon.DATABASE);
577+
dbConnVBox.setId("dbConnVBox");
681578
connInfoVBox.getChildren().add(dbConnVBox);
682579

683580
for (JdbcConnectionInfo jdbc : jdbcConnInfoList) {
@@ -689,6 +586,7 @@ private void createSettingDynamicElements() {
689586
// Server 접속정보 UI
690587
ConnectionInfoVBox serverConnVBox = new ConnectionInfoVBox(ServerConnectionInfoAnchorPane.class);
691588
serverConnVBox.setMenuTitle("서버 접속정보", FontAwesomeIcon.SERVER);
589+
serverConnVBox.setId("serverConnVBox");
692590
connInfoVBox.getChildren().add(serverConnVBox);
693591

694592
for (JschConnectionInfo jsch : jschConnInfoList) {

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import java.util.HashMap;
55
import java.util.Map;
66

7+
import org.apache.commons.configuration2.PropertiesConfiguration;
8+
79
import com.jfoenix.controls.JFXButton;
810

911
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -24,13 +26,19 @@
2426
import lombok.Data;
2527
import lombok.EqualsAndHashCode;
2628
import root.core.domain.JdbcConnectionInfo;
29+
import root.core.repository.constracts.PropertyRepository;
30+
import root.core.repository.implement.PropertyRepositoryImpl;
2731
import root.javafx.Service.DatabaseConnectService;
2832
import root.utils.AlertUtils;
33+
import root.utils.PropertiesUtils;
2934

3035
@EqualsAndHashCode(callSuper = false)
3136
@Data
3237
public class ConnectionInfoVBox extends VBox {
3338

39+
/* Dependency Injection */
40+
private PropertyRepository propertyRepository = PropertyRepositoryImpl.getInstance();
41+
3442
@FXML
3543
Label menuTitleLB;
3644

@@ -171,4 +179,30 @@ public void testConnection(ActionEvent e) {
171179

172180
}
173181
}
182+
183+
public void saveConnInfoSettings(String configFilePath) {
184+
PropertiesConfiguration config = PropertiesUtils.connInfoConfig;
185+
186+
if(childAPClazz == DBConnectionInfoAnchorPane.class) {
187+
188+
}
189+
for (AnchorPane childAP : this.connInfoAPMap.values()) {
190+
DBConnectionInfoAnchorPane dbConnAP = (DBConnectionInfoAnchorPane) childAP;
191+
JdbcConnectionInfo jdbc = dbConnAP.getInputValues();
192+
System.out.println(jdbc);
193+
194+
String dbName = jdbc.getJdbcDBName().toLowerCase();
195+
config.setProperty("#DB", dbName);
196+
config.setProperty(dbName + ".jdbc.alias", jdbc.getJdbcDBName());
197+
config.setProperty(dbName + ".jdbc.id", jdbc.getJdbcId());
198+
config.setProperty(dbName + ".jdbc.pw", jdbc.getJdbcPw());
199+
config.setProperty(dbName + ".jdbc.url", jdbc.getJdbcUrl());
200+
// TODO 선택된 Oracle Driver Type에 따라서, Driver 값 변경하기, 현재는 임시로 모두 동일한 값 입력
201+
config.setProperty(dbName + ".jdbc.driver", "oracle.jdbc.driver.OracleDriver");
202+
config.setProperty(dbName + ".jdbc.validation", jdbc.getJdbcValidation());
203+
config.setProperty(dbName + ".jdbc.connections", jdbc.getJdbcConnections());
204+
}
205+
206+
propertyRepository.save(configFilePath, config);
207+
}
174208
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,21 @@ public void setInitialValue(JdbcConnectionInfo jdbc) {
9797
}
9898
});
9999
}
100+
101+
public JdbcConnectionInfo getInputValues() {
102+
JdbcConnectionInfo jdbc = new JdbcConnectionInfo();
103+
jdbc.setJdbcDBName(this.aliasTF.getText());
104+
jdbc.setJdbcHost(this.hostTF.getText());
105+
jdbc.setJdbcPort(this.portTF.getText());
106+
jdbc.setJdbcDriver(this.driverCB.getSelectionModel().getSelectedItem());
107+
jdbc.setJdbcId(this.userTF.getText());
108+
jdbc.setJdbcPw(this.passwordPF.getText());
109+
jdbc.setJdbcSID(this.sidTF.getText());
110+
jdbc.setJdbcUrl(this.urlTF.getText());
111+
jdbc.setJdbcValidation("SELECT 1 FROM DUAL");
112+
jdbc.setJdbcConnections(10);
113+
return jdbc;
114+
}
100115

101116
/**
102117
* 키 입력 또는 콤보박스 선택을 통해 입력된 Database 접속정보를 이용해 URL을 생성하는 이벤트

0 commit comments

Comments
 (0)