package manager; import java.sql.SQLException; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; import util.ApplicationConstants; import util.DataSourceFactory; import util.Messenger; public class DataSourceManager { // DATA SOURCE private DriverManagerDataSource ds = new DriverManagerDataSource(); private final Log logger = LogFactory.getLog(DataSourceManager.class); /** * Test for the connection param * @param data - Connection params */ public void process( String data) { logger.debug("Handling DataSource infos..."); try{ String[] values = data.split("##"); // SPLIT INFOS ds = DataSourceFactory.createDS(values[3], values[0], values[1], Integer.decode(values[2])); // GET DB TYPE Messenger.sendMessage("testBase", "Trying to connect to the DB..."); if(testBase()){ Messenger.sendMessage(ApplicationConstants.TEST_BASE, "Succes"); } }catch(Exception e){ logger.error(e.getMessage()); } } public void getDbSqlServer(String data){ // SPLIT INFOS String[] values = data.split("##"); // Ask the factory to create the correct datasource for the database supplied ds = DataSourceFactory.createDS(values[3], values[0], values[1], Integer.decode(values[2])); // Create spring jdbctemplate JdbcTemplate t = new JdbcTemplate(ds); if (testBase()){ List<?> l = null; try{ l = t.queryForList("SELECT NAME FROM SYS.DATABASES"); }catch(Exception e){ logger.error(e.getMessage()); // When error send to flex the error try { Messenger.sendMessage(ApplicationConstants.TEST_BASE,e.getMessage()); } catch (Exception e2) { e2.printStackTrace(); logger.error(e2.getMessage()); } } // Send the list of databases to flex try { Messenger.sendMessage(ApplicationConstants.DB_SQL_SERVER, l); } catch (Exception e) { e.printStackTrace(); } } } /** * Grab the MySQL databases * @param data connection params */ public void getDbMySql(String data){ // SPLIT INFOS String[] values = data.split("##"); ds = DataSourceFactory.createDS(values[3], values[0], values[1], Integer.decode(values[2])); JdbcTemplate t = new JdbcTemplate(ds); if (testBase()){ List<?> l = null; try{ l = t.queryForList("show databases"); }catch(Exception e){ logger.error(e.getMessage()); try { Messenger.sendMessage(ApplicationConstants.TEST_BASE,e.getMessage()); } catch (Exception e2) { e2.printStackTrace(); logger.error(e2.getMessage()); } } try { Messenger.sendMessage(ApplicationConstants.DB_MYSQL, l); } catch (Exception e) { logger.error(e.getMessage()); } } } /** * Grab the PostgreSQL databases * @param data connection params */ public void getDbPostGre(String data){ // SPLIT INFOS String[] values = data.split("##"); ds = DataSourceFactory.createDS(values[3], values[0], values[1], Integer.decode(values[2])); JdbcTemplate t = new JdbcTemplate(ds); if (testBase()){ List<?> l = null; try{ l = t.queryForList("select datname from pg_database"); }catch(Exception e){ logger.error(e.getMessage()); try { Messenger.sendMessage(ApplicationConstants.TEST_BASE,e.getMessage()); } catch (Exception e2) { e2.printStackTrace(); logger.error(e2.getMessage()); } } try { Messenger.sendMessage(ApplicationConstants.DB_POSTGRESQL, l); } catch (Exception e) { e.printStackTrace(); } } } /** * Test the connection to the database * @return */ private boolean testBase(){ boolean b=true; logger.info("Testing DB connection..."); try { ds.getConnection(); } catch (SQLException e) { logger.error(e.getMessage()); try { Messenger.sendMessage(ApplicationConstants.TEST_BASE,"ERROR : "+e.getMessage()); } catch (Exception e2) { logger.error(e2.getMessage()); } b=false; } return b; } }