/*
* Copyright (C) 2015
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.cleverbus.admin.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import javax.sql.DataSource;
import org.cleverbus.admin.dao.dto.MessageReportDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.util.Assert;
/**
* JDBC implementation of {@link MessageReportDao}.
*
* @author <a href="mailto:viliam.elischer@cleverlance.com">Viliam Elischer</a>
*/
@Repository
public class MessageReportDaoJdbcImpl implements MessageReportDao {
private JdbcTemplate jdbcTemplate;
@Autowired
@Qualifier(value = "dataSource")
public void setDataSource(DataSource dataSource) {
Assert.notNull(dataSource, "the dataSource must not be null");
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public List<MessageReportDto> getMessageStateSummary(Date startDate, Date endDate) {
String sql = "SELECT service, operation_name, source_system, state, COUNT(*) as state_count " +
"FROM message m " +
" WHERE receive_timestamp >= ? AND receive_timestamp <= ? " +
"GROUP BY service, operation_name, source_system, state " +
"ORDER BY service, operation_name, source_system, state;";
List<MessageReportDto> raw = jdbcTemplate.query(sql, new RowMapper<MessageReportDto>() {
public MessageReportDto mapRow(ResultSet rs, int i) throws SQLException {
MessageReportDto mdto = new MessageReportDto();
mdto.setServiceName(rs.getString("service"));
mdto.setOperationName(rs.getString("operation_name"));
mdto.setSourceSystem(rs.getString("source_system"));
mdto.setState(rs.getString("state"));
mdto.setStateCount(rs.getInt("state_count"));
return mdto;
}
}, startDate, endDate);
return raw;
}
}