package org.nextprot.api.core.dao.impl; import org.nextprot.api.commons.spring.jdbc.DataSourceServiceLocator; import org.nextprot.api.commons.utils.SQLDictionary; import org.nextprot.api.core.dao.ExperimentalContextDao; import org.nextprot.api.core.domain.ExperimentalContext; import org.nextprot.api.core.domain.CvTerm; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import org.springframework.jdbc.core.simple.ParameterizedRowMapper; import org.springframework.stereotype.Repository; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; @Repository public class ExperimentalContextDaoImpl implements ExperimentalContextDao { @Autowired private SQLDictionary sqlDictionary; @Autowired private DataSourceServiceLocator dsLocator; @Override public List<ExperimentalContext> findExperimentalContextsByIds(List<Long> ids) { SqlParameterSource namedParameters = new MapSqlParameterSource("ids", ids); return new NamedParameterJdbcTemplate(dsLocator.getDataSource()).query(sqlDictionary.getSQLQuery("experimental-contexts-by-ids"), namedParameters, new ExperimentalContextMapper()); } @Override public List<ExperimentalContext> findAllExperimentalContexts() { SqlParameterSource namedParameters = new MapSqlParameterSource(); return new NamedParameterJdbcTemplate(dsLocator.getDataSource()).query(sqlDictionary.getSQLQuery("experimental-contexts-all"), namedParameters, new ExperimentalContextMapper()); } private class ExperimentalContextMapper implements ParameterizedRowMapper<ExperimentalContext> { @Override public ExperimentalContext mapRow(ResultSet rs, int row) throws SQLException { ExperimentalContext ec = new ExperimentalContext(); ec.setContextId(rs.getLong("context_id")); ec.setMetadataId(rs.getLong("metadataId")); ec.setCellLine(asTerminology(rs.getString("cellLineAC"))); ec.setTissue(asTerminology(rs.getString("tissueAC"))); ec.setOrganelle(asTerminology(rs.getString("organelleAC"))); ec.setDetectionMethod(asTerminology(rs.getString("detectionMethodAC"))); ec.setDisease(asTerminology(rs.getString("diseaseAC"))); ec.setDevelopmentalStage(asTerminology(rs.getString("developmentalStageAC"))); return ec; } private CvTerm asTerminology(String ac) { if (ac != null) { CvTerm term = new CvTerm(); term.setAccession(ac); return term; } return null; } } }