/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2006-2011 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
* OpenNMS(R) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* OpenNMS(R) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenNMS(R). If not, see:
* http://www.gnu.org/licenses/
*
* For more information contact:
* OpenNMS(R) Licensing <license@opennms.org>
* http://www.opennms.org/
* http://www.opennms.com/
*******************************************************************************/
package org.opennms.netmgt.dao.db;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Map.Entry;
import javax.sql.DataSource;
import org.opennms.netmgt.config.opennmsDataSources.JdbcDataSource;
import org.opennms.netmgt.config.opennmsDataSources.Param;
public class SimpleDataSource implements DataSource {
private String m_driver;
private String m_url;
private Properties m_properties = new Properties();
private Integer m_timeout = null;
/**
* <p>Constructor for SimpleDataSource.</p>
*
* @param driver a {@link java.lang.String} object.
* @param url a {@link java.lang.String} object.
* @param user a {@link java.lang.String} object.
* @param password a {@link java.lang.String} object.
* @throws java.lang.ClassNotFoundException if any.
*/
public SimpleDataSource(String driver, String url, String user, String password) throws ClassNotFoundException {
m_driver = driver;
m_url = url;
m_properties.put("user", user);
m_properties.put("password", password);
Class.forName(m_driver);
}
/**
* <p>Constructor for SimpleDataSource.</p>
*
* @param ds a {@link org.opennms.netmgt.config.opennmsDataSources.JdbcDataSource} object.
* @throws java.lang.ClassNotFoundException if any.
*/
public SimpleDataSource(JdbcDataSource ds) throws ClassNotFoundException {
this(ds.getClassName(), ds.getUrl(), ds.getUserName(), ds.getPassword());
for (Param param : ds.getParamCollection()) {
m_properties.put(param.getName(), param.getValue());
}
}
/**
* <p>getConnection</p>
*
* @return a {@link java.sql.Connection} object.
* @throws java.sql.SQLException if any.
*/
public Connection getConnection() throws SQLException {
if (m_timeout == null) {
return DriverManager.getConnection(m_url, m_properties);
} else {
int oldTimeout = DriverManager.getLoginTimeout();
DriverManager.setLoginTimeout(m_timeout);
Connection conn = DriverManager.getConnection(m_url, m_properties);
DriverManager.setLoginTimeout(oldTimeout);
return conn;
}
}
/** {@inheritDoc} */
public Connection getConnection(String username, String password) throws SQLException {
throw new UnsupportedOperationException("getConnection(String, String) not implemented");
}
/**
* <p>getLogWriter</p>
*
* @return a {@link java.io.PrintWriter} object.
* @throws java.sql.SQLException if any.
*/
public PrintWriter getLogWriter() throws SQLException {
throw new UnsupportedOperationException("getLogWriter() not implemented");
}
/**
* <p>getLoginTimeout</p>
*
* @return a int.
* @throws java.sql.SQLException if any.
*/
public int getLoginTimeout() throws SQLException {
return m_timeout == null ? -1 : m_timeout;
}
/** {@inheritDoc} */
public void setLogWriter(PrintWriter out) throws SQLException {
throw new UnsupportedOperationException("setLogWriter(PrintWriter) not implemented");
}
/** {@inheritDoc} */
public void setLoginTimeout(int seconds) throws SQLException {
m_timeout = seconds;
}
/**
* <p>unwrap</p>
*
* @param iface a {@link java.lang.Class} object.
* @param <T> a T object.
* @return a T object.
* @throws java.sql.SQLException if any.
*/
public <T> T unwrap(Class<T> iface) throws SQLException {
return null; //TODO
}
/**
* <p>isWrapperFor</p>
*
* @param iface a {@link java.lang.Class} object.
* @return a boolean.
* @throws java.sql.SQLException if any.
*/
public boolean isWrapperFor(Class<?> iface) throws SQLException {
return false; //TODO
}
/**
* <p>getDriver</p>
*
* @return a {@link java.lang.String} object.
*/
public String getDriver() {
return m_driver;
}
/**
* <p>getPassword</p>
*
* @return a {@link java.lang.String} object.
*/
public String getPassword() {
return m_properties.getProperty("password");
}
/**
* <p>getTimeout</p>
*
* @return a {@link java.lang.Integer} object.
*/
public Integer getTimeout() {
return m_timeout;
}
/**
* <p>getUrl</p>
*
* @return a {@link java.lang.String} object.
*/
public String getUrl() {
return m_url;
}
/**
* <p>getUser</p>
*
* @return a {@link java.lang.String} object.
*/
public String getUser() {
return m_properties.getProperty("user");
}
/**
* <p>getProperties</p>
*
* @return a {@link java.util.Properties} object.
*/
public Properties getProperties() {
return m_properties;
}
/**
* <p>toString</p>
*
* @return a {@link java.lang.String} object.
*/
public String toString() {
StringBuffer props = new StringBuffer();
if (m_properties.isEmpty()) {
props.append(" none");
} else {
boolean first = true;
for (Entry<Object, Object> entry : m_properties.entrySet()) {
if (!first) {
props.append(",");
}
props.append(" ");
props.append(entry.getKey());
props.append("='");
props.append(entry.getValue());
props.append("'");
first = false;
}
}
return "SimpleDataSource[URL='" + getUrl() + "', driver class='" + getDriver() + "', properties:" + props + "]";
}
}