package annis.sqlgen; import annis.service.objects.AnnisBinaryMetaData; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.util.Arrays; import org.slf4j.LoggerFactory; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.ResultSetExtractor; public class ByteHelper implements ResultSetExtractor<AnnisBinaryMetaData> { private static final org.slf4j.Logger log = LoggerFactory.getLogger(ByteHelper.class); private static final int[] ARG_TYPES = new int [] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR }; public static final String SQL = "SELECT\n" + "filename, title, mime_type, sub.name as corpus_name\n" + "FROM media_files, corpus AS sub, corpus AS top \n" + "WHERE\n" + " top.top_level = true AND\n" + " top.name = ? AND\n" + " sub.name = ? AND\n" + " sub.pre >= top.pre AND sub.post <= top.post AND\n" + " sub.id = corpus_ref AND\n" + " (? IS NULL OR mime_type = ?) AND \n" + " (? IS NULL OR title = ?)"; ; public static int[] getArgTypes() { return Arrays.copyOf(ARG_TYPES, ARG_TYPES.length); } public Object[] getArgs(String toplevelCorpusName, String corpusName, String mimeType, String title, int offset, int length) { return new Object[] { toplevelCorpusName, corpusName, mimeType, mimeType, title, title }; } @Override public AnnisBinaryMetaData extractData(ResultSet rs) throws DataAccessException { AnnisBinaryMetaData ab = new AnnisBinaryMetaData(); try { while (rs.next()) { ab.setLocalFileName(rs.getString("filename")); ab.setFileName(rs.getString("title")); ab.setCorpusName(rs.getString("corpus_name")); ab.setMimeType(rs.getString("mime_type")); // we only give one matching result back break; } } catch (SQLException ex) { log.error(null, ex); } return ab; } }