package op.settings.databeans;
import entity.system.SYSPropsTools;
import op.OPDE;
import op.tools.DesEncrypter;
import op.tools.SYSTools;
import org.apache.log4j.Logger;
import org.hibernate.validator.constraints.NotEmpty;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Properties;
import java.util.StringTokenizer;
/**
* Created by tloehr on 02.07.15.
*/
public class DatabaseConnectionBean {
@NotEmpty
String host;
Integer port;
@NotEmpty
String user;
@NotEmpty
String password;
@NotEmpty
String catalog;
public DatabaseConnectionBean(Properties preset) {
Logger logger = Logger.getLogger(getClass());
host = SYSTools.catchNull(preset.getProperty(SYSPropsTools.KEY_JDBC_HOST));
port = Integer.parseInt(SYSTools.catchNull(preset.getProperty(SYSPropsTools.KEY_JDBC_PORT), "3306"));
catalog = SYSTools.catchNull(preset.getProperty(SYSPropsTools.KEY_JDBC_CATALOG, "opde"));
if (host.isEmpty() || catalog.isEmpty()) {
// if the is an old URL in the config file, try to parse it
String url = SYSTools.catchNull(preset.getProperty(SYSPropsTools.KEY_JDBC_URL));
if (url.length() >= 13) { // to trim "jdbc:mysql://"
StringTokenizer st = new StringTokenizer(url.substring(13, url.length()), ":/");
if (st.countTokens() == 3) {
host = st.nextToken();
port = Integer.parseInt(st.nextToken());
catalog = st.nextToken();
}
}
}
user = SYSTools.catchNull(preset.getProperty(SYSPropsTools.KEY_JDBC_USER), "opdeuser");
password = OPDE.getEncryption().decryptJDBCPasswort();
// try {
// password = OPDE.getDesEncrypter().decrypt(SYSTools.catchNull(preset.getProperty(SYSPropsTools.KEY_JDBC_PASSWORD)));
// } catch (BadPaddingException e) {
// password = "";
// } catch (Exception e) {
// OPDE.fatal(logger, e);
// }
//
// // could still be encoded with the old algorithm. trying.
// if (password.isEmpty()) {
// DesEncrypter oldDesEncrypter = new DesEncrypter(SYSTools.catchNull(OPDE.getLocalProps().getProperty(SYSPropsTools.KEY_HOSTKEY)));
//
// try {
// password = oldDesEncrypter.decrypt(SYSTools.catchNull(preset.getProperty(SYSPropsTools.KEY_JDBC_PASSWORD)));
// } catch (BadPaddingException e) {
// password = "";
// } catch (Exception e) {
// OPDE.fatal(logger, e);
// }
// }
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCatalog() {
return catalog;
}
public void setCatalog(String catalog) {
this.catalog = catalog;
}
public Properties toProperties(Properties myProps) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException {
myProps.put(SYSPropsTools.KEY_JDBC_HOST, host.trim());
myProps.put(SYSPropsTools.KEY_JDBC_PORT, port.toString());
myProps.put(SYSPropsTools.KEY_JDBC_USER, user.trim());
myProps.put(SYSPropsTools.KEY_JDBC_PASSWORD, OPDE.getEncryption().encrypt(password.trim()));
// myProps.put(SYSPropsTools.KEY_JDBC_PASSWORD, OPDE.getDesEncrypter().encrypt(password.trim()));
myProps.put(SYSPropsTools.KEY_JDBC_CATALOG, catalog.trim());
return myProps;
}
}