package org.jabref.shared;
import java.util.Locale;
import java.util.Optional;
/**
* Enumerates all supported database systems (DBMS) by JabRef.
*/
public enum DBMSType {
MYSQL(
"MySQL",
"com.mysql.jdbc.Driver",
"jdbc:mysql://%s:%d/%s", 3306),
ORACLE(
"Oracle",
"oracle.jdbc.driver.OracleDriver",
"jdbc:oracle:thin:@%s:%d:%s", 1521),
POSTGRESQL(
"PostgreSQL",
"com.impossibl.postgres.jdbc.PGDriver",
"jdbc:pgsql://%s:%d/%s", 5432);
private final String type;
private final String driverPath;
private final String urlPattern;
private final int defaultPort;
private DBMSType(String type, String driverPath, String urlPattern, int defaultPort) {
this.type = type;
this.driverPath = driverPath;
this.urlPattern = urlPattern;
this.defaultPort = defaultPort;
}
@Override
public String toString() {
return this.type;
}
/**
* @return Java Class path for establishing JDBC connection.
*/
public String getDriverClassPath() throws Error {
return this.driverPath;
}
/**
* @return prepared connection URL for appropriate system.
*/
public String getUrl(String host, int port, String database) {
return String.format(urlPattern, host, port, database);
}
/**
* Retrieves the port number dependent on the type of the database system.
*/
public int getDefaultPort() {
return this.defaultPort;
}
public static Optional<DBMSType> fromString(String typeName) {
try {
return Optional.of(Enum.valueOf(DBMSType.class, typeName.toUpperCase(Locale.ENGLISH)));
} catch (IllegalArgumentException exception) {
return Optional.empty();
}
}
}