package org.juxtasoftware.dao.impl; import java.io.Reader; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import org.juxtasoftware.dao.JuxtaXsltDao; import org.juxtasoftware.model.JuxtaXslt; import org.juxtasoftware.model.Usage; import org.juxtasoftware.model.Workspace; import org.springframework.dao.support.DataAccessUtils; import org.springframework.jdbc.core.PreparedStatementSetter; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import org.springframework.stereotype.Repository; @Repository public class JuxtaXsltDaoImpl extends JuxtaDaoImpl<JuxtaXslt> implements JuxtaXsltDao { protected JuxtaXsltDaoImpl() { super("juxta_xslt"); } @Override public void delete(JuxtaXslt juxtaXslt) { if ( juxtaXslt != null ) { this.jt.update("delete from " + this.tableName + " where id = ?", juxtaXslt.getId()); } } @Override public JuxtaXslt find(Long id) { final String sql = "select id, workspace_id, name, xslt, default_namespace from juxta_xslt where id=?"; return DataAccessUtils.uniqueResult( this.jt.query(sql, new RowMapper<JuxtaXslt>() { @Override public JuxtaXslt mapRow(ResultSet rs, int rowNum) throws SQLException { JuxtaXslt xslt = new JuxtaXslt(); xslt.setId( rs.getLong("id")); xslt.setWorkspaceId( rs.getLong("workspace_id")); xslt.setName( rs.getString("name")); xslt.setDefaultNamespace( rs.getString("default_namespace")); xslt.setXslt( rs.getString("xslt")); return xslt; } }, id)); } @Override public void update(final Long xsltId, final Reader xsltReader) { final String sql = "update "+this.tableName+" set xslt=? where id=?"; this.jt.update(sql, new PreparedStatementSetter() { @Override public void setValues(PreparedStatement ps) throws SQLException { ps.setLong(2, xsltId); ps.setCharacterStream(1, xsltReader); } }); } @Override public List<Usage> getUsage(JuxtaXslt xslt) { final String sql = "select id, name from juxta_witness where xslt_id=?"; List<Usage> usage = this.jt.query(sql, new RowMapper<Usage>() { @Override public Usage mapRow(ResultSet rs, int rowNum) throws SQLException { return new Usage(Usage.Type.WITNESS, rs.getLong("id"), rs.getString("name")); } }, xslt.getId()); // find all of the sets that use these witnesses. Add these to the initial list if ( usage.size() > 0 ) { StringBuilder ids = new StringBuilder(); for (Usage u : usage) { if ( ids.length() > 0) { ids.append(","); } ids.append( u.getId() ); } String setSql = "select distinct set_id,name from juxta_comparison_set_member " + "inner join juxta_comparison_set on juxta_comparison_set.id = set_id " + "where witness_id in ("+ids+")"; usage.addAll( this.jt.query(setSql, new RowMapper<Usage>(){ @Override public Usage mapRow(ResultSet rs, int rowNum) throws SQLException { return new Usage(Usage.Type.COMPARISON_SET, rs.getLong("set_id"), rs.getString("name")); } })); } return usage; } @Override public List<JuxtaXslt> list(Workspace ws) { final String sql = "select id, workspace_id, name from juxta_xslt"; return this.jt.query(sql, new RowMapper<JuxtaXslt>(){ @Override public JuxtaXslt mapRow(ResultSet rs, int rowNum) throws SQLException { JuxtaXslt xslt = new JuxtaXslt(); xslt.setId( rs.getLong("id")); xslt.setWorkspaceId( rs.getLong("workspace_id")); xslt.setName( rs.getString("name")); return xslt; } }); } @Override protected SqlParameterSource toInsertData(JuxtaXslt object) { final MapSqlParameterSource ps = new MapSqlParameterSource(); ps.addValue("id", object.getId()); ps.addValue("workspace_id", object.getWorkspaceId()); ps.addValue("name", object.getName()); ps.addValue("default_namespace", object.getDefaultNamespace()); ps.addValue("xslt", object.getXslt()); return ps; } }