Skip to content

Commit 41a45e3

Browse files
authored
Merge pull request #132 from Dokyeongyun/ft-220119-connInfoCRUD
Save modified connectionInfo in property file
2 parents 7754b0d + 7442f2e commit 41a45e3

File tree

5 files changed

+166
-61
lines changed

5 files changed

+166
-61
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ public JdbcConnectionInfo(String jdbcDriver, String jdbcUrl, String jdbcId, Stri
3030
this.jdbcPw = jdbcPw;
3131
this.jdbcValidation = jdbcValidation;
3232
this.jdbcConnections = jdbcConnections;
33+
34+
// TODO 선택된 Oracle Driver Type에 따라서, Driver 값 변경하기, 현재는 임시로 모두 동일한 값 입력
35+
this.jdbcOracleDriver = "oracle.jdbc.driver.OracleDriver";
3336
}
3437

3538
public JdbcConnectionInfo(String jdbcDBName, String jdbcDriver, String jdbcUrl, String jdbcId, String jdbcPw,

src/main/java/root/core/repository/constracts/PropertyRepository.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@
55

66
import org.apache.commons.configuration2.PropertiesConfiguration;
77

8+
import root.core.domain.JdbcConnectionInfo;
9+
import root.core.domain.JschConnectionInfo;
10+
811
public interface PropertyRepository {
912

1013
PropertiesConfiguration getConfiguration(String config);
1114

1215
void save(String filePath, PropertiesConfiguration config);
13-
16+
17+
void saveDBConnectionInfo(String filePath, Map<String, JdbcConnectionInfo> config);
18+
19+
void saveServerConnectionInfo(String filePath, Map<String, JschConnectionInfo> config);
20+
1421
boolean loadConnectionInfoConfig(String filePath);
1522

1623
boolean loadMonitoringInfoConfig(String filePath);

src/main/java/root/core/repository/implement/PropertyRepositoryImpl.java

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
package root.core.repository.implement;
22

33
import java.io.File;
4+
import java.io.FileWriter;
45
import java.util.ArrayList;
56
import java.util.LinkedHashMap;
67
import java.util.List;
78
import java.util.Map;
9+
import java.util.regex.Matcher;
10+
import java.util.regex.Pattern;
811

912
import org.apache.commons.configuration2.Configuration;
1013
import org.apache.commons.configuration2.PropertiesConfiguration;
14+
import org.apache.commons.configuration2.PropertiesConfiguration.PropertiesWriter;
15+
import org.apache.commons.configuration2.PropertiesConfigurationLayout;
1116

17+
import lombok.extern.slf4j.Slf4j;
18+
import root.core.domain.JdbcConnectionInfo;
19+
import root.core.domain.JschConnectionInfo;
1220
import root.core.repository.constracts.PropertyRepository;
1321
import root.utils.PropertiesUtils;
1422

23+
@Slf4j
1524
public class PropertyRepositoryImpl implements PropertyRepository {
1625

1726
// Private 필드로 선언 후 Singletone으로 관리
@@ -25,6 +34,9 @@ public static PropertyRepository getInstance() {
2534
return propertyService;
2635
}
2736

37+
private static Pattern dbPropPattern = Pattern.compile("(.*).jdbc.(.*)");
38+
private static Pattern serverPropPattern = Pattern.compile("(.*).server.(.*)");
39+
2840
/****************************************************************************/
2941

3042
/**
@@ -45,6 +57,136 @@ public void save(String filePath, PropertiesConfiguration config) {
4557
PropertiesUtils.save(filePath, config);
4658
}
4759

60+
@Override
61+
public void saveDBConnectionInfo(String filePath, Map<String, JdbcConnectionInfo> dbConfig) {
62+
PropertiesConfiguration config = PropertiesUtils.connInfoConfig;
63+
64+
// TODO dbnames property..
65+
String dbNames = "";
66+
for(String dbName : dbConfig.keySet()) {
67+
dbNames += dbName + ",";
68+
69+
JdbcConnectionInfo jdbc = dbConfig.get(dbName);
70+
config.setProperty(dbName + ".jdbc.alias", jdbc.getJdbcDBName());
71+
config.setProperty(dbName + ".jdbc.id", jdbc.getJdbcId());
72+
config.setProperty(dbName + ".jdbc.pw", jdbc.getJdbcPw());
73+
config.setProperty(dbName + ".jdbc.url", jdbc.getJdbcUrl());
74+
config.setProperty(dbName + ".jdbc.driver", jdbc.getJdbcOracleDriver());
75+
config.setProperty(dbName + ".jdbc.validation", jdbc.getJdbcValidation());
76+
config.setProperty(dbName + ".jdbc.connections", jdbc.getJdbcConnections());
77+
}
78+
79+
config.setProperty("dbnames", dbNames.substring(0, dbNames.length()-1));
80+
81+
PropertiesConfigurationLayout layout = config.getLayout();
82+
try {
83+
PropertiesWriter writer = config.getIOFactory()
84+
.createPropertiesWriter(new FileWriter(filePath, false), config.getListDelimiterHandler());
85+
86+
// Write Header Comment
87+
writer.writeln(layout.getHeaderComment());
88+
89+
for (final String key : layout.getKeys()) {
90+
Matcher m = dbPropPattern.matcher(key);
91+
if (m.matches()) {
92+
String dbName = m.group(1);
93+
if(!dbConfig.containsKey(dbName)) {
94+
continue;
95+
}
96+
}
97+
98+
// Output blank lines before property
99+
for (int i = 0; i < layout.getBlancLinesBefore(key); i++) {
100+
writer.writeln(null);
101+
}
102+
103+
// Output the property and its value
104+
boolean singleLine = layout.isForceSingleLine() || layout.isSingleLine(key);
105+
writer.setCurrentSeparator(layout.getSeparator(key));
106+
writer.writeProperty(key, config.getProperty(key), singleLine);
107+
}
108+
109+
writer.writeln(layout.getCanonicalFooterCooment(true));
110+
writer.flush();
111+
112+
log.info("[" + filePath + "] 파일 저장이 성공적으로 완료되었습니다.");
113+
} catch (Exception e) {
114+
e.printStackTrace();
115+
log.error("[" + filePath + "] 파일 저장에 실패했습니다.");
116+
}
117+
}
118+
119+
@Override
120+
public void saveServerConnectionInfo(String filePath, Map<String, JschConnectionInfo> serverConfig) {
121+
PropertiesConfiguration config = PropertiesUtils.connInfoConfig;
122+
123+
// TODO servernames property..
124+
String serverNames = "";
125+
for(String serverName : serverConfig.keySet()) {
126+
serverNames += serverName + ",";
127+
128+
JschConnectionInfo jsch = serverConfig.get(serverName);
129+
config.setProperty(serverName + ".server.servername", jsch.getServerName());
130+
config.setProperty(serverName + ".server.host", jsch.getHost());
131+
config.setProperty(serverName + ".server.port", jsch.getPort());
132+
config.setProperty(serverName + ".server.username", jsch.getUserName());
133+
config.setProperty(serverName + ".server.password", jsch.getPassword());
134+
135+
String dateFormat = jsch.getAlc().getDateFormat();
136+
String dateFormatRegex = "";
137+
138+
if (dateFormat.equals("EEE MMM dd HH:mm:ss yyyy")) {
139+
dateFormatRegex = "...\\s...\\s([0-2][0-9]|1[012])\\s\\d\\d:\\d\\d:\\d\\d\\s\\d{4}";
140+
} else if (dateFormat.equals("yyyy-MM-dd")) {
141+
dateFormatRegex = "\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T";
142+
}
143+
144+
config.setProperty(serverName + ".server.alertlog.dateformat", dateFormat);
145+
config.setProperty(serverName + ".server.alertlog.dateformatregex", dateFormatRegex);
146+
config.setProperty(serverName + ".server.alertlog.filepath", jsch.getAlc().getReadFilePath());
147+
config.setProperty(serverName + ".server.alertlog.readLine", 500);
148+
}
149+
150+
config.setProperty("servernames", serverNames.substring(0, serverNames.length()-1));
151+
152+
PropertiesConfigurationLayout layout = config.getLayout();
153+
try {
154+
PropertiesWriter writer = config.getIOFactory()
155+
.createPropertiesWriter(new FileWriter(filePath, false), config.getListDelimiterHandler());
156+
157+
// Write Header Comment
158+
writer.writeln(layout.getHeaderComment());
159+
160+
for (final String key : layout.getKeys()) {
161+
Matcher m = serverPropPattern.matcher(key);
162+
if (m.matches()) {
163+
String serverName = m.group(1);
164+
if(!serverConfig.containsKey(serverName)) {
165+
continue;
166+
}
167+
}
168+
169+
// Output blank lines before property
170+
for (int i = 0; i < layout.getBlancLinesBefore(key); i++) {
171+
writer.writeln(null);
172+
}
173+
174+
// Output the property and its value
175+
boolean singleLine = layout.isForceSingleLine() || layout.isSingleLine(key);
176+
writer.setCurrentSeparator(layout.getSeparator(key));
177+
writer.writeProperty(key, config.getProperty(key), singleLine);
178+
}
179+
180+
writer.writeln(layout.getCanonicalFooterCooment(true));
181+
writer.flush();
182+
183+
log.info("[" + filePath + "] 파일 저장이 성공적으로 완료되었습니다.");
184+
} catch (Exception e) {
185+
e.printStackTrace();
186+
log.error("[" + filePath + "] 파일 저장에 실패했습니다.");
187+
}
188+
}
189+
48190
/**
49191
* 접속정보 프로퍼티 파일을 Load한다.
50192
*/

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

Lines changed: 9 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package root.javafx.CustomView;
22

33
import java.io.IOException;
4-
import java.util.ArrayList;
54
import java.util.Collections;
6-
import java.util.List;
5+
import java.util.HashMap;
76
import java.util.Map;
87
import java.util.stream.Collectors;
98

10-
import org.apache.commons.configuration2.PropertiesConfiguration;
11-
129
import com.jfoenix.controls.JFXButton;
1310

1411
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
@@ -36,7 +33,6 @@
3633
import root.core.repository.implement.PropertyRepositoryImpl;
3734
import root.javafx.Service.DatabaseConnectService;
3835
import root.utils.AlertUtils;
39-
import root.utils.PropertiesUtils;
4036

4137
public class ConnectionInfoVBox extends VBox {
4238

@@ -112,68 +108,27 @@ public void addConnectionInfoAP(int type, Node connInfoAP) {
112108
}
113109
}
114110

111+
// TODO 다형성을 이용해 클래스 타입체크 제거하기
115112
public void saveConnInfoSettings(String configFilePath) {
116-
117-
PropertiesConfiguration config = PropertiesUtils.connInfoConfig;
118-
119113
if (childAPClazz == DBConnectionInfoAnchorPane.class) {
114+
Map<String, JdbcConnectionInfo> config = new HashMap<>();
120115

121-
List<String> dbNames = new ArrayList<>();
122116
for (StatefulAP childAP : this.connInfoAPMap.getActiveAPs().values()) {
123117
DBConnectionInfoAnchorPane dbConnAP = (DBConnectionInfoAnchorPane) childAP.getAp();
124118
JdbcConnectionInfo jdbc = dbConnAP.getInputValues();
125-
126-
String dbName = jdbc.getJdbcDBName().toLowerCase();
127-
config.setProperty("#DB", dbName);
128-
config.setProperty(dbName + ".jdbc.alias", jdbc.getJdbcDBName());
129-
config.setProperty(dbName + ".jdbc.id", jdbc.getJdbcId());
130-
config.setProperty(dbName + ".jdbc.pw", jdbc.getJdbcPw());
131-
config.setProperty(dbName + ".jdbc.url", jdbc.getJdbcUrl());
132-
// TODO 선택된 Oracle Driver Type에 따라서, Driver 값 변경하기, 현재는 임시로 모두 동일한 값 입력
133-
config.setProperty(dbName + ".jdbc.driver", "oracle.jdbc.driver.OracleDriver");
134-
config.setProperty(dbName + ".jdbc.validation", jdbc.getJdbcValidation());
135-
config.setProperty(dbName + ".jdbc.connections", jdbc.getJdbcConnections());
136-
137-
dbNames.add(dbName);
119+
config.put(jdbc.getJdbcDBName().toUpperCase(), jdbc);
138120
}
139-
140-
config.setProperty("dbnames", dbNames);
121+
propertyRepository.saveDBConnectionInfo(configFilePath, config);
141122
} else {
142-
143-
List<String> serverNames = new ArrayList<>();
123+
Map<String, JschConnectionInfo> config = new HashMap<>();
144124

145125
for (StatefulAP childAP : this.connInfoAPMap.getActiveAPs().values()) {
146126
ServerConnectionInfoAnchorPane serverConnAP = (ServerConnectionInfoAnchorPane) childAP.getAp();
147127
JschConnectionInfo jsch = serverConnAP.getInputValues();
148-
149-
String serverName = jsch.getServerName().toLowerCase();
150-
config.setProperty(serverName + ".server.servername", jsch.getServerName());
151-
config.setProperty(serverName + ".server.host", jsch.getHost());
152-
config.setProperty(serverName + ".server.port", jsch.getPort());
153-
config.setProperty(serverName + ".server.username", jsch.getUserName());
154-
config.setProperty(serverName + ".server.password", jsch.getPassword());
155-
156-
String dateFormat = jsch.getAlc().getDateFormat();
157-
String dateFormatRegex = "";
158-
159-
if (dateFormat.equals("EEE MMM dd HH:mm:ss yyyy")) {
160-
dateFormatRegex = "...\\s...\\s([0-2][0-9]|1[012])\\s\\d\\d:\\d\\d:\\d\\d\\s\\d{4}";
161-
} else if (dateFormat.equals("yyyy-MM-dd")) {
162-
dateFormatRegex = "\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T";
163-
}
164-
165-
config.setProperty(serverName + ".server.alertlog.dateformat", dateFormat);
166-
config.setProperty(serverName + ".server.alertlog.dateformatregex", dateFormatRegex);
167-
config.setProperty(serverName + ".server.alertlog.filepath", jsch.getAlc().getReadFilePath());
168-
config.setProperty(serverName + ".server.alertlog.readLine", 500);
169-
170-
serverNames.add(serverName);
128+
config.put(jsch.getServerName().toUpperCase(), jsch);
171129
}
172-
173-
config.setProperty("servernames", serverNames);
130+
propertyRepository.saveServerConnectionInfo(configFilePath, config);
174131
}
175-
176-
propertyRepository.save(configFilePath, config);
177132
}
178133

179134
/* Button Click Listener */
@@ -284,7 +239,7 @@ private void bringFrontConnInfoAnchorPane(long index) {
284239
}
285240

286241
// Index logging
287-
this.connInfoAPMap.print(connInfoIdx);
242+
// this.connInfoAPMap.print(connInfoIdx);
288243
}
289244

290245
private void setConnInfoIndexText() {

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ public static List<JschConnectionInfo> getJschConnectionMap() {
128128
* @return
129129
*/
130130
public static JschConnectionInfo getJschConnectionInfo(String serverName) {
131-
serverName = serverName.toLowerCase();
132131
String serverHost = connInfoConfig.getString(serverName + ".server.host");
133132
int serverPort = connInfoConfig.getInt(serverName + ".server.port");
134133
String serverUserName = connInfoConfig.getString(serverName + ".server.username");
@@ -155,7 +154,6 @@ public static List<JdbcConnectionInfo> getJdbcConnectionMap() {
155154
* @return
156155
*/
157156
public static JdbcConnectionInfo getJdbcConnectionInfo(String dbName) {
158-
dbName = dbName.toLowerCase();
159157
String jdbcAlias = connInfoConfig.getString(dbName + ".jdbc.alias");
160158
String jdbcDriver = connInfoConfig.getString(dbName + ".jdbc.driver");
161159
String jdbcUrl = connInfoConfig.getString(dbName + ".jdbc.url");
@@ -183,10 +181,10 @@ public static Map<String, AlertLogCommand> getAlertLogCommandMap() {
183181
* @return
184182
*/
185183
public static AlertLogCommand getAlertLogCommand(String serverName) {
186-
String alertLogFilePath = connInfoConfig.getString(serverName.toLowerCase() + ".server.alertlog.filepath");
187-
String alertLogReadLine = connInfoConfig.getString(serverName.toLowerCase() + ".server.alertlog.readline");
188-
String alertLogDateFormat = connInfoConfig.getString(serverName.toLowerCase() + ".server.alertlog.dateformat");
189-
String alertLogDateFormatRegex = connInfoConfig.getString(serverName.toLowerCase() + ".server.alertlog.dateformatregex");
184+
String alertLogFilePath = connInfoConfig.getString(serverName + ".server.alertlog.filepath");
185+
String alertLogReadLine = connInfoConfig.getString(serverName + ".server.alertlog.readline");
186+
String alertLogDateFormat = connInfoConfig.getString(serverName + ".server.alertlog.dateformat");
187+
String alertLogDateFormatRegex = connInfoConfig.getString(serverName + ".server.alertlog.dateformatregex");
190188
AlertLogCommand alc = new AlertLogCommand("tail", alertLogReadLine, alertLogFilePath, alertLogDateFormat, alertLogDateFormatRegex);
191189
return alc;
192190
}

0 commit comments

Comments
 (0)