--- /dev/null
+package compbio.cassandra.readers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Row;
+
+import compbio.beans.ProteinBean;
+
+/**
+ * Reader class for making requests on protein sequences to cassandra.
+ *
+ * @author Alexander Sherstnev
+ * @author Natasha Sherstneva
+ *
+ * @since 0.5
+ * @version 1.0
+ * @since December 2013
+ */
+public class SequenceReader extends CassandraReader {
+
+ public SequenceReader() {
+ super();
+ }
+
+ /**
+ * query: protein sequence
+ *
+ * @param sequence
+ * protein sequence or partial of protein sequence
+ * @param searchtype
+ * "whole" or "partial" of protein sequence
+ *
+ * @return List<ProteinBean> to the controller SequenceController
+ *
+ **/
+ public List<ProteinBean> readProteins(String sequence, String searchtype) {
+ List<ProteinBean> query = new ArrayList<ProteinBean>();
+ if (searchtype.equals("whole")) {
+ ResultSet results = CassandraQuery("SELECT JobID, Predictions FROM ProteinRow WHERE Protein = '" + sequence + "';");
+ if (results.isExhausted())
+ return null;
+ List<Row> rows = results.all();
+ ProteinBean structure = new ProteinBean(sequence, rows.get(0).getMap("Predictions", String.class, String.class));
+ for (Row r : rows) {
+ structure.setJobid(r.getString("JobID"));
+ }
+ query.add(structure);
+ } else {
+ ResultSet results = CassandraQuery("SELECT * FROM ProteinRow;");
+ if (results.isExhausted())
+ return null;
+ List<Row> rows = results.all();
+ for (Row r : rows) {
+ String protein = r.getString("Protein");
+ if (protein.matches("(.*)" + sequence + "(.*)")) {
+ ProteinBean foundsequence = new ProteinBean(protein, r.getMap("Predictions", String.class, String.class));
+ foundsequence.setJobid(r.getString("JobID"));
+ query.add(foundsequence);
+ }
+ }
+ }
+ if (searchtype.equals("partial")) {
+ for (ProteinBean entry : query) {
+ entry.setSubProt(CreateSubprotein(entry.getSequence(), sequence));
+ }
+ }
+ return query;
+ }
+
+ /**
+ * create a list of parts of protein sequence for highlighting current value
+ * in report;
+ *
+ * @param protein
+ * protein sequence
+ * @param subprot
+ * partial of protein sequence
+ *
+ * @return List<String>
+ *
+ **/
+ private static List<String> CreateSubprotein(String protein, String subprot) {
+ List<String> sub = new ArrayList<String>();
+ String subStr = protein;
+ while (subStr.length() > 0 && subStr.contains(subprot)) {
+ String first = subStr.substring(0, subStr.indexOf(subprot));
+ if (first.length() > 0)
+ sub.add(first);
+ sub.add(subprot);
+ subStr = subStr.substring(subStr.indexOf(subprot) + subprot.length(), subStr.length());
+ }
+ if (subStr.length() > 0)
+ sub.add(subStr);
+ return sub;
+ }
+}