package org.springframework.cloud.service.common;
import org.springframework.cloud.service.UriBasedServiceInfo;
/**
* @author Ramnivas Laddad
* @author Scott Frederick
*/
public abstract class RelationalServiceInfo extends UriBasedServiceInfo {
public static final String JDBC_PREFIX = "jdbc:";
protected final String jdbcUrl;
protected final String jdbcUrlDatabaseType;
public RelationalServiceInfo(String id, String uriString, String jdbcUrlDatabaseType) {
this(id, uriString, null, jdbcUrlDatabaseType);
}
public RelationalServiceInfo(String id, String uriString, String jdbcUrl, String jdbcUrlDatabaseType) {
super(id, uriString);
this.jdbcUrl = jdbcUrl;
this.jdbcUrlDatabaseType = jdbcUrlDatabaseType;
}
@ServiceProperty(category = "connection")
public String getJdbcUrl() {
return jdbcUrl == null ? buildJdbcUrl() : jdbcUrl;
}
protected String buildJdbcUrl() {
return String.format("%s%s://%s%s/%s%s%s", JDBC_PREFIX, jdbcUrlDatabaseType, getHost(), formatPort(),
getPath(), formatUserinfo(), formatQuery());
}
private String formatPort() {
if (getPort() != -1) {
return String.format(":%d", getPort());
}
return "";
}
private String formatUserinfo() {
if (getUserName() != null && getPassword() != null) {
return String.format("?user=%s&password=%s", getUserName(), getPassword());
}
if (getUserName() != null) {
return String.format("?user=%s", getUserName());
}
return "";
}
private String formatQuery() {
if (getQuery() != null) {
if (getUserName() == null && getPassword() == null) {
return String.format("?%s", getQuery());
} else {
return String.format("&%s", getQuery());
}
}
return "";
}
}