Skip to content

Commit d5987a4

Browse files
committed
Add connInfo input validation (No Blank and Null value)
1 parent 751d1b1 commit d5987a4

File tree

7 files changed

+72
-33
lines changed

7 files changed

+72
-33
lines changed

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

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,9 @@ public class SettingMenuController implements Initializable {
5656
private static Logger logger = Logger.getLogger(SettingMenuController.class);
5757

5858
/**
59-
* Pattern 객체를 정적필드로 선언한 이유
60-
* - Pattern 객체는 입력받은 정규표현식에 해당하는 유한상태머신(finite state machine)을
61-
* 생성하기 때문에 인스턴스 생성비용이 높다.
62-
* - 따라서, 한 번 생성하두고 이를 재사용하는 것이 효과적이다.
63-
* - 뿐만 아니라, 패턴 객체에 이름을 부여하여 해당 객체의 의미가 명확해진다.
59+
* Pattern 객체를 정적필드로 선언한 이유 - Pattern 객체는 입력받은 정규표현식에 해당하는 유한상태머신(finite state
60+
* machine)을 생성하기 때문에 인스턴스 생성비용이 높다. - 따라서, 한 번 생성하두고 이를 재사용하는 것이 효과적이다. - 뿐만
61+
* 아니라, 패턴 객체에 이름을 부여하여 해당 객체의 의미가 명확해진다.
6462
*/
6563

6664
/* Dependency Injection */
@@ -176,9 +174,9 @@ public void showMonitoringPresetPopup(ActionEvent e) {
176174
}
177175

178176
/**
179-
* [설정] - [접속정보 설정] - .properties 파일을 선택하기 위한 FileChooser를 연다.
180-
* 사용자가 선택한 파일의 경로에서 파일을 읽은 후, 올바른 설정파일이라면 해당 경로를 remember.properties에 저장한다.
181-
* 그렇지 않다면, '잘못된파일입니다'라는 경고를 띄우고 접속정보를 직접 설정하는 화면으로 이동시킨다.
177+
* [설정] - [접속정보 설정] - .properties 파일을 선택하기 위한 FileChooser를 연다. 사용자가 선택한 파일의 경로에서
178+
* 파일을 읽은 후, 올바른 설정파일이라면 해당 경로를 remember.properties에 저장한다. 그렇지 않다면, '잘못된파일입니다'라는
179+
* 경고를 띄우고 접속정보를 직접 설정하는 화면으로 이동시킨다.
182180
*
183181
* @param e
184182
*/
@@ -268,10 +266,10 @@ private void loadMonitoringConfigFile(String filePath) {
268266
serverMonitorings = propertyRepository.getServerMonitoringContents();
269267

270268
propertyRepository.loadMonitoringInfoConfig(filePath);
271-
269+
272270
dbNames = propertyRepository.getMonitoringDBNames();
273271
serverNames = propertyRepository.getMonitoringServerNames();
274-
272+
275273
createMonitoringElements(monitoringElementsVBox, dbMonitorings, dbNames);
276274
createMonitoringElements(monitoringElementsVBox, serverMonitorings, serverNames);
277275
}
@@ -289,11 +287,19 @@ public void saveConnInfoSettings(ActionEvent e) {
289287

290288
ConnectionInfoVBox<JdbcConnectionInfo> dbConnVBox = (ConnectionInfoVBox<JdbcConnectionInfo>) connInfoVBox
291289
.lookup("#dbConnVBox");
292-
dbConnVBox.saveConnInfoSettings(configFilePath);
290+
291+
boolean isDBSaveSucceed = dbConnVBox.saveConnInfoSettings(configFilePath);
292+
if (!isDBSaveSucceed) {
293+
return;
294+
}
293295

294296
ConnectionInfoVBox<JschConnectionInfo> serverConnVBox = (ConnectionInfoVBox<JschConnectionInfo>) connInfoVBox
295297
.lookup("#serverConnVBox");
296-
serverConnVBox.saveConnInfoSettings(configFilePath);
298+
299+
boolean isServerSaveSucceed = serverConnVBox.saveConnInfoSettings(configFilePath);
300+
if (!isServerSaveSucceed) {
301+
return;
302+
}
297303

298304
// 설정파일 ReLoading
299305
loadSelectedConfigFile(configFilePath);
@@ -476,11 +482,11 @@ private void createSettingDynamicElements() {
476482
dbConnVBox.setId("dbConnVBox");
477483
connInfoVBox.getChildren().add(dbConnVBox);
478484
}
479-
485+
480486
dbConnVBox.addConnInfoList(jdbcConnInfoList);
481-
487+
482488
ConnectionInfoVBox<JschConnectionInfo> serverConnVBox = null;
483-
if(connInfoVBox.lookup("#serverConnVBox") != null) {
489+
if (connInfoVBox.lookup("#serverConnVBox") != null) {
484490
serverConnVBox = (ConnectionInfoVBox<JschConnectionInfo>) connInfoVBox.lookup("#serverConnVBox");
485491
serverConnVBox.clearConnInfoMap();
486492
} else {
@@ -490,7 +496,7 @@ private void createSettingDynamicElements() {
490496
serverConnVBox.setId("serverConnVBox");
491497
connInfoVBox.getChildren().add(serverConnVBox);
492498
}
493-
499+
494500
serverConnVBox.addConnInfoList(jschConnInfoList);
495501

496502
// [설정] - [모니터링 여부 설정]
@@ -519,7 +525,7 @@ private void reloadingMonitoringSetting(String presetName) {
519525
monitoringPresetComboBox.getItems().addAll(monitoringPresetMap.keySet());
520526
logger.debug("monitoringPresetMap : " + monitoringPresetMap);
521527

522-
// 지정된 Preset이 없다면 최근 사용된 Preset으로 세팅한다.
528+
// 지정된 Preset이 없다면 최근 사용된 Preset으로 세팅한다.
523529
// 만약 최근 사용된 Preset이 없다면 첫번째 Preset으로 세팅한다.
524530
if (presetName.isEmpty()) {
525531
// 최근 사용된 모니터링 설정 읽기
@@ -545,7 +551,7 @@ private void reloadingMonitoringSetting(String presetName) {
545551
loadMonitoringConfigFile(monitoringPresetMap.get(readPresetName));
546552
}
547553
}
548-
554+
549555
private void setVisible(Node node, boolean isVisible) {
550556
node.setVisible(isVisible);
551557
if (isVisible) {
@@ -557,6 +563,7 @@ private void setVisible(Node node, boolean isVisible) {
557563

558564
/**
559565
* [설정] - [접속정보 설정] - 새로운 접속정보 설정파일을 생성한다.
566+
*
560567
* @param e
561568
*/
562569
public void createNewConfigFile(ActionEvent e) {
@@ -586,22 +593,23 @@ public void createNewConfigFile(ActionEvent e) {
586593
AlertUtils.showAlert(AlertType.ERROR, "접속정보 설정파일 생성", "설정파일명을 입력해주세요.");
587594
return;
588595
}
589-
596+
590597
// TODO 입력값 검사 (영어만)
591-
598+
592599
// 1. 접속정보 설정파일 생성 (./config/connectioninfo/{접속정보설정파일명}.properties
593600
String filePath = "./config/connectioninfo/" + input + ".properties";
594601
PropertiesUtils.createNewPropertiesFile(filePath, "ConnectionInfo");
595-
596-
// 2. 모니터링여부 Preset 설정파일 생성 (./config/monitoring/{접속정보설정파일명}/{default}.properties
602+
603+
// 2. 모니터링여부 Preset 설정파일 생성
604+
// (./config/monitoring/{접속정보설정파일명}/{default}.properties
597605
String presetConfigPath = "./config/monitoring/" + input + "/default.properties";
598606
PropertiesUtils.createNewPropertiesFile(presetConfigPath, "Monitoring");
599-
607+
600608
// 3. Set Node Visible
601609
setVisible(noConnInfoConfigAP, false);
602610
setVisible(noMonitoringConfigAP, false);
603-
604-
// 4. 생성된 설정파일 Load
611+
612+
// 4. 생성된 설정파일 Load
605613
loadSelectedConfigFile(filePath);
606614
});
607615
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
public interface ConnInfoControl<T> {
99

10-
void save(String configFilePath, Collection<StatefulAP> statefulAP);
10+
boolean save(String configFilePath, Collection<StatefulAP> statefulAP);
1111

1212
boolean canConnectionTest(ConnectionInfoAP curAP);
1313

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ public void addConnectionInfoAP(int type, Node connInfoAP) {
100100
}
101101
}
102102

103-
public void saveConnInfoSettings(String configFilePath) {
104-
connInfoControl.save(configFilePath, this.connInfoAPMap.getActiveAPs().values());
103+
public boolean saveConnInfoSettings(String configFilePath) {
104+
return connInfoControl.save(configFilePath, this.connInfoAPMap.getActiveAPs().values());
105105
}
106106

107107
public void addConnInfoList(List<T> connInfoList) {

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,43 @@
66

77
import javafx.scene.control.PasswordField;
88
import javafx.scene.control.TextField;
9+
import javafx.scene.control.Alert.AlertType;
910
import root.core.domain.JdbcConnectionInfo;
1011
import root.core.repository.constracts.PropertyRepository;
1112
import root.core.repository.implement.PropertyRepositoryImpl;
1213
import root.javafx.CustomView.ConnectionInfoVBox.StatefulAP;
1314
import root.javafx.Service.ConnectionTestService;
1415
import root.javafx.Service.DatabaseConnectService;
16+
import root.utils.AlertUtils;
1517

1618
public class DBConnInfoControl implements ConnInfoControl<JdbcConnectionInfo> {
1719

1820
/* Dependency Injection */
1921
private PropertyRepository propertyRepository = PropertyRepositoryImpl.getInstance();
2022

2123
@Override
22-
public void save(String configFilePath, Collection<StatefulAP> statefulAP) {
24+
public boolean save(String configFilePath, Collection<StatefulAP> statefulAP) {
2325

2426
Map<String, JdbcConnectionInfo> config = new HashMap<>();
2527

2628
for (StatefulAP childAP : statefulAP) {
2729
DBConnectionInfoAnchorPane dbConnAP = (DBConnectionInfoAnchorPane) childAP.getAp();
30+
if (dbConnAP.isAnyEmptyInput()) {
31+
AlertUtils.showAlert(AlertType.ERROR, "접속정보 설정 저장", "DB 접속정보를 모두 입력해주세요");
32+
return false;
33+
}
2834
JdbcConnectionInfo jdbc = dbConnAP.getInputValues();
2935
config.put(jdbc.getJdbcDBName().toUpperCase(), jdbc);
3036
}
37+
3138
propertyRepository.saveDBConnectionInfo(configFilePath, config);
39+
40+
return true;
3241
}
3342

3443
@Override
3544
public boolean canConnectionTest(ConnectionInfoAP curAP) {
36-
return ((DBConnectionInfoAnchorPane) curAP).isAnyEmptyInput();
45+
return ((DBConnectionInfoAnchorPane) curAP).isAnyEmptyInputForDBConnectionTest();
3746
}
3847

3948
@Override

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,16 @@ public JdbcConnectionInfo getInputValues() {
119119
return jdbc;
120120
}
121121

122-
public boolean isAnyEmptyInput() {
122+
public boolean isAnyEmptyInputForDBConnectionTest() {
123123
return StringUtils.isAnyEmpty(hostTF.getText(), portTF.getText(), sidTF.getText(), userTF.getText(),
124124
passwordPF.getText(), driverCB.getSelectionModel().getSelectedItem());
125125
}
126126

127+
public boolean isAnyEmptyInput() {
128+
return StringUtils.isAnyEmpty(hostTF.getText(), portTF.getText(), sidTF.getText(), userTF.getText(),
129+
passwordPF.getText(), aliasTF.getText(), driverCB.getSelectionModel().getSelectedItem());
130+
}
131+
127132
private String generateURL(String dbms) {
128133
StringBuffer url = new StringBuffer();
129134
url.append("jdbc:").append(dbms).append(":")
@@ -153,7 +158,7 @@ private void setDBConnTestBtnDisable(Node node) {
153158
}
154159

155160
// DB Connection test button lookup and setDisable
156-
topParent.lookup("#connTestBtn").setDisable(isAnyEmptyInput());
161+
topParent.lookup("#connTestBtn").setDisable(isAnyEmptyInputForDBConnectionTest());
157162
} catch (Exception e) {
158163
e.printStackTrace();
159164
}

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,36 @@
44
import java.util.HashMap;
55
import java.util.Map;
66

7+
import javafx.scene.control.Alert.AlertType;
78
import root.core.domain.JschConnectionInfo;
89
import root.core.repository.constracts.PropertyRepository;
910
import root.core.repository.implement.PropertyRepositoryImpl;
1011
import root.javafx.CustomView.ConnectionInfoVBox.StatefulAP;
1112
import root.javafx.Service.ConnectionTestService;
13+
import root.utils.AlertUtils;
1214

1315
public class ServerConnInfoControl implements ConnInfoControl<JschConnectionInfo> {
1416

1517
/* Dependency Injection */
1618
private PropertyRepository propertyRepository = PropertyRepositoryImpl.getInstance();
1719

1820
@Override
19-
public void save(String configFilePath, Collection<StatefulAP> statefulAP) {
21+
public boolean save(String configFilePath, Collection<StatefulAP> statefulAP) {
2022
Map<String, JschConnectionInfo> config = new HashMap<>();
2123

2224
for (StatefulAP childAP : statefulAP) {
2325
ServerConnectionInfoAnchorPane serverConnAP = (ServerConnectionInfoAnchorPane) childAP.getAp();
26+
if (serverConnAP.isAnyEmptyInput()) {
27+
AlertUtils.showAlert(AlertType.ERROR, "접속정보 설정 저장", "Server 접속정보를 모두 입력해주세요");
28+
return false;
29+
}
2430
JschConnectionInfo jsch = serverConnAP.getInputValues();
2531
config.put(jsch.getServerName().toUpperCase(), jsch);
2632
}
33+
2734
propertyRepository.saveServerConnectionInfo(configFilePath, config);
35+
36+
return true;
2837
}
2938

3039
@Override

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.io.IOException;
44

5+
import org.apache.commons.lang3.StringUtils;
6+
57
import com.jfoenix.controls.JFXComboBox;
68

79
import javafx.fxml.FXML;
@@ -82,4 +84,10 @@ public JschConnectionInfo getInputValues() {
8284
jsch.setAlc(alc);
8385
return jsch;
8486
}
87+
88+
public boolean isAnyEmptyInput() {
89+
return StringUtils.isAnyEmpty(hostTF.getText(), portTF.getText(), userTF.getText(), serverNameTF.getText(),
90+
passwordPF.getText(), alertLogFilePathTF.getText(),
91+
alertLogDateFormatCB.getSelectionModel().getSelectedItem());
92+
}
8593
}

0 commit comments

Comments
 (0)