package ee.esutoniagodesu.repository.project;
import com.googlecode.genericdao.search.Search;
import ee.esutoniagodesu.domain.jmen.pk.EN_SensPK;
import ee.esutoniagodesu.domain.jmen.table.EN_Sens;
import ee.esutoniagodesu.domain.jmen.view.EN_Essum;
import ee.esutoniagodesu.util.persistence.JDBCUtil;
import org.springframework.stereotype.Repository;
import java.sql.*;
import java.util.List;
@SuppressWarnings("unchecked")
@Repository
public class JMDictEnDB extends AbstractProjectRepository {
public EN_Sens getFirstSensByKanjAndRdng(String kanj, String rdng) {
Connection con = null;
CallableStatement s = null;
ResultSet rs = null;
EN_Sens result = null;
try {
con = dao.getConnection();
con.setAutoCommit(false);
String sql = "{? = call f_en_sens_by_kanj_and_rdng(?,?,?)}";
s = con.prepareCall(sql);
s.registerOutParameter(1, Types.OTHER);//cursor
s.setString(2, kanj);
s.setString(3, rdng);
s.setInt(4, 1);
s.execute();
rs = (ResultSet) s.getObject(1);
if (rs.next()) {
EN_SensPK pk = new EN_SensPK(rs.getInt(1), rs.getShort(2));
result = dao.find(EN_Sens.class, pk);
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
JDBCUtil.close(rs, s, con);
}
return result;
}
public List<EN_Essum> getEssumByKanj(String kanj) {
StringBuilder msg = new StringBuilder("getEssumByKanj: kanj=" + kanj);
if (kanj == null) throw new IllegalArgumentException(msg.toString());
try {
Search search = new Search(EN_Essum.class);
search.addFilterEqual("kanj", kanj);
List<EN_Essum> result = dao.search(search);
log.debug(msg.append(", result.size=").append(result.size()).toString());
return result;
} catch (Exception e) {
log.error(msg.append(", msg=").append(e.getMessage()).toString(), e);
throw e;
}
}
public List<EN_Essum> getEssumByKanjAndRdng(String kanj, String rdng) {
StringBuilder msg = new StringBuilder("getEssumByKanjAndRdng: kanj=" + kanj + ", rdng=" + rdng);
if (kanj == null || rdng == null) throw new IllegalArgumentException(msg.toString());
try {
Search search = new Search(EN_Essum.class);
search.addFilterEqual("kanj", kanj);
search.addFilterEqual("rdng", rdng);
List<EN_Essum> result = dao.search(search);
log.debug(msg.append(", result.size=").append(result.size()).toString());
return result;
} catch (Exception e) {
log.error(msg.append(", msg=").append(e.getMessage()).toString(), e);
throw e;
}
}
public String getGlossByRdngAndKanj(String rdng, String kanj) {
StringBuilder msg = new StringBuilder("getGlossByRdngAndKanj: rdng=" + rdng + ", kanj=" + kanj);
if (rdng == null)
throw new IllegalArgumentException(msg.toString());
Connection con = null;
PreparedStatement s = null;
ResultSet rs = null;
String result = null;
try {
long ms = System.currentTimeMillis();
con = dao.getConnection();
String sql = "SELECT gloss FROM jmdict_en.esum WHERE rdng=? AND kanj=? LIMIT 1";
s = con.prepareStatement(sql);
s.setString(1, rdng);
s.setString(2, kanj);
rs = s.executeQuery();
if (rs.next()) {
result = rs.getString(1);
}
if (log.isDebugEnabled()) log.debug(msg.append(", result=").append(result)
.append(", time=").append(System.currentTimeMillis() - ms).toString());
} catch (SQLException e) {
log.error(msg.append(", msg=").append(e.getMessage()).toString(), e);
throw new RuntimeException(e);
} finally {
JDBCUtil.close(rs, s, con);
}
return result;
}
}