Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
/*
* Copyright (c) 2012 LabKey Corporation
*
* Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
*/
var LABKEY = require("labkey");

var triggerHelper = new org.labkey.sequenceanalysis.query.SequenceTriggerHelper(LABKEY.Security.currentUser.id, LABKEY.Security.currentContainer.id);

function beforeDelete(row, errors){
if (!this.extraContext.deleteFromServer){
errors._form = 'You cannot directly delete readsets. To delete these records, use the delete button above the readset grid.';
}
}

function afterInsert(row, errors) {
if (row.sraAccessions) {
triggerHelper.createReaddataForSra(row.rowid, row.sraAccessions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import org.biojava.nbio.core.sequence.transcription.TranscriptionEngine;
import org.junit.Assert;
import org.junit.Test;
import org.labkey.api.assay.AssayFileWriter;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerManager;
import org.labkey.api.data.SimpleFilter;
import org.labkey.api.data.Table;
import org.labkey.api.data.TableInfo;
import org.labkey.api.data.TableSelector;
import org.labkey.api.exp.api.DataType;
Expand All @@ -28,12 +30,19 @@
import org.labkey.api.security.User;
import org.labkey.api.security.UserManager;
import org.labkey.api.sequenceanalysis.RefNtSequenceModel;
import org.labkey.api.util.FileUtil;
import org.labkey.api.util.Path;
import org.labkey.sequenceanalysis.ReadDataImpl;
import org.labkey.sequenceanalysis.SequenceAnalysisSchema;
import org.labkey.sequenceanalysis.SequenceAnalysisServiceImpl;
import org.labkey.sequenceanalysis.SequenceReadsetImpl;
import org.labkey.vfs.FileLike;

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -254,4 +263,64 @@ public int createExpData(String relPath) {

return d.getRowId();
}

public void createReaddataForSra(int readsetId, String sraAccessions)
{
SequenceReadsetImpl rs = SequenceAnalysisServiceImpl.get().getReadset(readsetId, _user);
if (rs == null)
{
throw new IllegalArgumentException("Unable to find readset: " + readsetId);
}

TableInfo rd = SequenceAnalysisSchema.getTable(SequenceAnalysisSchema.TABLE_READ_DATA);

String[] tokens = StringUtils.split(sraAccessions, ",");
for (String token : tokens)
{
if (rs.getReadData() != null && !rs.getReadData().isEmpty())
{
throw new IllegalArgumentException("Did not expect readset to have existing readdata: " + rs.getReadsetId());
}

// Create new:
ReadDataImpl rd1 = new ReadDataImpl();
rd1.setReadset(readsetId);
rd1.setContainer(rs.getContainer());
rd1.setCreated(new Date());
rd1.setModified(new Date());
rd1.setCreatedBy(_user.getUserId());
rd1.setModifiedBy(_user.getUserId());
rd1.setSra_accession(token);
rd1.setArchived(true);

// NOTE: this is a fragile assumption. We might need to eventually query SRA to figure out whether data is paired:
Container c = ContainerManager.getForId(rs.getContainer());
PipeRoot pr = PipelineService.get().findPipelineRoot(c);
if (pr == null)
{
throw new IllegalStateException("Unable to find pipeline root for: " + c.getPath());
}

String folderName = "SequenceImport_" + FileUtil.getTimestamp();
FileLike outDir = AssayFileWriter.findUniqueFileName(folderName, pr.getRootFileLike());

FileLike expectedFile1 = FileUtil.appendPath(outDir, Path.parse(token + "_1.fastq.gz"));
ExpData exp1 = ExperimentService.get().createData(c, new DataType("Data"));
exp1.setDataFileURI(expectedFile1.toURI());
exp1.setContainer(c);
exp1.setName(expectedFile1.getName());
exp1.save(_user);
rd1.setFileId1(exp1.getRowId());

FileLike expectedFile2 = FileUtil.appendPath(outDir, Path.parse(token + "_2.fastq.gz"));
ExpData exp2 = ExperimentService.get().createData(c, new DataType("Data"));
exp2.setDataFileURI(expectedFile2.toURI());
exp2.setContainer(c);
exp2.setName(expectedFile2.getName());
exp2.save(_user);
rd1.setFileId2(exp2.getRowId());

Table.insert(_user, rd, rd1);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,44 @@ private void importReadsetMetadata()
log("verifying readset count correct");
waitForText("Sequence Readsets");
waitForElement(LabModuleHelper.getNavPanelItem("Sequence Readsets:", _readsetCt.toString()));

// Repeat, adding SRA accessions:
goToProjectHome();
waitAndClick(Locator.linkWithText("Plan Sequence Run (Create Readsets)"));
new Window.WindowFinder(getDriver()).withTitle("Create Readsets").waitFor();
waitAndClickAndWait(Ext4Helper.Locators.ext4Button("Submit"));

_helper.waitForField("Sample Id", WAIT_FOR_PAGE);
_ext4Helper.clickTabContainingText("Import Spreadsheet");
waitForText("Copy/Paste Data");

setFormElementJS(Locator.name("text"), getIlluminaSRANames());

waitAndClick(Ext4Helper.Locators.ext4Button("Upload"));
new Window.WindowFinder(getDriver()).withTitle("Success").waitFor();
_readsetCt += 3;
assertTextPresent("Success!");
waitAndClickAndWait(Ext4Helper.Locators.ext4Button("OK"));

// This is scoped to this workbook:
log("verifying readset count correct");
waitForText("Sequence Readsets");
waitAndClickAndWait(LabModuleHelper.getNavPanelItem("Sequence Readsets:", "3"));

DataRegionTable.DataRegion(getDriver()).withName("query").waitFor();

//verify CSV file creation
DataRegionTable.DataRegion(getDriver()).find().goToView("SRA Info");
DataRegionTable dr = DataRegionTable.DataRegion(getDriver()).withName("query").waitFor();
waitForElement(Locator.tagContainingText("a", "SRA0"));
waitForElement(Locator.tagContainingText("a", "SRA1"));
waitForElement(Locator.tagContainingText("a", "SRA2"));

dr.checkAllOnPage();
dr.clickHeaderButtonAndWait("Delete");
clickButton("OK");

_readsetCt -= 3;
}

/**
Expand Down Expand Up @@ -320,6 +358,18 @@ private String getIlluminaNames()
return sb.toString();
}

private String getIlluminaSRANames()
{
StringBuilder sb = new StringBuilder("Name\tPlatform\tsraAccessions\n");
int i = 0;
while (i < 3)
{
sb.append("IlluminaSRA" + (i + 1) + "\tILLUMINA\tSRA" + i + "\n");
i++;
}
return sb.toString();
}

/**
* This test will kick off a pipeline import using the illumina pipeline. Verification of the result
* is performed by readsetFeaturesTest()
Expand Down