package org.nextprot.api.core.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.nextprot.api.commons.spring.jdbc.DataSourceServiceLocator;
import org.nextprot.api.commons.utils.SQLDictionary;
import org.nextprot.api.core.dao.CvJournalDao;
import org.nextprot.api.core.domain.CvJournal;
import org.nextprot.api.core.domain.PublicationCvJournal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.stereotype.Repository;
@Repository
public class CvJournalDaoImpl implements CvJournalDao {
@Autowired private SQLDictionary sqlDictionary;
@Autowired private DataSourceServiceLocator dsLocator;
@Override
public CvJournal findById(Long journalId) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("journalId", journalId);
return new NamedParameterJdbcTemplate(dsLocator.getDataSource()).queryForObject(sqlDictionary.getSQLQuery("cvjournal-by-id"), params, new JournalRowMapper());
}
@Override
public List<CvJournal> findByPublicationId(Long publicationId) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("publicationId", publicationId);
return new NamedParameterJdbcTemplate(dsLocator.getDataSource()).query(sqlDictionary.getSQLQuery("cvjournal-by-publication-id"), params, new JournalRowMapper());
}
@Override
public List<PublicationCvJournal> findCvJournalsByPublicationIds(List<Long> publicationIds) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("publicationIds", publicationIds);
return new NamedParameterJdbcTemplate(dsLocator.getDataSource()).query(sqlDictionary.getSQLQuery("cvjournal-by-publication-ids"), params, new PublicationCvJournalRowMapper());
}
private static class JournalRowMapper implements ParameterizedRowMapper<CvJournal> {
@Override
public CvJournal mapRow(ResultSet resultSet, int row) throws SQLException {
CvJournal journal = new CvJournal();
journal.setJournalId(resultSet.getLong("cv_id"));
journal.setAbbrev(resultSet.getString("iso_abbrev"));
journal.setMedAbbrev(resultSet.getString("med_abbrev"));
journal.setName(resultSet.getString("journal_name"));
journal.setNLMid(resultSet.getString("nlmid"));
return journal;
}
}
// Why two row mappers (JournalRowMapper and PublicationCvJournalRowMapper) ?
private static class PublicationCvJournalRowMapper implements ParameterizedRowMapper<PublicationCvJournal>{
@Override
public PublicationCvJournal mapRow(ResultSet resultSet, int row) throws SQLException {
PublicationCvJournal journal = new PublicationCvJournal();
journal.setJournalId(resultSet.getLong("cv_id"));
journal.setName(resultSet.getString("journal_name"));
journal.setAbbrev(resultSet.getString("iso_abbrev"));
journal.setMedAbbrev(resultSet.getString("med_abbrev"));
journal.setPublicationId(resultSet.getLong("publication_id"));
journal.setNLMid(resultSet.getString("nlmid"));
return journal;
}
}
}