package io.mycat.backend.jdbc.mongodb;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.Properties;
import java.util.logging.Logger;
import org.slf4j.LoggerFactory;
import com.mongodb.MongoClientURI;
/**
* 功能详细描述
* @author sohudo[http://blog.csdn.net/wind520]
* @create 2014年12月19日 下午6:50:23
* @version 0.0.1
*/
public class MongoDriver implements Driver
{
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(MongoDriver.class);
static final String PREFIX = "mongodb://";
private DriverPropertyInfoHelper propertyInfoHelper = new DriverPropertyInfoHelper();
static{
try{
DriverManager.registerDriver(new MongoDriver());
}catch (SQLException e){
LOGGER.error("initError",e);
}
}
@Override
public Connection connect(String url, Properties info) throws SQLException {
MongoClientURI mcu = null;
if ((mcu = parseURL(url, info)) == null) {
return null;
}
MongoConnection result = null;
//System.out.print(info);
try{
result = new MongoConnection(mcu, url);
}catch (Exception e){
throw new SQLException("Unexpected exception: " + e.getMessage(), e);
}
return result;
}
private MongoClientURI parseURL(String url, Properties defaults) {
if (url == null) {
return null;
}
if (!StringUtils.startsWithIgnoreCase(url, PREFIX)) {
return null;
}
//删掉开头的 jdbc:
//url = url.replace(URL_JDBC, "");
try {
//FIXME 判断defaults中的参数,写入URL中?
return new MongoClientURI(url);
} catch (Exception e) {
LOGGER.error("parseURLError",e);
return null;
}
}
@Override
public boolean acceptsURL(String url) throws SQLException {
if (StringUtils.startsWithIgnoreCase(url, PREFIX)) {
return true;
}
return false;
}
@Override
public DriverPropertyInfo[] getPropertyInfo(String url, Properties info)
throws SQLException {
return propertyInfoHelper.getPropertyInfo();
}
@Override
public int getMajorVersion() {
return 1;
}
@Override
public int getMinorVersion() {
return 0;
}
@Override
public boolean jdbcCompliant() {
return true;
}
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException{
return null;
}
}