From: Natasha Sherstneva Date: Fri, 10 Jan 2014 10:29:01 +0000 (+0000) Subject: new readers for the queries X-Git-Url: http://source.jalview.org/gitweb/?p=proteocache.git;a=commitdiff_plain;h=e8b88c0c8e432f8bc1aefdbd81df81e9ef706242 new readers for the queries --- diff --git a/conf/Proteocache.properties b/conf/Proteocache.properties index 78b97cd..d398c8a 100644 --- a/conf/Proteocache.properties +++ b/conf/Proteocache.properties @@ -9,7 +9,7 @@ cassandra.newtables.update=false ################################################################################# # Jpred sources # real Jpred web-server -cassandra.jpred.web.update=false +cassandra.jpred.web.update=true cassandra.jpred.web.inidelay=0 cassandra.jpred.web.updaterate=30 diff --git a/datadb/compbio/cassandra/DateBean.java b/datadb/compbio/beans/DateBean.java similarity index 96% rename from datadb/compbio/cassandra/DateBean.java rename to datadb/compbio/beans/DateBean.java index 6f4b06a..bddd7de 100644 --- a/datadb/compbio/cassandra/DateBean.java +++ b/datadb/compbio/beans/DateBean.java @@ -1,4 +1,4 @@ -package compbio.cassandra; +package compbio.beans; import java.util.HashMap; import java.util.LinkedHashMap; diff --git a/datadb/compbio/cassandra/JobBean.java b/datadb/compbio/beans/JobBean.java similarity index 94% rename from datadb/compbio/cassandra/JobBean.java rename to datadb/compbio/beans/JobBean.java index 0bfeb2c..0a15062 100644 --- a/datadb/compbio/cassandra/JobBean.java +++ b/datadb/compbio/beans/JobBean.java @@ -1,8 +1,10 @@ -package compbio.cassandra; +package compbio.beans; import java.util.LinkedHashMap; import java.util.Map; +import compbio.cassandra.PredictionIndex; + public class JobBean implements PredictionIndex { private String jobid; private String dateStart; diff --git a/datadb/compbio/cassandra/ProteinBean.java b/datadb/compbio/beans/ProteinBean.java similarity index 96% rename from datadb/compbio/cassandra/ProteinBean.java rename to datadb/compbio/beans/ProteinBean.java index d5e700b..b1e2c2f 100644 --- a/datadb/compbio/cassandra/ProteinBean.java +++ b/datadb/compbio/beans/ProteinBean.java @@ -1,10 +1,12 @@ -package compbio.cassandra; +package compbio.beans; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import compbio.cassandra.PredictionIndex; + public class ProteinBean implements PredictionIndex{ private String sequence; private String jnetpred; diff --git a/datadb/compbio/cassandra/Total.java b/datadb/compbio/beans/Total.java similarity index 57% rename from datadb/compbio/cassandra/Total.java rename to datadb/compbio/beans/Total.java index 75cef1f..3e819ed 100644 --- a/datadb/compbio/cassandra/Total.java +++ b/datadb/compbio/beans/Total.java @@ -1,14 +1,26 @@ -package compbio.cassandra; +package compbio.beans; +/** + * bean is stored Total for a TotalJobsStatisticBean. + * + * @param total + * total number of jobs for a day + * @param totalOK + * number of jobs with execution status OK for a date + * @param totalStopped + * number of jobs with execution status STOPPED for a date + * @param totalError + * number of jobs with execution status Jpred ERROR for a date + * @param totalTimeOut + * number of jobs with execution status TIMEDOUT for a date + */ public class Total { - private long total; // total number of jobs - private long totalOK; // number of jobs with execution status OK - private long totalStopped; // number of jobs with execution status STOPPED - private long totalError; // number of jobs with execution status Jpred ERROR - private long totalTimeOut; // number of jobs with execution status TIMEOUT - - public Total() {} - + private long total; + private long totalOK; + private long totalStopped; + private long totalError; + private long totalTimeOut; + public Total(long total, long totalOK, long totalStopped, long totalError, long totalTimeOut) { this.total = total; this.totalOK = totalOK; diff --git a/datadb/compbio/cassandra/TotalByCounterBean.java b/datadb/compbio/beans/TotalByCounterBean.java similarity index 93% rename from datadb/compbio/cassandra/TotalByCounterBean.java rename to datadb/compbio/beans/TotalByCounterBean.java index 5c8f329..bfe3b23 100644 --- a/datadb/compbio/cassandra/TotalByCounterBean.java +++ b/datadb/compbio/beans/TotalByCounterBean.java @@ -1,4 +1,4 @@ -package compbio.cassandra; +package compbio.beans; public class TotalByCounterBean { private int totaljobs; // total jobs for current condition diff --git a/datadb/compbio/cassandra/TotalJobsStatisticBean.java b/datadb/compbio/beans/TotalJobsStatisticBean.java similarity index 64% rename from datadb/compbio/cassandra/TotalJobsStatisticBean.java rename to datadb/compbio/beans/TotalJobsStatisticBean.java index 1df13fd..1c74a27 100644 --- a/datadb/compbio/cassandra/TotalJobsStatisticBean.java +++ b/datadb/compbio/beans/TotalJobsStatisticBean.java @@ -1,15 +1,21 @@ -package compbio.cassandra; +package compbio.beans; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; -public class TotalJobsStatisticBean extends Total { +/** + * bean for a report of daily statistics. + * + * @param dateTotal + * Map where String - a date, Total - total info for jobs with different status + * @param wholeTotal + * total sum for each parameter from dateTotal + */ +public class TotalJobsStatisticBean { private Map dateTotal; private Total wholeTotal; public TotalJobsStatisticBean() { - super(); this.dateTotal = new LinkedHashMap(); } diff --git a/datadb/compbio/cassandra/UserBean.java b/datadb/compbio/beans/UserBean.java similarity index 96% rename from datadb/compbio/cassandra/UserBean.java rename to datadb/compbio/beans/UserBean.java index 39cfd21..77c6724 100644 --- a/datadb/compbio/cassandra/UserBean.java +++ b/datadb/compbio/beans/UserBean.java @@ -1,4 +1,4 @@ -package compbio.cassandra; +package compbio.beans; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; diff --git a/datadb/compbio/cassandra/CassandraReader.java b/datadb/compbio/cassandra/CassandraReader.java deleted file mode 100644 index 00f878a..0000000 --- a/datadb/compbio/cassandra/CassandraReader.java +++ /dev/null @@ -1,39 +0,0 @@ -package compbio.cassandra; - -import org.apache.log4j.Logger; - -import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.Session; - -public class CassandraReader { - private static long earlestDate = 0; - private Session session; - private static Logger log = Logger.getLogger(CassandraNativeConnector.class); - - public CassandraReader() { - Session inis = CassandraNativeConnector.getSession(); - setSession(inis); - } - - public void setSession(Session s) { - assert s != null; - session = s; - } - - public ResultSet CassandraQuery(String column, String table, String condition) { - String com = "SELECT " + column + " FROM " + table + ";"; - System.out.println("Command: " + com); - ResultSet results = session.execute(com); - return results; - } - - /* - * find the earliest date in the database - */ - public static long earliestDate() { - earlestDate = CassandraNativeConnector.getEarliestDateInDB(); - return earlestDate; - } - - -} diff --git a/datadb/compbio/cassandra/CassandraReaderOld.java b/datadb/compbio/cassandra/CassandraReaderOld.java index f29bc9f..852beb0 100644 --- a/datadb/compbio/cassandra/CassandraReaderOld.java +++ b/datadb/compbio/cassandra/CassandraReaderOld.java @@ -12,6 +12,10 @@ import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; import com.datastax.driver.core.ResultSet; +import compbio.beans.DateBean; +import compbio.beans.JobBean; +import compbio.beans.ProteinBean; +import compbio.beans.Total; import compbio.engine.JobStatus; public class CassandraReaderOld { diff --git a/datadb/compbio/cassandra/DataBase.java b/datadb/compbio/cassandra/DataBase.java index 57063ec..7c3cc82 100644 --- a/datadb/compbio/cassandra/DataBase.java +++ b/datadb/compbio/cassandra/DataBase.java @@ -4,6 +4,9 @@ import java.util.List; import java.util.ArrayList; import java.util.Collections; +import compbio.beans.JobBean; +import compbio.beans.ProteinBean; + public class DataBase { private String date; private int total; // total number of jobs diff --git a/datadb/compbio/cassandra/readers/CassandraReader.java b/datadb/compbio/cassandra/readers/CassandraReader.java new file mode 100644 index 0000000..50db7a0 --- /dev/null +++ b/datadb/compbio/cassandra/readers/CassandraReader.java @@ -0,0 +1,55 @@ +package compbio.cassandra.readers; + +import org.apache.log4j.Logger; + +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.exceptions.QueryExecutionException; +import com.datastax.driver.core.exceptions.QueryValidationException; +import compbio.cassandra.CassandraNativeConnector; + +public class CassandraReader { + private static long earlestDate = 0; + private Session session; + protected static Logger log = Logger.getLogger(CassandraNativeConnector.class); + + public CassandraReader() { + Session inis = CassandraNativeConnector.getSession(); + setSession(inis); + } + + public void setSession(Session s) { + assert s != null; + session = s; + } + + protected ResultSet CassandraQuery(String command) { + try { + ResultSet results = session.execute(command); + return results; + } catch (QueryExecutionException e) { + String mess = "CassandraUserManagerImpl.findAllUsers: query execution exception..."; + System.out.println(mess); + log.error(mess); + log.error(e.getLocalizedMessage(), e.getCause()); + return null; + } catch (QueryValidationException e) { + String mess = "CassandraUserManagerImpl.findAllUsers: query validation exception... Command: " + command; + System.out.println(mess); + log.error(mess); + log.error(e.getLocalizedMessage(), e.getCause()); + return null; + } + + } + + /* + * find the earliest date in the database + */ + public static long earliestDate() { + earlestDate = CassandraNativeConnector.getEarliestDateInDB(); + return earlestDate; + } + + +} diff --git a/datadb/compbio/cassandra/readers/DailyStatisticsReader.java b/datadb/compbio/cassandra/readers/DailyStatisticsReader.java new file mode 100644 index 0000000..718a404 --- /dev/null +++ b/datadb/compbio/cassandra/readers/DailyStatisticsReader.java @@ -0,0 +1,106 @@ +package compbio.cassandra.readers; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; + +import compbio.beans.DateBean; +import compbio.beans.Total; +import compbio.beans.TotalJobsStatisticBean; +import compbio.cassandra.DateFormatter; +import compbio.engine.JobStatus; + +public class DailyStatisticsReader extends CassandraReader { + + public DailyStatisticsReader() { + super(); + } + + /** + * query: total number of jobs for the period from date1 till date2 + * + * @param dateStart + * the first date in the period + * @param dateEnd + * the last date in the period + * + * @return TotalJobsStatisticBean to the controller DailyStatisticsController + **/ + public TotalJobsStatisticBean query(long dateStart, long dateEnd) { + Calendar start = Calendar.getInstance(); + start.setTime(new Date(dateStart)); + Calendar end = Calendar.getInstance(); + end.setTime(new Date(dateEnd)); + TotalJobsStatisticBean query = new TotalJobsStatisticBean(); + Total wholeTotal = new Total(0, 0, 0, 0, 0); + for (Date date = start.getTime(); !start.after(end); start.add(Calendar.DATE, 1), date = start.getTime()) { + ResultSet results = CassandraQuery("SELECT * FROM JobDateInfo WHERE jobday = " + date.getTime() + ";"); + if (results == null) + return null; + if (results.isExhausted()) + continue; + Row therow = results.one(); + Total res = new Total(therow.getLong("Total"), therow.getLong("TotalOK"), therow.getLong("TotalStopped"), + therow.getLong("TotalError"), therow.getLong("TotalTimeOut")); + if (!results.isExhausted()) { + Date dat = new Date(date.getTime()); + log.warn("CassandraReader.ReadDateTable: date row for " + dat.toString() + " (" + date.getTime() + ") duplicated "); + } + query.setDateTotal(DateFormatter.DateLongToString(date.getTime(), DateFormatter.getFormatDDMMYY()), res); + wholeTotal.setTotal(res.getTotal() + wholeTotal.getTotal()); + wholeTotal.setTotalOK(res.getTotalOK() + wholeTotal.getTotalOK()); + wholeTotal.setTotalStopped(res.getTotalStopped() + wholeTotal.getTotalStopped()); + wholeTotal.setTotalError(res.getTotalError() + wholeTotal.getTotalError()); + wholeTotal.setTotalTimeOut(res.getTotalTimeOut() + wholeTotal.getTotalTimeOut()); + } + query.setWholeTotal(wholeTotal); + return query; + } + + /** + * query: jobs and sequence at a date + * + * @param day + * the date in long format + * @param date + * the date in String format + * + * @param status + * final job status + * @return DateBean to the controller DailyStatisticsController + **/ + public DateBean readJobByDay(long day, String date, JobStatus status) { + DateBean res = new DateBean(date); + if (status == JobStatus.OK) { + ResultSet results = CassandraQuery("SELECT JobID, Protein FROM ProteinData WHERE jobtime = " + day + ";"); + if (results == null || results.isExhausted()) + return null; + List rows = results.all(); + for (Row r : rows) { + res.setJobidAndSeq(r.getString("JobID"), r.getString("Protein")); + } + } + else { + ResultSet results = CassandraQuery("SELECT JobID FROM FailLog WHERE jobtime = " + day + " and FinalStatus = '" + status.name() + "';"); + if (results == null || results.isExhausted()) + return null; + List rows = results.all(); + for (Row r : rows) { + String jobid = r.getString("JobID"); + ResultSet results2 = CassandraQuery("SELECT Protein FROM ProteinLog WHERE JobID = '" + jobid + "';"); + if (results2 == null || results2.isExhausted()) + return null; + List jrows = results2.all(); + if (1 == jrows.size()) { + String protein = jrows.get(0).getString("Protein"); + res.setJobidAndSeq(jobid, protein); + } + } + } + return res; + } + +} diff --git a/datadb/compbio/cassandra/readers/IpReader.java b/datadb/compbio/cassandra/readers/IpReader.java new file mode 100644 index 0000000..2928b70 --- /dev/null +++ b/datadb/compbio/cassandra/readers/IpReader.java @@ -0,0 +1,42 @@ +package compbio.cassandra.readers; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; + +import compbio.beans.UserBean; + +public class IpReader extends CassandraReader { + + public IpReader() { + super(); + } + + /** + * query jobs by ip + * + * @param ip + * + * @return UserBean to the controller IPDataController + **/ + public UserBean readIp(String ip) { + ResultSet results = CassandraQuery("SELECT JobID, Protein, FinalStatus, DataBegin FROM ProteinLog WHERE ip = '" + ip + "';"); + if (results.isExhausted()) + return null; + List rows = results.all(); + Map res = new HashMap(); + for (Row r : rows) { + if (r.getString("FinalStatus").equals("OK")) { + String date = r.getString("DataBegin"); + res.put(r.getString("JobID"), new String[] { date.substring(0, date.indexOf(":")), r.getString("Protein") }); + } + } + UserBean query = new UserBean(ip); + query.setMainInfo(res); + return query; + } + +} diff --git a/datadb/compbio/cassandra/readers/JobReader.java b/datadb/compbio/cassandra/readers/JobReader.java new file mode 100644 index 0000000..6d39b04 --- /dev/null +++ b/datadb/compbio/cassandra/readers/JobReader.java @@ -0,0 +1,35 @@ +package compbio.cassandra.readers; + +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; + +import compbio.beans.JobBean; + +public class JobReader extends CassandraReader { + + public JobReader() { + super(); + } + + /** + * query jobs log info + * + * @param jobid + * + * @return JobBean to the controller JobController + * + **/ + public JobBean readJobLog(String jobid) { + ResultSet results = CassandraQuery("SELECT * FROM ProteinLog WHERE JobID = '" + jobid + "';"); + if (results.isExhausted()) + return null; + Row row = results.one(); + ResultSet results1 = CassandraQuery("SELECT * FROM ProteinRow WHERE JobID = '" + jobid + "' ALLOW FILTERING;"); + if (results1.isExhausted()) + return null; + Row row1 = results1.one(); + JobBean res = new JobBean(row.getString("Protein"), row.getString("JobID"), row.getString("DataBegin"), row.getString("DataEnd"), + row.getString("ip"), row1.getMap("Predictions", String.class, String.class)); + return res; + } +} diff --git a/datadb/compbio/cassandra/readers/PredictionReader.java b/datadb/compbio/cassandra/readers/PredictionReader.java new file mode 100644 index 0000000..b7613a3 --- /dev/null +++ b/datadb/compbio/cassandra/readers/PredictionReader.java @@ -0,0 +1,53 @@ +package compbio.cassandra.readers; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; + +public class PredictionReader extends CassandraReader { + + public PredictionReader() { + super(); + } + + /** + * query: protein feature + * + * @param feature + * a feature of secondary structure: Helix or Beta Sheet + * + * @param percent + * fraction the feature in the protein + * + * @return Map to the controller SSFeaturesController + * + **/ + public Map readProteinsPrediction(String feature, int percent) { + ResultSet results = CassandraQuery("SELECT * FROM ProteinRow;"); + if (results.isExhausted()) + return null; + List rows = results.all(); + Map query = new HashMap(); + for (Row r : rows) { + String prot = r.getString("Protein"); + String prediction = findJnetpred(r.getMap("Predictions", String.class, String.class)); + if (prot != null || prediction != null) { + if (prediction.replaceAll("[^"+feature+"]", "").length() > prediction.length() * percent / 100) { + query.put(prot, prediction); + } + } + } + return query; + } + + private String findJnetpred (Map pred) { + if (pred != null) { + if (pred.containsKey("jnetpred")) + return pred.get("jnetpred"); + } + return null; + } +} diff --git a/datadb/compbio/cassandra/readers/ProteoDAO.java b/datadb/compbio/cassandra/readers/ProteoDAO.java new file mode 100644 index 0000000..0b6f689 --- /dev/null +++ b/datadb/compbio/cassandra/readers/ProteoDAO.java @@ -0,0 +1,10 @@ +package compbio.cassandra.readers; + + +public interface ProteoDAO { + + E query(long dateStart, long dateEnd); + + + +} diff --git a/datadb/compbio/cassandra/readers/ReaderByCounter.java b/datadb/compbio/cassandra/readers/ReaderByCounter.java new file mode 100644 index 0000000..9a2bd5e --- /dev/null +++ b/datadb/compbio/cassandra/readers/ReaderByCounter.java @@ -0,0 +1,84 @@ +package compbio.cassandra.readers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; + +import compbio.beans.TotalByCounterBean; + +public class ReaderByCounter extends CassandraReader{ + + public ReaderByCounter() { + super(); + } + + + + /** + * query protein sequences with number of jobs + * + * @param minimalcounter + * + * @return List to the controller SequenceController + * + **/ + public List readProteinByCounter(int minimalcounter) { + ResultSet results = CassandraQuery("SELECT Protein, JobID FROM ProteinRow;"); + return QueryByCounter(results, "Protein", minimalcounter); + } + + /** + * query ip with number of jobs + * + * @param minimalcounter + * + * @return List to the controller IPDataController + * + **/ + public List readIpByCounter(Integer minimalcounter) { + ResultSet results = CassandraQuery("SELECT JobID, ip FROM ProteinLog;"); + return QueryByCounter(results, "ip", minimalcounter); + } + + + /** + * query number of jobs by counter and parameter: ip or protein + * + * @param results + * cassandra query result + * @param counterParameter + * parameter for a query: ip or proteint + * @param minimalcounter + * + * @return List + * + **/ + public List QueryByCounter(ResultSet results, String counterParameter, int minimalcounter) { + List query = new ArrayList(); + if (results.isExhausted()) + return null; + List rows = results.all(); + Map res = new HashMap(); + for (Row r : rows) { + String parameter = r.getString(counterParameter); + if (res.containsKey(parameter)) + res.put(parameter, res.get(parameter) + 1); + else + res.put(parameter, 1); + } + for (Map.Entry entry : res.entrySet()) { + if (entry.getValue() > minimalcounter) { + TotalByCounterBean bean = new TotalByCounterBean(); + bean.setTotaljobs(entry.getValue()); + bean.setName(entry.getKey()); + query.add(bean); + } + } + return query; + } + +} diff --git a/datadb/compbio/cassandra/readers/SequenceReader.java b/datadb/compbio/cassandra/readers/SequenceReader.java new file mode 100644 index 0000000..244902f --- /dev/null +++ b/datadb/compbio/cassandra/readers/SequenceReader.java @@ -0,0 +1,87 @@ +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; + +public class SequenceReader extends CassandraReader { + + public SequenceReader() { + super(); + } + + /** + * query: protein sequence + * + * @param protIn + * protein sequence or partial of protein sequence + * @param searchtype + * "whole" or "partial" of protein sequence + * + * @return List to the controller SequenceController + * + **/ + public List readProteins(String protIn, String searchtype) { + List query = new ArrayList(); + if (searchtype.equals("whole")) { + ResultSet results = CassandraQuery("SELECT JobID, Predictions FROM ProteinRow WHERE Protein = '" + protIn + "';"); + if (results.isExhausted()) + return null; + List rows = results.all(); + ProteinBean structure = new ProteinBean(protIn, 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 rows = results.all(); + for (Row r : rows) { + String prot = r.getString("Protein"); + if (prot.matches("(.*)" + protIn + "(.*)")) { + ProteinBean structure = new ProteinBean(prot, r.getMap("Predictions", String.class, String.class)); + structure.setJobid(r.getString("JobID")); + query.add(structure); + } + } + } + if (searchtype.equals("partial")) { + for (ProteinBean entry : query) { + entry.setSubProt(CreateSubprotein(entry.getSequence(), protIn)); + } + } + 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 + * + **/ + private static List CreateSubprotein(String protein, String subprot) { + List sub = new ArrayList(); + 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; + } +} diff --git a/server/compbio/controllers/BasicController.java b/server/compbio/controllers/BasicController.java index a714c4d..2a71502 100644 --- a/server/compbio/controllers/BasicController.java +++ b/server/compbio/controllers/BasicController.java @@ -8,8 +8,8 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; -import compbio.cassandra.CassandraReader; import compbio.cassandra.DateFormatter; +import compbio.cassandra.readers.CassandraReader; public class BasicController { final protected SimpleDateFormat formaterDDMMYY = DateFormatter.getFormatDDMMYY(); diff --git a/server/compbio/controllers/DailyStatisticsController.java b/server/compbio/controllers/DailyStatisticsController.java index 72ece7e..75ab67a 100644 --- a/server/compbio/controllers/DailyStatisticsController.java +++ b/server/compbio/controllers/DailyStatisticsController.java @@ -11,11 +11,12 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import compbio.engine.JobStatus; -import compbio.cassandra.CassandraReader; -import compbio.cassandra.DateBean; +import compbio.beans.DateBean; +import compbio.beans.TotalJobsStatisticBean; import compbio.cassandra.DateFormatter; -import compbio.cassandra.TotalJobsStatisticBean; -import compbio.statistic.CassandraRequester; +import compbio.cassandra.readers.CassandraReader; +import compbio.cassandra.readers.DailyStatisticsReader; +import compbio.cassandra.readers.ProteoDAO; /** * @author Alexander Sherstnev @@ -70,7 +71,7 @@ public class DailyStatisticsController extends BasicController { model.put("username", getPrincipalName()); Calendar loccal = Calendar.getInstance(); final long startTime = System.currentTimeMillis(); - CassandraRequester cr = new CassandraRequester(); + DailyStatisticsReader reader = new DailyStatisticsReader(); if (option.equals("AllDates,off")) { date1 = theEaerlistDate; date2 = theCurrentDate; @@ -99,7 +100,7 @@ public class DailyStatisticsController extends BasicController { date2 = DateFormatter.DateLongToString(longDate2, formaterYYMMDD); model.put("date1", date1); model.put("date2", date2); - TotalJobsStatisticBean res = cr.countJobs(date1, date2); + TotalJobsStatisticBean res = reader.query(longDate1, longDate2); model.put("result", res); model.put("ndays", res.getDateTotal().size()); final long endTime = System.currentTimeMillis(); @@ -126,8 +127,9 @@ public class DailyStatisticsController extends BasicController { final long startTime = System.currentTimeMillis(); String realdate; + long thetime = 0; try { - long thetime = formaterYYMMDD.parse(date).getTime(); + thetime = formaterYYMMDD.parse(date).getTime(); if (thetime < 0) { realdate = date; } else { @@ -135,15 +137,16 @@ public class DailyStatisticsController extends BasicController { } } catch (ParseException e) { realdate = date; + thetime = formaterDDMMYY.parse(realdate).getTime(); } - + if (null == JobStatus.getJobStatus(status)) { return "support/Notimplemented"; } - CassandraRequester cr = new CassandraRequester(); + DailyStatisticsReader reader = new DailyStatisticsReader(); // IMPORTANT: input should be suppied in the format: DD/MM/YYYY - DateBean r = cr.readJobByDay(realdate, JobStatus.getJobStatus(status)); + DateBean r = reader.readJobByDay(thetime, realdate, JobStatus.getJobStatus(status)); model.put("results", r); if (r != null) model.put("njobs", r.getJobidAndSeq().size()); diff --git a/server/compbio/controllers/IPDataController.java b/server/compbio/controllers/IPDataController.java index ae3ca75..b01caa7 100644 --- a/server/compbio/controllers/IPDataController.java +++ b/server/compbio/controllers/IPDataController.java @@ -8,8 +8,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; -import compbio.cassandra.TotalByCounterBean; -import compbio.cassandra.UserBean; +import compbio.beans.TotalByCounterBean; +import compbio.beans.UserBean; +import compbio.cassandra.readers.IpReader; +import compbio.cassandra.readers.ReaderByCounter; import compbio.statistic.CassandraRequester; /** @@ -58,8 +60,8 @@ public class IPDataController extends BasicController { } final long startTime = System.currentTimeMillis(); - CassandraRequester cr = new CassandraRequester(); - List r = cr.readIpByCounter(realcounter); + ReaderByCounter reader = new ReaderByCounter(); + List r = reader.readIpByCounter(realcounter); model.put("results", r); model.put("njobs", 0); if (null != r) { @@ -75,8 +77,8 @@ public class IPDataController extends BasicController { public String findIP(@RequestParam("ip") String ip, Map model) { model.put("username", getPrincipalName()); final long startTime = System.currentTimeMillis(); - CassandraRequester cr = new CassandraRequester(); - UserBean r = cr.readIp(ip); + IpReader reader = new IpReader(); + UserBean r = reader.readIp(ip); model.put("results", r); model.put("njobs", 0); if (null != r) { diff --git a/server/compbio/controllers/JobController.java b/server/compbio/controllers/JobController.java index a2b952c..b63af44 100644 --- a/server/compbio/controllers/JobController.java +++ b/server/compbio/controllers/JobController.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam; import compbio.statistic.CassandraRequester; import compbio.cassandra.DataBase; +import compbio.cassandra.readers.JobReader; import compbio.engine.archive.ArchivedJob; /** @@ -89,8 +90,8 @@ public class JobController extends BasicController { public String findJob(@RequestParam("IdJob") String jobid, Map model) { model.put("username", getPrincipalName()); final long startTime = System.currentTimeMillis(); - CassandraRequester cr = new CassandraRequester(); - model.put("result", cr.readJobLog(jobid)); + JobReader reader = new JobReader(); + model.put("result", reader.readJobLog(jobid)); final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); model.put("IdJob", jobid); diff --git a/server/compbio/controllers/SequenceController.java b/server/compbio/controllers/SequenceController.java index df4c987..105ef2f 100644 --- a/server/compbio/controllers/SequenceController.java +++ b/server/compbio/controllers/SequenceController.java @@ -9,8 +9,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; -import compbio.cassandra.ProteinBean; -import compbio.cassandra.TotalByCounterBean; +import compbio.beans.ProteinBean; +import compbio.beans.TotalByCounterBean; +import compbio.cassandra.readers.ReaderByCounter; +import compbio.cassandra.readers.SequenceReader; import compbio.statistic.CassandraRequester; /** @@ -32,6 +34,14 @@ public class SequenceController extends BasicController { */ private final Pattern NONPROTEIN = Pattern.compile("[^ARNDCQEGHILKMFPSTWYV]+", Pattern.CASE_INSENSITIVE); + /** + * form a query page for search protein sequence. The servlet should be + * available for users and admins only. + * + * @param model + * MVC model + * @return link to the JSP query page + */ @RequestMapping(value = "query", method = RequestMethod.GET) public String formSequenceQuery(Map model) { model.put("username", getPrincipalName()); @@ -39,6 +49,14 @@ public class SequenceController extends BasicController { return "query/Sequence"; } + /** + * form a query page for statistics: Protein by job count. The servlet should be + * available for users and admins only. + * + * @param model + * MVC model + * @return link to the JSP query page + */ @RequestMapping(value = "counts/query", method = RequestMethod.GET) public String formCounterQuery(Map model) { model.put("username", getPrincipalName()); @@ -46,6 +64,17 @@ public class SequenceController extends BasicController { return "query/SequenceCounts"; } + /** + * form a report page for search protein sequence. + * + * @param model + * MVC model object + * @param sequence + * protein sequence or part of sequence + * @param searchtype + * defined whether the whole sequence or part of sequence would be searched + * @return link to the report JSP page + */ @RequestMapping(value = "sequence/results", method = RequestMethod.GET) public String findSequence(@RequestParam("sequence") String sequence, @RequestParam("searchtype") String searchtype, Map model) { @@ -70,14 +99,14 @@ public class SequenceController extends BasicController { model.put("searchtype", searchtype); if (0 < trimmedsequence.length()) { - CassandraRequester cr = new CassandraRequester(); - List r = cr.readProteins(trimmedsequence, searchtype); - model.put("results", r); - if (null != r) { + SequenceReader reader = new SequenceReader(); + List result = reader.readProteins(trimmedsequence, searchtype); + model.put("results", result); + if (null != result) { if (searchtype.equals("whole")) - model.put("njobs", r.get(0).getJobid().size()); + model.put("njobs", result.get(0).getJobid().size()); else - model.put("njobs", r.size()); + model.put("njobs", result.size()); } } final long endTime = System.currentTimeMillis(); @@ -85,6 +114,15 @@ public class SequenceController extends BasicController { return "reportProteinSequences"; } + /** + * form a report page for statistics: Protein by job count. + * + * @param model + * MVC model object + * @param counter + * + * @return link to the report JSP page + */ @RequestMapping(value = "counts/results", method = RequestMethod.GET) public String countSequences(@RequestParam("counterJob") String counter, Map model) { model.put("username", getPrincipalName()); @@ -111,8 +149,9 @@ public class SequenceController extends BasicController { return "query/SequenceCounts"; } - CassandraRequester cr = new CassandraRequester(); - List r = cr.readProteinByCounter(realcounter); + ReaderByCounter reader = new ReaderByCounter(); + + List r = reader.readProteinByCounter(realcounter); model.put("results", r); model.put("njobs", 0); if (null != r) { diff --git a/server/compbio/statistic/CassandraRequester.java b/server/compbio/statistic/CassandraRequester.java index 3e5db8a..0d2ffc0 100755 --- a/server/compbio/statistic/CassandraRequester.java +++ b/server/compbio/statistic/CassandraRequester.java @@ -9,17 +9,17 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import compbio.cassandra.DateBean; -import compbio.cassandra.ProteinBean; +import compbio.beans.DateBean; +import compbio.beans.JobBean; +import compbio.beans.ProteinBean; +import compbio.beans.Total; +import compbio.beans.TotalByCounterBean; +import compbio.beans.TotalJobsStatisticBean; +import compbio.beans.UserBean; import compbio.cassandra.CassandraNativeConnector; import compbio.cassandra.CassandraReaderOld; import compbio.cassandra.DataBase; import compbio.cassandra.Pair; -import compbio.cassandra.JobBean; -import compbio.cassandra.Total; -import compbio.cassandra.TotalByCounterBean; -import compbio.cassandra.TotalJobsStatisticBean; -import compbio.cassandra.UserBean; import compbio.engine.JobStatus; public class CassandraRequester { @@ -120,7 +120,7 @@ public class CassandraRequester { /* * query: total number of jobs for the period from date1 till date2 - */ + */ public TotalJobsStatisticBean countJobs(String date1, String date2) { /* if (null == date1) { date1 = "1970/1/1";