11package org .labkey .sequenceanalysis ;
22
3+ import org .labkey .api .data .CompareType ;
4+ import org .labkey .api .data .SimpleFilter ;
5+ import org .labkey .api .data .Sort ;
6+ import org .labkey .api .data .TableSelector ;
37import org .labkey .api .data .Transient ;
48import org .labkey .api .exp .api .ExpData ;
59import org .labkey .api .exp .api .ExperimentService ;
610import org .labkey .api .pipeline .PipelineJobService ;
11+ import org .labkey .api .query .FieldKey ;
712import org .labkey .api .sequenceanalysis .model .ReadData ;
13+ import org .labkey .api .util .PageFlowUtil ;
814
915import java .io .File ;
1016import java .util .Date ;
1117import java .util .HashMap ;
18+ import java .util .List ;
1219import java .util .Map ;
1320
1421/**
@@ -32,6 +39,7 @@ public class ReadDataImpl implements ReadData
3239 private Integer _runId ;
3340 private boolean _archived = false ;
3441 private String sra_accession ;
42+ private Integer _totalReads ;
3543
3644 private Map <Integer , File > _cachedFiles = new HashMap <>();
3745
@@ -197,6 +205,44 @@ public void setFile(File f, int fileIdx)
197205 _cachedFiles .put (fileIdx , f );
198206 }
199207
208+ @ Override
209+ public Integer getTotalReads ()
210+ {
211+ if (getFileId1 () == null )
212+ {
213+ return null ;
214+ }
215+
216+ if (_totalReads == null )
217+ {
218+ if (PipelineJobService .get ().getLocationType () != PipelineJobService .LocationType .WebServer )
219+ {
220+ throw new IllegalStateException ("Cannot call getTotalReads() on the remote server unless this value has been cached" );
221+ }
222+
223+ SimpleFilter filter = new SimpleFilter (FieldKey .fromString ("dataid" ), getFileId1 ());
224+ filter .addCondition (FieldKey .fromString ("readset" ), getReadset (), CompareType .EQUAL );
225+ filter .addCondition (FieldKey .fromString ("metricvalue" ), "Total Reads" , CompareType .EQUAL );
226+ TableSelector ts = new TableSelector (SequenceAnalysisSchema .getTable (SequenceAnalysisSchema .TABLE_QUALITY_METRICS ), PageFlowUtil .set ("metricvalue" ), filter , new Sort ("-rowid" ));
227+ List <Double > values = ts .getArrayList (Double .class );
228+ if (!values .isEmpty ())
229+ {
230+ _totalReads = values .get (0 ).intValue ();
231+ }
232+ else
233+ {
234+ _totalReads = 0 ;
235+ }
236+ }
237+
238+ return _totalReads ;
239+ }
240+
241+ public void setTotalReads (Integer totalReads )
242+ {
243+ _totalReads = totalReads ;
244+ }
245+
200246 @ Transient
201247 private File getFile (int fileIdx , Integer fileId )
202248 {
@@ -242,6 +288,8 @@ public void cacheForRemoteServer()
242288 getFile1 ();
243289 getFile2 ();
244290 }
291+
292+ getTotalReads ();
245293 }
246294
247295 @ Transient
0 commit comments