|
13 | 13 | import org.biojava.nbio.core.sequence.transcription.TranscriptionEngine; |
14 | 14 | import org.junit.Assert; |
15 | 15 | import org.junit.Test; |
| 16 | +import org.labkey.api.assay.AssayFileWriter; |
16 | 17 | import org.labkey.api.data.Container; |
17 | 18 | import org.labkey.api.data.ContainerManager; |
18 | 19 | import org.labkey.api.data.SimpleFilter; |
| 20 | +import org.labkey.api.data.Table; |
19 | 21 | import org.labkey.api.data.TableInfo; |
20 | 22 | import org.labkey.api.data.TableSelector; |
21 | 23 | import org.labkey.api.exp.api.DataType; |
|
28 | 30 | import org.labkey.api.security.User; |
29 | 31 | import org.labkey.api.security.UserManager; |
30 | 32 | import org.labkey.api.sequenceanalysis.RefNtSequenceModel; |
| 33 | +import org.labkey.api.util.FileUtil; |
| 34 | +import org.labkey.api.util.Path; |
| 35 | +import org.labkey.sequenceanalysis.ReadDataImpl; |
31 | 36 | import org.labkey.sequenceanalysis.SequenceAnalysisSchema; |
| 37 | +import org.labkey.sequenceanalysis.SequenceAnalysisServiceImpl; |
| 38 | +import org.labkey.sequenceanalysis.SequenceReadsetImpl; |
| 39 | +import org.labkey.vfs.FileLike; |
32 | 40 |
|
33 | 41 | import java.io.File; |
34 | 42 | import java.io.IOException; |
35 | 43 | import java.io.StringWriter; |
36 | 44 | import java.util.Arrays; |
| 45 | +import java.util.Date; |
37 | 46 | import java.util.HashMap; |
38 | 47 | import java.util.List; |
39 | 48 | import java.util.Map; |
@@ -254,4 +263,64 @@ public int createExpData(String relPath) { |
254 | 263 |
|
255 | 264 | return d.getRowId(); |
256 | 265 | } |
| 266 | + |
| 267 | + public void createReaddataForSra(int readsetId, String sraAccessions) |
| 268 | + { |
| 269 | + SequenceReadsetImpl rs = SequenceAnalysisServiceImpl.get().getReadset(readsetId, _user); |
| 270 | + if (rs == null) |
| 271 | + { |
| 272 | + throw new IllegalArgumentException("Unable to find readset: " + readsetId); |
| 273 | + } |
| 274 | + |
| 275 | + TableInfo rd = SequenceAnalysisSchema.getTable(SequenceAnalysisSchema.TABLE_READ_DATA); |
| 276 | + |
| 277 | + String[] tokens = StringUtils.split(sraAccessions, ","); |
| 278 | + for (String token : tokens) |
| 279 | + { |
| 280 | + if (rs.getReadData() != null && !rs.getReadData().isEmpty()) |
| 281 | + { |
| 282 | + throw new IllegalArgumentException("Did not expect readset to have existing readdata: " + rs.getReadsetId()); |
| 283 | + } |
| 284 | + |
| 285 | + // Create new: |
| 286 | + ReadDataImpl rd1 = new ReadDataImpl(); |
| 287 | + rd1.setReadset(readsetId); |
| 288 | + rd1.setContainer(rs.getContainer()); |
| 289 | + rd1.setCreated(new Date()); |
| 290 | + rd1.setModified(new Date()); |
| 291 | + rd1.setCreatedBy(_user.getUserId()); |
| 292 | + rd1.setModifiedBy(_user.getUserId()); |
| 293 | + rd1.setSra_accession(token); |
| 294 | + rd1.setArchived(true); |
| 295 | + |
| 296 | + // NOTE: this is a fragile assumption. We might need to eventually query SRA to figure out whether data is paired: |
| 297 | + Container c = ContainerManager.getForId(rs.getContainer()); |
| 298 | + PipeRoot pr = PipelineService.get().findPipelineRoot(c); |
| 299 | + if (pr == null) |
| 300 | + { |
| 301 | + throw new IllegalStateException("Unable to find pipeline root for: " + c.getPath()); |
| 302 | + } |
| 303 | + |
| 304 | + String folderName = "SequenceImport_" + FileUtil.getTimestamp(); |
| 305 | + FileLike outDir = AssayFileWriter.findUniqueFileName(folderName, pr.getRootFileLike()); |
| 306 | + |
| 307 | + FileLike expectedFile1 = FileUtil.appendPath(outDir, Path.parse(token + "_1.fastq.gz")); |
| 308 | + ExpData exp1 = ExperimentService.get().createData(c, new DataType("Data")); |
| 309 | + exp1.setDataFileURI(expectedFile1.toURI()); |
| 310 | + exp1.setContainer(c); |
| 311 | + exp1.setName(expectedFile1.getName()); |
| 312 | + exp1.save(_user); |
| 313 | + rd1.setFileId1(exp1.getRowId()); |
| 314 | + |
| 315 | + FileLike expectedFile2 = FileUtil.appendPath(outDir, Path.parse(token + "_2.fastq.gz")); |
| 316 | + ExpData exp2 = ExperimentService.get().createData(c, new DataType("Data")); |
| 317 | + exp2.setDataFileURI(expectedFile2.toURI()); |
| 318 | + exp2.setContainer(c); |
| 319 | + exp2.setName(expectedFile2.getName()); |
| 320 | + exp2.save(_user); |
| 321 | + rd1.setFileId2(exp2.getRowId()); |
| 322 | + |
| 323 | + Table.insert(_user, rd, rd1); |
| 324 | + } |
| 325 | + } |
257 | 326 | } |
0 commit comments