package br.gov.frameworkdemoiselle.behave.internal.dataprovider.database; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import br.gov.frameworkdemoiselle.behave.config.BehaveConfig; import br.gov.frameworkdemoiselle.behave.dataprovider.DatabaseConnector; import br.gov.frameworkdemoiselle.behave.dataprovider.DatasetLoader; import br.gov.frameworkdemoiselle.behave.dataprovider.dto.DataItem; import br.gov.frameworkdemoiselle.behave.dataprovider.dto.DataRecord; import br.gov.frameworkdemoiselle.behave.dataprovider.dto.Dataset; import br.gov.frameworkdemoiselle.behave.exception.BehaveException; import br.gov.frameworkdemoiselle.behave.internal.spi.InjectionManager; import br.gov.frameworkdemoiselle.behave.message.BehaveMessage; /** * * @author SERPRO * */ public class DatabaseDatasetLoader implements DatasetLoader { private static DatabaseConnector databaseConnector = (DatabaseConnector) InjectionManager.getInstance().getInstanceDependecy(DatabaseConnector.class); private static BehaveMessage bm = new BehaveMessage(BehaveConfig.MESSAGEBUNDLE); public Dataset load(String tableName){ try { databaseConnector.openConnection(); ResultSet resultSet = databaseConnector.executeQuery("select * from "+tableName); databaseConnector.closeConnection(); return createDataSet(resultSet); } catch (SQLException e) { e.printStackTrace(); throw new BehaveException(bm.getString("exception-database-error", e)); } } private Dataset createDataSet(ResultSet resultSet) throws SQLException { Dataset dataset = new Dataset(); dataset.setDataRecords(new ArrayList<DataRecord>()); ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); int columnCount = resultSetMetaData.getColumnCount(); while(resultSet.next()){ dataset.getDataRecords().add(createDataRecord(resultSet, resultSetMetaData, columnCount)); } return dataset; } private DataRecord createDataRecord(ResultSet resultSet,ResultSetMetaData resultSetMetaData, int columnCount) throws SQLException { String id = resultSet.getString("id"); DataRecord dataRecord = new DataRecord(id); dataRecord.setDataItems(new ArrayList<DataItem>()); for(int i=1; i<columnCount;i++){ dataRecord.getDataItems().add(createDataItem(resultSet, resultSetMetaData, i)); } return dataRecord; } private DataItem createDataItem(ResultSet resultSet, ResultSetMetaData resultSetMetaData, int i) throws SQLException { String key = resultSetMetaData.getColumnName(i); String value = resultSet.getObject(i).toString(); return new DataItem(key, value); } }