Package net.sourceforge.javautil.database.external

Source Code of net.sourceforge.javautil.database.external.ExternalDatabase

package net.sourceforge.javautil.database.external;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import net.sourceforge.javautil.common.exception.ThrowableManagerRegistry;
import net.sourceforge.javautil.common.io.impl.SystemDirectory;
import net.sourceforge.javautil.common.password.IPassword;
import net.sourceforge.javautil.database.IDatabaseServer;
import net.sourceforge.javautil.database.DatabaseServerAbstract;
import net.sourceforge.javautil.datasource.IDataSourceDescriptor;
import net.sourceforge.javautil.datasource.DataSourceDescriptorStandard;
import net.sourceforge.javautil.datasource.SimpleDataSource;
import net.sourceforge.javautil.template.impl.template.SimpleStringTemplate;
import net.sourceforge.javautil.template.impl.template.TemplateContextVariableDefault;

/**
* A wrapper for an external {@link IDatabaseServer}.
*
* @author elponderador
* @author $Author$
* @version $Id$
*/
public class ExternalDatabase extends DatabaseServerAbstract {
 
  protected final String driverClass;
  protected final SimpleStringTemplate urlTemplate;
 
  protected final Map<String, String> databaseURLs = new HashMap<String, String>();

  public ExternalDatabase(String name, SystemDirectory root, String driverClass, SimpleStringTemplate urlTemplate) {
    super(name, root);
    this.driverClass = driverClass;
    this.urlTemplate = urlTemplate;
   
    try {
      Class.forName(driverClass);
    } catch (ClassNotFoundException e) {
      throw new IllegalArgumentException("No such driver could be located: " + driverClass);
    }
  }

  public Connection createConnection(String databaseName, String username, IPassword password) throws SQLException {
    return DriverManager.getConnection(getDatabaseURL(databaseName), username, new String(password.getPassword()));
  }

  public boolean createDatabase(String name, String username, IPassword password) {
    Connection connection = null;
    Statement st = null;
    try {
      connection = this.createConnection(name, username, password);
      st = connection.createStatement();
      st.execute("CREATE DATABASE " + name);
      this.getDatabaseURL(name);
      return true;
    } catch (SQLException e) {
      return false;
    } finally {
      if (st != null) try { st.close(); } catch (SQLException e) { }
      if (connection != null) try { connection.close(); } catch (SQLException e) { }
    }
  }

  public DataSource createDataSource(String databaseName, String username, IPassword password) throws SQLException {
    return new SimpleDataSource(this.createDescriptor(username, databaseName, username), password);
  }

  public IDataSourceDescriptor createDescriptor(String name, String databaseName, String username) {
    return new DataSourceDescriptorStandard(name, driverClass, getDatabaseURL(databaseName), username);
  }

  public String getUsername() { return null; }

  public boolean isDatabaseExists(String name) {
    return databaseURLs.containsKey(name);
  }
 
  protected String getDatabaseURL (String databaseName) {
    if (!databaseURLs.containsKey(databaseName)) {
      TemplateContextVariableDefault var = new TemplateContextVariableDefault();
      var.setVariable("database", databaseName);
      databaseURLs.put(databaseName, urlTemplate.build(var).getTemplate());
    }
    return databaseURLs.get(databaseName);
  }

}
TOP

Related Classes of net.sourceforge.javautil.database.external.ExternalDatabase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.