package lt.emasina.resthub.support;
import com.google.common.collect.Maps;
import java.io.IOException;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
import javax.inject.Singleton;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j;
import lt.emasina.resthub.ConnectionFactory;
import oracle.jdbc.OracleConnection;
/**
* ConnectionFactory
* @author valdo
*/
@Log4j
@Singleton
public class TestConnectionFactory implements ConnectionFactory {
private final Map<String, ConnectionDescription> conections = Maps.newHashMap();
public TestConnectionFactory(String url, String username, String password) throws IOException {
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException ex) {
log.error("Error while retrieving OracleDriver", ex);
}
conections.put("default", new ConnectionDescription("jdbc:oracle:thin:@" + url, username, password));
}
@Override
public Collection<String> getConnectionNames() {
return conections.keySet();
}
@Override
public OracleConnection getConnection(String name) throws SQLException {
if (conections.containsKey(name)) {
return conections.get(name).getConnection();
}
throw new IllegalArgumentException(String.format("Connection %s not found.", name));
}
@Override
public String getUrl(String name) {
return conections.get(name).getUrl();
}
@Override
public String getUsername(String name) {
return conections.get(name).getUser();
}
@Override
public String getPassword(String name) {
return conections.get(name).getPasswd();
}
@Getter
@RequiredArgsConstructor
private static class ConnectionDescription {
private final String url;
private final String user;
private final String passwd;
public OracleConnection getConnection() throws SQLException {
log.debug(String.format("Connecting to %s...", url));
return (OracleConnection) DriverManager.getConnection(url, user, passwd);
}
}
}