// Path: spring-cloud-core/src/main/java/org/springframework/cloud/service/common/RelationalServiceInfo.java
// 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", UriInfo.urlEncode(getUserName()), UriInfo.urlEncode(getPassword()));
// 		}
// 		if (getUserName() != null) {
// 			return String.format("?user=%s", UriInfo.urlEncode(getUserName()));
// 		}
// 		return "";
// 	}
// 
// 	private String formatQuery() {
// 		if (getQuery() != null) {
// 			if (formatUserinfo().isEmpty()) {
// 				return String.format("?%s", getQuery());
// 			} else {
// 				return String.format("&%s", getQuery());
// 			}
// 		}
// 		return "";
// 	}
// }


import java.util.logging.Logger;
import javax.sql.DataSource;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.cloud.service.ServiceConnectorConfig;
import org.springframework.cloud.service.common.RelationalServiceInfo;
import static org.springframework.cloud.service.Util.hasClass;
package org.springframework.cloud.service.relational;





public class HikariCpPooledDataSourceCreator<SI extends RelationalServiceInfo> implements PooledDataSourceCreator<SI> {

	protected static Logger logger = Logger.getLogger(PooledDataSourceCreator.class.getName());

	public static final String HIKARI_DATASOURCE = "com.zaxxer.hikari.HikariDataSource";

	private DataSourceConfigurer configurer = new DataSourceConfigurer();

// Path: spring-cloud-core/src/main/java/org/springframework/cloud/service/common/RelationalServiceInfo.java
// 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", UriInfo.urlEncode(getUserName()), UriInfo.urlEncode(getPassword()));
// 		}
// 		if (getUserName() != null) {
// 			return String.format("?user=%s", UriInfo.urlEncode(getUserName()));
// 		}
// 		return "";
// 	}
// 
// 	private String formatQuery() {
// 		if (getQuery() != null) {
// 			if (formatUserinfo().isEmpty()) {
// 				return String.format("?%s", getQuery());
// 			} else {
// 				return String.format("&%s", getQuery());
// 			}
// 		}
// 		return "";
// 	}
// }


// Path: spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/relational/HikariCpPooledDataSourceCreator.java
import java.util.logging.Logger;
import javax.sql.DataSource;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.cloud.service.ServiceConnectorConfig;
import org.springframework.cloud.service.common.RelationalServiceInfo;
import static org.springframework.cloud.service.Util.hasClass;

package org.springframework.cloud.service.relational;





public class HikariCpPooledDataSourceCreator<SI extends RelationalServiceInfo> implements PooledDataSourceCreator<SI> {

	protected static Logger logger = Logger.getLogger(PooledDataSourceCreator.class.getName());

	public static final String HIKARI_DATASOURCE = "com.zaxxer.hikari.HikariDataSource";

	private DataSourceConfigurer configurer = new DataSourceConfigurer();

	protected void setBasicDataSourceProperties(DataSource basicDataSource, RelationalServiceInfo serviceInfo,