use of ca.corefacility.bioinformatics.irida.model.workflow.submission.AnalysisSubmission in project irida by phac-nml.
the class AnalysisController method getOutputFilesInfo.
/**
* For an {@link AnalysisSubmission}, get info about each {@link AnalysisOutputFile}
*
* @param id {@link AnalysisSubmission} id
* @return map of info about each {@link AnalysisOutputFile}
*/
@RequestMapping(value = "/ajax/{id}/outputs", method = RequestMethod.GET)
@ResponseBody
public List<AnalysisOutputFileInfo> getOutputFilesInfo(@PathVariable Long id) {
AnalysisSubmission submission = analysisSubmissionService.read(id);
Analysis analysis = submission.getAnalysis();
Set<String> outputNames = analysis.getAnalysisOutputFileNames();
return outputNames.stream().map((outputName) -> getAnalysisOutputFileInfo(submission, analysis, outputName)).filter(Objects::nonNull).collect(Collectors.toList());
}
use of ca.corefacility.bioinformatics.irida.model.workflow.submission.AnalysisSubmission in project irida by phac-nml.
the class AnalysisController method getOutputFile.
/**
* Read some lines or text from an {@link AnalysisOutputFile}.
*
* @param id {@link AnalysisSubmission} id
* @param fileId {@link AnalysisOutputFile} id
* @param limit Optional limit to number of lines to read from file
* @param start Optional line to start reading from
* @param end Optional line to stop reading at
* @param seek Optional file byte position to seek to and begin reading
* @param chunk Optional number of bytes to read from file
* @param response HTTP response object
* @return JSON with file text or lines as well as information about the file.
*/
@RequestMapping(value = "/ajax/{id}/outputs/{fileId}", method = RequestMethod.GET)
@ResponseBody
public AnalysisOutputFileInfo getOutputFile(@PathVariable Long id, @PathVariable Long fileId, @RequestParam(defaultValue = "100", required = false) Long limit, @RequestParam(required = false) Long start, @RequestParam(required = false) Long end, @RequestParam(defaultValue = "0", required = false) Long seek, @RequestParam(required = false) Long chunk, HttpServletResponse response) {
AnalysisSubmission submission = analysisSubmissionService.read(id);
Analysis analysis = submission.getAnalysis();
final Optional<AnalysisOutputFile> analysisOutputFile = analysis.getAnalysisOutputFiles().stream().filter(x -> Objects.equals(x.getId(), fileId)).findFirst();
if (analysisOutputFile.isPresent()) {
final AnalysisOutputFile aof = analysisOutputFile.get();
final Path aofFile = aof.getFile();
final ToolExecution tool = aof.getCreatedByTool();
final AnalysisOutputFileInfo contents = new AnalysisOutputFileInfo();
contents.setId(aof.getId());
contents.setAnalysisSubmissionId(submission.getId());
contents.setAnalysisId(analysis.getId());
contents.setFilename(aofFile.getFileName().toString());
contents.setFileExt(FileUtilities.getFileExt(aofFile.getFileName().toString()));
contents.setFileSizeBytes(aof.getFile().toFile().length());
contents.setToolName(tool.getToolName());
contents.setToolVersion(tool.getToolVersion());
try {
final File file = aofFile.toFile();
final RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
randomAccessFile.seek(seek);
if (seek == 0) {
if (chunk != null && chunk > 0) {
contents.setText(FileUtilities.readChunk(randomAccessFile, seek, chunk));
contents.setChunk(chunk);
contents.setStartSeek(seek);
} else {
final BufferedReader reader = new BufferedReader(new FileReader(randomAccessFile.getFD()));
final List<String> lines = FileUtilities.readLinesLimit(reader, limit, start, end);
contents.setLines(lines);
contents.setLimit((long) lines.size());
contents.setStart(start);
contents.setEnd(start + lines.size());
}
} else {
if (chunk != null && chunk > 0) {
contents.setText(FileUtilities.readChunk(randomAccessFile, seek, chunk));
contents.setChunk(chunk);
contents.setStartSeek(seek);
} else {
final List<String> lines = FileUtilities.readLinesFromFilePointer(randomAccessFile, limit);
contents.setLines(lines);
contents.setStartSeek(seek);
contents.setStart(start);
contents.setLimit((long) lines.size());
}
}
contents.setFilePointer(randomAccessFile.getFilePointer());
} catch (IOException e) {
logger.error("Could not read output file '" + aof.getId() + "' " + e);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
contents.setError("Could not read output file");
}
return contents;
} else {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return null;
}
}
use of ca.corefacility.bioinformatics.irida.model.workflow.submission.AnalysisSubmission in project irida by phac-nml.
the class AnalysisController method getAjaxDownloadAnalysisSubmissionIndividualFile.
/**
* Download single output files from an {@link AnalysisSubmission}
*
* @param analysisSubmissionId Id for a {@link AnalysisSubmission}
* @param fileId the id of the file to download
* @param response {@link HttpServletResponse}
*/
@RequestMapping(value = "/ajax/download/{analysisSubmissionId}/file/{fileId}")
public void getAjaxDownloadAnalysisSubmissionIndividualFile(@PathVariable Long analysisSubmissionId, @PathVariable Long fileId, HttpServletResponse response) {
AnalysisSubmission analysisSubmission = analysisSubmissionService.read(analysisSubmissionId);
Analysis analysis = analysisSubmission.getAnalysis();
Set<AnalysisOutputFile> files = analysis.getAnalysisOutputFiles();
Optional<AnalysisOutputFile> optFile = files.stream().filter(f -> f.getId().equals(fileId)).findAny();
if (!optFile.isPresent()) {
throw new EntityNotFoundException("Could not find file with id " + fileId);
}
FileUtilities.createSingleFileResponse(response, optFile.get());
}
use of ca.corefacility.bioinformatics.irida.model.workflow.submission.AnalysisSubmission in project irida by phac-nml.
the class AnalysisController method getDetailsPage.
/**
* View details about an individual analysis submission
*
* @param submissionId the ID of the submission
* @param model Model for the view
* @param locale User's locale
* @return name of the details page view
*/
@RequestMapping(value = "/{submissionId}", produces = MediaType.TEXT_HTML_VALUE)
public String getDetailsPage(@PathVariable Long submissionId, Model model, Locale locale) {
logger.trace("reading analysis submission " + submissionId);
AnalysisSubmission submission = analysisSubmissionService.read(submissionId);
model.addAttribute("analysisSubmission", submission);
UUID workflowUUID = submission.getWorkflowId();
logger.trace("Workflow ID is " + workflowUUID);
IridaWorkflow iridaWorkflow;
try {
iridaWorkflow = workflowsService.getIridaWorkflow(workflowUUID);
} catch (IridaWorkflowNotFoundException e) {
logger.error("Error finding workflow, ", e);
throw new EntityNotFoundException("Couldn't find workflow for submission " + submission.getId(), e);
}
// Get the name of the workflow
AnalysisType analysisType = iridaWorkflow.getWorkflowDescription().getAnalysisType();
model.addAttribute("analysisType", analysisType);
String viewName = getViewForAnalysisType(analysisType);
String workflowName = messageSource.getMessage("workflow." + analysisType.toString() + ".title", null, locale);
model.addAttribute("workflowName", workflowName);
model.addAttribute("version", iridaWorkflow.getWorkflowDescription().getVersion());
// Input files
// - Paired
Set<SequenceFilePair> inputFilePairs = sequencingObjectService.getSequencingObjectsOfTypeForAnalysisSubmission(submission, SequenceFilePair.class);
model.addAttribute("paired_end", inputFilePairs);
// Check if user can update analysis
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
model.addAttribute("updatePermission", updateAnalysisPermission.isAllowed(authentication, submission));
if (iridaWorkflow.getWorkflowDescription().requiresReference() && submission.getReferenceFile().isPresent()) {
logger.debug("Adding reference file to page for submission with id [" + submission.getId() + "].");
model.addAttribute("referenceFile", submission.getReferenceFile().get());
} else {
logger.debug("No reference file required for workflow.");
}
/*
* Preview information
*/
try {
if (submission.getAnalysisState().equals(AnalysisState.COMPLETED)) {
if (analysisType.equals(AnalysisType.PHYLOGENOMICS)) {
tree(submission, model);
} else if (analysisType.equals(AnalysisType.SISTR_TYPING)) {
model.addAttribute("sistr", true);
}
}
} catch (IOException e) {
logger.error("Couldn't get preview for analysis", e);
}
return viewName;
}
use of ca.corefacility.bioinformatics.irida.model.workflow.submission.AnalysisSubmission in project irida by phac-nml.
the class AnalysisController method getMetadataTemplatesForAnalysis.
/**
* Get a list of all {@link MetadataTemplate}s for the {@link AnalysisSubmission}
*
* @param submissionId id of the {@link AnalysisSubmission}
* @return a map of {@link MetadataTemplate}s
*/
@RequestMapping("/ajax/{submissionId}/metadata-templates")
@ResponseBody
public Map<String, Object> getMetadataTemplatesForAnalysis(@PathVariable Long submissionId) {
AnalysisSubmission submission = analysisSubmissionService.read(submissionId);
List<Project> projectsUsedInAnalysisSubmission = projectService.getProjectsUsedInAnalysisSubmission(submission);
Set<Long> projectIds = new HashSet<>();
Set<Map<String, Object>> templates = new HashSet<>();
for (Project project : projectsUsedInAnalysisSubmission) {
if (!projectIds.contains(project.getId())) {
projectIds.add(project.getId());
// Get the templates for the project
List<ProjectMetadataTemplateJoin> templateList = metadataTemplateService.getMetadataTemplatesForProject(project);
for (ProjectMetadataTemplateJoin projectMetadataTemplateJoin : templateList) {
MetadataTemplate metadataTemplate = projectMetadataTemplateJoin.getObject();
Map<String, Object> templateMap = ImmutableMap.of("label", metadataTemplate.getLabel(), "id", metadataTemplate.getId());
templates.add(templateMap);
}
}
}
return ImmutableMap.of("templates", templates);
}
Aggregations