package org.agnitas.emm.extension.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.agnitas.emm.extension.dao.PluginDao;
import org.agnitas.emm.extension.data.PluginData;
import org.agnitas.emm.extension.data.impl.PluginDataImpl;
import org.agnitas.emm.extension.exceptions.UnknownPluginException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
public class PluginDaoImpl implements PluginDao {
private static class PluginDataRowMapper implements ParameterizedRowMapper<PluginData> {
@Override
public PluginData mapRow( ResultSet resultSet, int row) throws SQLException {
PluginData pluginData = new PluginDataImpl();
pluginData.setPluginId( resultSet.getString( "plugin_id"));
pluginData.setActivatedOnStartup( resultSet.getBoolean( "activate_on_startup"));
return pluginData;
}
}
// --------------------------------------------------------------------- Business Logic
private static final String GET_PLUGIN_DATA_SQL = "SELECT * FROM plugins_tbl WHERE plugin_id=?";
private static final String UPDATE_PLUGIN_DATA_SQL = "UPDATE plugins_tbl SET activate_on_startup=? WHERE plugin_id=?";
private static final String INSERT_PLUGIN_DATA_SQL = "INSERT INTO plugins_tbl (plugin_id, activate_on_startup) VALUES (?, ?)";
private static final String DELETE_PLUGIN_DATA_SQL = "DELETE FROM plugins_tbl WHERE plugin_id=?";
@Override
public PluginData getPluginData( String pluginId) throws UnknownPluginException {
SimpleJdbcTemplate template = new SimpleJdbcTemplate( this.dataSource);
List<PluginData> list = template.query( GET_PLUGIN_DATA_SQL, new PluginDataRowMapper(), pluginId);
if( list.size() == 0) {
throw new UnknownPluginException( pluginId);
} else {
return list.get( 0);
}
}
@Override
public void savePluginData(PluginData pluginData) {
SimpleJdbcTemplate template = new SimpleJdbcTemplate( this.dataSource);
int updated = template.update( UPDATE_PLUGIN_DATA_SQL, pluginData.isActivatedOnStartup(), pluginData.getPluginId());
if( updated == 0) {
template.update( INSERT_PLUGIN_DATA_SQL, pluginData.getPluginId(), pluginData.isActivatedOnStartup());
}
}
@Override
public void removePluginData( String pluginId) {
SimpleJdbcTemplate template = new SimpleJdbcTemplate( this.dataSource);
template.update( DELETE_PLUGIN_DATA_SQL, pluginId);
}
// --------------------------------------------------------------------- Dependency Injection
private DataSource dataSource;
public void setDataSource( DataSource dataSource) {
this.dataSource = dataSource;
}
}