package org.insightech.er.editor.model.settings;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.SQLException;
import java.util.Properties;
import org.insightech.er.common.exception.InputException;
import org.insightech.er.db.DBManager;
import org.insightech.er.db.DBManagerFactory;
import org.insightech.er.util.Format;
public class DBSetting implements Serializable, Comparable<DBSetting> {
private static final long serialVersionUID = 1753636902211017613L;
private String dbsystem;
private String server;
private int port;
private String database;
private String user;
private transient String password;
private boolean useDefaultDriver;
private String url;
private String driverClassName;
public String getDbsystem() {
return dbsystem;
}
public DBSetting(String dbsystem, String server, int port, String database,
String user, String password, boolean useDefaultDriver, String url,
String driverClassName) {
this.dbsystem = dbsystem;
this.server = server;
this.port = port;
this.database = database;
this.user = user;
this.password = password;
this.useDefaultDriver = useDefaultDriver;
this.url = url;
this.driverClassName = driverClassName;
}
public String getServer() {
return server;
}
public int getPort() {
return port;
}
public String getDatabase() {
return database;
}
public String getUser() {
return user;
}
public String getPassword() {
return password;
}
public boolean isUseDefaultDriver() {
return useDefaultDriver;
}
public String getUrl() {
return url;
}
public String getDriverClassName() {
return driverClassName;
}
public int compareTo(DBSetting other) {
int compareTo = this.getDbsystem().compareTo(other.getDbsystem());
if (compareTo != 0) {
return compareTo;
}
compareTo = this.getServer().compareTo(other.getServer());
if (compareTo != 0) {
return compareTo;
}
if (this.getPort() != other.getPort()) {
return this.getPort() - other.getPort();
}
compareTo = this.getDatabase().compareTo(other.getDatabase());
if (compareTo != 0) {
return compareTo;
}
compareTo = this.getUser().compareTo(other.getUser());
if (compareTo != 0) {
return compareTo;
}
compareTo = this.getServer().compareTo(other.getServer());
if (compareTo != 0) {
return compareTo;
}
compareTo = this.getPassword().compareTo(other.getPassword());
if (compareTo != 0) {
return compareTo;
}
if (this.isUseDefaultDriver() != other.isUseDefaultDriver()) {
if (this.isUseDefaultDriver()) {
return -1;
} else {
return 1;
}
}
compareTo = this.getUrl().compareTo(other.getUrl());
if (compareTo != 0) {
return compareTo;
}
compareTo = this.getDriverClassName().compareTo(
other.getDriverClassName());
if (compareTo != 0) {
return compareTo;
}
return 0;
}
public String getTableNameWithSchema(String tableName, String schema) {
if (schema == null) {
return Format.null2blank(tableName);
}
DBManager dbManager = DBManagerFactory.getDBManager(this.dbsystem);
if (!dbManager.isSupported(DBManager.SUPPORT_SCHEMA)) {
return Format.null2blank(tableName);
}
return schema + "." + Format.null2blank(tableName);
}
public Connection connect() throws InputException, InstantiationException,
IllegalAccessException, SQLException {
DBManager manager = DBManagerFactory.getDBManager(this.getDbsystem());
Class<Driver> driverClass = manager.getDriverClass(this
.getDriverClassName());
if (driverClass == null) {
throw new InputException("error.jdbc.driver.not.found");
}
Driver driver = driverClass.newInstance();
Properties info = new Properties();
if (this.getUser() != null) {
info.put("user", this.getUser());
}
if (this.getPassword() != null) {
info.put("password", this.getPassword());
}
return driver.connect(this.getUrl(), info);
}
}