use of javax.transaction.Transactional in project irida by phac-nml.
the class AnalysisSubmissionServiceImpl method createSingleSampleSubmission.
/**
* {@inheritDoc}
*/
@Override
@Transactional
@PreAuthorize("hasRole('ROLE_USER')")
public Collection<AnalysisSubmission> createSingleSampleSubmission(IridaWorkflow workflow, Long ref, List<SingleEndSequenceFile> sequenceFiles, List<SequenceFilePair> sequenceFilePairs, Map<String, String> params, IridaWorkflowNamedParameters namedParameters, String name, String analysisDescription, List<Project> projectsToShare, boolean writeResultsToSamples) {
final Collection<AnalysisSubmission> createdSubmissions = new HashSet<AnalysisSubmission>();
// Single end reads
IridaWorkflowDescription description = workflow.getWorkflowDescription();
if (description.acceptsSingleSequenceFiles()) {
final Map<Sample, SingleEndSequenceFile> samplesMap = sequencingObjectService.getUniqueSamplesForSequencingObjects(Sets.newHashSet(sequenceFiles));
for (final Map.Entry<Sample, SingleEndSequenceFile> entry : samplesMap.entrySet()) {
Sample s = entry.getKey();
SingleEndSequenceFile file = entry.getValue();
// Build the analysis submission
AnalysisSubmission.Builder builder = AnalysisSubmission.builder(workflow.getWorkflowIdentifier());
builder.name(name + "_" + s.getSampleName());
builder.inputFiles(ImmutableSet.of(file));
builder.updateSamples(writeResultsToSamples);
builder.priority(AnalysisSubmission.Priority.MEDIUM);
// Add reference file
if (ref != null && description.requiresReference()) {
// Note: This cannot be empty if through the UI if the
// pipeline required a reference file.
ReferenceFile referenceFile = referenceFileRepository.findOne(ref);
builder.referenceFile(referenceFile);
}
if (description.acceptsParameters()) {
if (namedParameters != null) {
builder.withNamedParameters(namedParameters);
} else {
if (!params.isEmpty()) {
// Note: This cannot be empty if through the UI if
// the pipeline required params.
builder.inputParameters(params);
}
}
}
// Create the submission
createdSubmissions.add(create(builder.build()));
}
}
// Paired end reads
if (description.acceptsPairedSequenceFiles()) {
final Map<Sample, SequenceFilePair> samplesMap = sequencingObjectService.getUniqueSamplesForSequencingObjects(Sets.newHashSet(sequenceFilePairs));
for (final Map.Entry<Sample, SequenceFilePair> entry : samplesMap.entrySet()) {
Sample s = entry.getKey();
SequenceFilePair filePair = entry.getValue();
// Build the analysis submission
AnalysisSubmission.Builder builder = AnalysisSubmission.builder(workflow.getWorkflowIdentifier());
builder.name(name + "_" + s.getSampleName());
builder.inputFiles(ImmutableSet.of(filePair));
builder.updateSamples(writeResultsToSamples);
// Add reference file
if (ref != null && description.requiresReference()) {
ReferenceFile referenceFile = referenceFileRepository.findOne(ref);
builder.referenceFile(referenceFile);
}
if (description.acceptsParameters()) {
if (namedParameters != null) {
builder.withNamedParameters(namedParameters);
} else {
if (!params.isEmpty()) {
// Note: This cannot be empty if through the UI if
// the pipeline required params.
builder.inputParameters(params);
}
}
}
// Add description to submission, can be null
builder.analysisDescription(analysisDescription);
// Create the submission
createdSubmissions.add(create(builder.build()));
}
}
// Share with the required projects
for (AnalysisSubmission submission : createdSubmissions) {
for (Project project : projectsToShare) {
pasRepository.save(new ProjectAnalysisSubmissionJoin(project, submission));
}
}
return createdSubmissions;
}
use of javax.transaction.Transactional in project irida by phac-nml.
the class AnalysisSubmissionServiceImpl method delete.
/**
* {@inheritDoc}
*/
@Override
@PreAuthorize("hasRole('ROLE_ADMIN') or hasPermission(#id, 'canUpdateAnalysisSubmission')")
@Transactional
public void delete(Long id) throws EntityNotFoundException {
final AnalysisSubmission submission = read(id);
if (AnalysisCleanedState.NOT_CLEANED.equals(submission.getAnalysisCleanedState())) {
// We're "CLEANING" it right now!
submission.setAnalysisCleanedState(AnalysisCleanedState.CLEANING);
try {
analysisExecutionService.cleanupSubmission(submission).get();
} catch (final ExecutionManagerException e) {
logger.error("Failed to cleanup analysis submission before deletion," + " but proceeding with deletion anyway.", e);
} catch (final Throwable e) {
logger.error("An unexpected exception happened when cleaning the analysis submission," + " but proceeding with deletion anyway.", e);
}
} else {
logger.debug("Not cleaning submission [" + id + "] when deleting, it's already cleaned.");
}
super.delete(id);
}
use of javax.transaction.Transactional in project irida by phac-nml.
the class AnalysisSubmissionServiceImpl method createMultipleSampleSubmission.
/**
* {@inheritDoc}
*/
@Transactional
@PreAuthorize("hasRole('ROLE_USER')")
public AnalysisSubmission createMultipleSampleSubmission(IridaWorkflow workflow, Long ref, List<SingleEndSequenceFile> sequenceFiles, List<SequenceFilePair> sequenceFilePairs, Map<String, String> params, IridaWorkflowNamedParameters namedParameters, String name, String newAnalysisDescription, List<Project> projectsToShare, boolean writeResultsToSamples) {
AnalysisSubmission.Builder builder = AnalysisSubmission.builder(workflow.getWorkflowIdentifier());
builder.name(name);
builder.priority(AnalysisSubmission.Priority.MEDIUM);
builder.updateSamples(writeResultsToSamples);
IridaWorkflowDescription description = workflow.getWorkflowDescription();
// Add reference file
if (ref != null && description.requiresReference()) {
ReferenceFile referenceFile = referenceFileRepository.findOne(ref);
builder.referenceFile(referenceFile);
}
// Add any single end sequencing files.
if (description.acceptsSingleSequenceFiles()) {
if (!sequenceFiles.isEmpty()) {
builder.inputFiles(Sets.newHashSet(sequenceFiles));
}
}
// Add any paired end sequencing files.
if (description.acceptsPairedSequenceFiles()) {
if (!sequenceFilePairs.isEmpty()) {
builder.inputFiles(Sets.newHashSet(sequenceFilePairs));
}
}
if (description.acceptsParameters()) {
if (namedParameters != null) {
builder.withNamedParameters(namedParameters);
} else {
if (!params.isEmpty()) {
// Note: This cannot be empty if through the UI if
// the pipeline required params.
builder.inputParameters(params);
}
}
}
// Add description to submission, can be null
builder.analysisDescription(newAnalysisDescription);
// Create the submission
AnalysisSubmission submission = create(builder.build());
// Share with the required projects
for (Project project : projectsToShare) {
pasRepository.save(new ProjectAnalysisSubmissionJoin(project, submission));
}
return submission;
}
use of javax.transaction.Transactional in project irida by phac-nml.
the class MetadataTemplateServiceImpl method createMetadataTemplateInProject.
/**
* {@inheritDoc}
*/
@Override
@PreAuthorize("hasPermission(#project, 'isProjectOwner')")
@Transactional
public ProjectMetadataTemplateJoin createMetadataTemplateInProject(MetadataTemplate template, Project project) {
template = create(template);
ProjectMetadataTemplateJoin join = pmtRepository.save(new ProjectMetadataTemplateJoin(project, template));
return join;
}
use of javax.transaction.Transactional in project irida by phac-nml.
the class UserGroupServiceImpl method create.
/**
* {@inheritDoc}
*/
@Override
@PreAuthorize("hasRole('ROLE_USER')")
@Transactional
public UserGroup create(UserGroup object) throws EntityExistsException, ConstraintViolationException {
final UserGroup ug = super.create(object);
final Authentication auth = SecurityContextHolder.getContext().getAuthentication();
final User currentUser = userRepository.loadUserByUsername(auth.getName());
addUserToGroup(currentUser, ug, UserGroupRole.GROUP_OWNER);
return ug;
}
Aggregations