package org.jstryker.database; import org.jstryker.database.connection.ConnectionPropertiesReader; import org.jstryker.database.connection.ConnectionPropertiesReaderFactory; import org.jstryker.database.connection.HibernatePropertiesReader; import org.jstryker.database.connection.JStrykerPropertiesReader; import org.jstryker.exception.JStrykerException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; /** * <p>Opens database connection.</p> * <p>It's possible read connection properties from jstryker.properties or hibernate.properties.</p> * <p><code>jstryker.properties</code> has its properties described below:</p> * <ul> * <li><code>driver</code>: JDBC driver class. Ex.: org.hsqldb.jdbcDriver. * <li><code>jdbc.url</code>: Connection URL. Ex.: jdbc:hsqldb:mem:jstryker. * <li><code>user</code>: Username. Ex.: root. * <li><code>password</code>: Password. Ex.: str0ngpazz. * </ul> */ public final class ConnectionHelper { private static final List<ConnectionPropertiesReader> PROPERTIES_READERS = new ArrayList<ConnectionPropertiesReader>(); static { PROPERTIES_READERS.add(new JStrykerPropertiesReader()); PROPERTIES_READERS.add(new HibernatePropertiesReader()); } /** * Cannot be instantiate. */ private ConnectionHelper() { } /** * Open a database connection using <code>jstryker.properties</code> or <code>hibernate.properties</code> as * configuration.<br> * First it tries to read <code>jstryker.properties</code>, if there is no such file, it tries to read * <code>hibernate.properties</code>. * @return Database {@link Connection}. * @throws JStrykerException If cannot read any configuration file or if an error occurs during open connection. */ public static Connection getConnection() throws JStrykerException { try { ConnectionPropertiesReader propertiesReader = new ConnectionPropertiesReaderFactory(PROPERTIES_READERS).getConnectionPropertiesReader(); Class.forName(propertiesReader.getDriver()); return DriverManager.getConnection(propertiesReader.getUrl(), propertiesReader.getUsername(), propertiesReader.getPassword()); } catch (ClassNotFoundException e) { throw new JStrykerException(e.getMessage(), e); } catch (SQLException e) { throw new JStrykerException(e.getMessage(), e); } } }