Search in sources :

Example 6 with AlreadyExistException

use of com.odysseusinc.arachne.portal.exception.AlreadyExistException in project ArachneCentralAPI by OHDSI.

the class AnalysisFilesSavingServiceImpl method saveFiles.

@PreAuthorize("hasPermission(#analysis, " + "T(com.odysseusinc.arachne.portal.security.ArachnePermission).UPLOAD_ANALYSIS_FILES)")
protected List<AnalysisFile> saveFiles(List<MultipartFile> multipartFiles, IUser user, A analysis, DataReference dataReference, BiPredicate<String, CommonAnalysisType> checkFileExecutabilityPredicate) {
    List<MultipartFile> filteredFiles = multipartFiles.stream().filter(file -> !(CommonAnalysisType.COHORT.equals(analysis.getType()) && file.getName().endsWith(OHDSI_JSON_EXT))).filter(file -> !file.getName().startsWith(ANALYSIS_INFO_FILE_DESCRIPTION)).collect(Collectors.toList());
    List<AnalysisFile> savedFiles = new ArrayList<>();
    List<String> errorFileMessages = new ArrayList<>();
    for (MultipartFile file : filteredFiles) {
        try {
            final boolean isExecutable = checkFileExecutabilityPredicate.test(file.getOriginalFilename(), analysis.getType());
            savedFiles.add(saveFile(file, user, analysis, file.getName(), isExecutable, dataReference));
        } catch (AlreadyExistException e) {
            errorFileMessages.add(e.getMessage());
        }
    }
    if (!errorFileMessages.isEmpty()) {
        throw new ValidationRuntimeException("Failed to save files", ImmutableMap.of(dataReference.getGuid(), errorFileMessages));
    }
    return savedFiles;
}
Also used : AnalysisHelper(com.odysseusinc.arachne.portal.util.AnalysisHelper) AnalysisArchiveUtils(com.odysseusinc.arachne.commons.utils.AnalysisArchiveUtils) URL(java.net.URL) Date(java.util.Date) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) LoggerFactory(org.slf4j.LoggerFactory) SqlTranslate(org.ohdsi.sql.SqlTranslate) StringUtils(org.apache.commons.lang3.StringUtils) ValidationRuntimeException(com.odysseusinc.arachne.portal.exception.ValidationRuntimeException) OHDSI_SQL_EXT(com.odysseusinc.arachne.commons.utils.CommonFileUtils.OHDSI_SQL_EXT) ByteArrayInputStream(java.io.ByteArrayInputStream) Analysis(com.odysseusinc.arachne.portal.model.Analysis) ApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher) Path(java.nio.file.Path) RestTemplate(org.springframework.web.client.RestTemplate) ImmutableMap(com.google.common.collect.ImmutableMap) AlreadyExistException(com.odysseusinc.arachne.portal.exception.AlreadyExistException) HttpHeaders(org.springframework.http.HttpHeaders) Collection(java.util.Collection) MediaType(org.springframework.http.MediaType) SqlRender(org.ohdsi.sql.SqlRender) CommonAnalysisType(com.odysseusinc.arachne.commons.api.v1.dto.CommonAnalysisType) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) MockMultipartFile(org.springframework.mock.web.MockMultipartFile) IUser(com.odysseusinc.arachne.portal.model.IUser) IOUtils(org.apache.commons.io.IOUtils) CommonFileUtils(com.odysseusinc.arachne.commons.utils.CommonFileUtils) List(java.util.List) HttpEntity(org.springframework.http.HttpEntity) AntivirusJob(com.odysseusinc.arachne.portal.service.impl.antivirus.events.AntivirusJob) AnalysisFilesSavingService(com.odysseusinc.arachne.portal.service.analysis.AnalysisFilesSavingService) NotNull(org.jetbrains.annotations.NotNull) FilenameUtils(org.apache.commons.io.FilenameUtils) ZipOutputStream(java.util.zip.ZipOutputStream) ANALYSIS_INFO_FILE_DESCRIPTION(com.odysseusinc.arachne.commons.utils.CommonFileUtils.ANALYSIS_INFO_FILE_DESCRIPTION) ByteArrayOutputStream(java.io.ByteArrayOutputStream) OHDSI_JSON_EXT(com.odysseusinc.arachne.commons.utils.CommonFileUtils.OHDSI_JSON_EXT) DataReference(com.odysseusinc.arachne.portal.model.DataReference) ArachneSystemRuntimeException(com.odysseusinc.arachne.portal.exception.ArachneSystemRuntimeException) ArrayList(java.util.ArrayList) AntivirusJobEvent(com.odysseusinc.arachne.portal.service.impl.antivirus.events.AntivirusJobEvent) BiPredicate(java.util.function.BiPredicate) IORuntimeException(com.odysseusinc.arachne.portal.exception.IORuntimeException) ZipUtil(com.odysseusinc.arachne.portal.util.ZipUtil) ObjectUtils(org.apache.commons.lang3.ObjectUtils) Service(org.springframework.stereotype.Service) AnalysisFileRepository(com.odysseusinc.arachne.portal.repository.AnalysisFileRepository) AnalysisPreprocessorService(com.odysseusinc.arachne.portal.service.impl.AnalysisPreprocessorService) AnalysisUtils.throwAccessDeniedExceptionIfLocked(com.odysseusinc.arachne.portal.service.analysis.impl.AnalysisUtils.throwAccessDeniedExceptionIfLocked) REPLACE_EXISTING(java.nio.file.StandardCopyOption.REPLACE_EXISTING) UploadFileDTO(com.odysseusinc.arachne.portal.api.v1.dto.UploadFileDTO) Logger(org.slf4j.Logger) DBMSType(com.odysseusinc.arachne.commons.types.DBMSType) Files(java.nio.file.Files) AntivirusJobFileType(com.odysseusinc.arachne.portal.service.impl.antivirus.events.AntivirusJobFileType) HttpMethod(org.springframework.http.HttpMethod) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) AnalysisFile(com.odysseusinc.arachne.portal.model.AnalysisFile) HttpStatus(org.springframework.http.HttpStatus) Paths(java.nio.file.Paths) MultipartFile(org.springframework.web.multipart.MultipartFile) ResponseEntity(org.springframework.http.ResponseEntity) Collections(java.util.Collections) Transactional(org.springframework.transaction.annotation.Transactional) MockMultipartFile(org.springframework.mock.web.MockMultipartFile) MultipartFile(org.springframework.web.multipart.MultipartFile) AnalysisFile(com.odysseusinc.arachne.portal.model.AnalysisFile) ArrayList(java.util.ArrayList) ValidationRuntimeException(com.odysseusinc.arachne.portal.exception.ValidationRuntimeException) AlreadyExistException(com.odysseusinc.arachne.portal.exception.AlreadyExistException) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize)

Example 7 with AlreadyExistException

use of com.odysseusinc.arachne.portal.exception.AlreadyExistException in project ArachneCentralAPI by OHDSI.

the class BaseStudyServiceImpl method addDataSource.

@Override
// ordering annotations is important to check current participants before method invoke
@PreAuthorize("hasPermission(#studyId, 'Study', " + "T(com.odysseusinc.arachne.portal.security.ArachnePermission).INVITE_DATANODE)")
public StudyDataSourceLink addDataSource(IUser createdBy, Long studyId, Long dataSourceId) throws NotExistException, AlreadyExistException {
    T study = studyRepository.getOne(studyId);
    if (study == null) {
        throw new NotExistException("study not exist", Study.class);
    }
    DS dataSource = dataSourceService.getNotDeletedById(dataSourceId);
    if (dataSource == null) {
        throw new NotExistException("dataSource not exist", DataSource.class);
    }
    StudyDataSourceLink studyDataSourceLink = studyDataSourceLinkRepository.findByDataSourceIdAndStudyId(dataSource.getId(), study.getId());
    if (studyDataSourceLink == null) {
        studyDataSourceLink = new StudyDataSourceLink();
    } else if (studyDataSourceLink.getStatus().isPendingOrApproved()) {
        throw new AlreadyExistException();
    }
    studyDataSourceLink.setStudy(study);
    studyDataSourceLink.setDataSource(dataSource);
    studyDataSourceLink.setCreated(new Date());
    studyDataSourceLink.setToken(UUID.randomUUID().toString());
    studyDataSourceLink.setCreatedBy(createdBy);
    studyDataSourceLink.setDeletedAt(null);
    AddDataSourceStrategy<DS> strategy = addDataSourceStrategyFactory.getStrategy(dataSource);
    strategy.addDataSourceToStudy(createdBy, dataSource, studyDataSourceLink);
    return studyDataSourceLink;
}
Also used : StudyDataSourceLink(com.odysseusinc.arachne.portal.model.StudyDataSourceLink) NotExistException(com.odysseusinc.arachne.portal.exception.NotExistException) AlreadyExistException(com.odysseusinc.arachne.portal.exception.AlreadyExistException) Date(java.util.Date) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize)

Example 8 with AlreadyExistException

use of com.odysseusinc.arachne.portal.exception.AlreadyExistException in project ArachneCentralAPI by OHDSI.

the class BaseSubmissionInsightServiceImpl method createSubmissionInsight.

@Override
@PreAuthorize("hasPermission(#submissionId,  'Submission', " + "T(com.odysseusinc.arachne.portal.security.ArachnePermission).EDIT_ANALYSIS)")
public SubmissionInsight createSubmissionInsight(Long submissionId, SubmissionInsight insight) throws AlreadyExistException, NotExistException {
    LOGGER.info(CREATING_INSIGHT_LOG, submissionId);
    final SubmissionInsight submissionInsight = submissionInsightRepository.findOneBySubmissionId(submissionId);
    if (submissionInsight != null) {
        final String message = String.format(INSIGHT_ALREADY_EXISTS_EXCEPTION, submissionId);
        throw new AlreadyExistException(message);
    }
    final List<SubmissionStatus> allowedStatuses = Arrays.asList(EXECUTED_PUBLISHED, FAILED_PUBLISHED);
    final Submission submission = submissionService.getSubmissionByIdAndStatus(submissionId, allowedStatuses);
    throwNotExistExceptionIfNull(submission, submissionId);
    insight.setId(null);
    insight.setCreated(new Date());
    insight.setSubmission(submission);
    final SubmissionInsight savedInsight = submissionInsightRepository.save(insight);
    final List<SubmissionInsightSubmissionFile> submissionInsightSubmissionFiles = submission.getSubmissionGroup().getFiles().stream().map(sf -> new SubmissionInsightSubmissionFile(savedInsight, sf, new CommentTopic())).collect(Collectors.toList());
    submissionInsightSubmissionFileRepository.saveAll(submissionInsightSubmissionFiles);
    final List<ResultFile> resultFiles = submission.getResultFiles();
    resultFiles.forEach(resultFile -> resultFile.setCommentTopic(new CommentTopic()));
    submissionResultFileRepository.saveAll(resultFiles);
    return savedInsight;
}
Also used : Arrays(java.util.Arrays) Date(java.util.Date) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) ResultFile(com.odysseusinc.arachne.portal.model.ResultFile) EntityGraphUtils(com.cosium.spring.data.jpa.entity.graph.domain.EntityGraphUtils) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) EXECUTED_PUBLISHED(com.odysseusinc.arachne.portal.model.SubmissionStatus.EXECUTED_PUBLISHED) Submission(com.odysseusinc.arachne.portal.model.Submission) FAILED_PUBLISHED(com.odysseusinc.arachne.portal.model.SubmissionStatus.FAILED_PUBLISHED) Map(java.util.Map) BigInteger(java.math.BigInteger) Pageable(org.springframework.data.domain.Pageable) Sort(org.springframework.data.domain.Sort) SubmissionInsight(com.odysseusinc.arachne.portal.model.SubmissionInsight) LinkedList(java.util.LinkedList) CommentService(com.odysseusinc.arachne.portal.service.CommentService) CommentTopic(com.odysseusinc.arachne.portal.model.CommentTopic) Logger(org.slf4j.Logger) AlreadyExistException(com.odysseusinc.arachne.portal.exception.AlreadyExistException) SubmissionResultFileRepository(com.odysseusinc.arachne.portal.repository.SubmissionResultFileRepository) Set(java.util.Set) PostAuthorize(org.springframework.security.access.prepost.PostAuthorize) SubmissionInsightSubmissionFile(com.odysseusinc.arachne.portal.model.SubmissionInsightSubmissionFile) Page(org.springframework.data.domain.Page) Collectors(java.util.stream.Collectors) SubmissionInsightRepository(com.odysseusinc.arachne.portal.repository.SubmissionInsightRepository) SubmissionService(com.odysseusinc.arachne.portal.service.submission.SubmissionService) List(java.util.List) NotExistException(com.odysseusinc.arachne.portal.exception.NotExistException) EntityUtils(com.odysseusinc.arachne.portal.util.EntityUtils) Stream(java.util.stream.Stream) SubmissionInsightService(com.odysseusinc.arachne.portal.service.submission.SubmissionInsightService) SubmissionInsightSubmissionFileRepository(com.odysseusinc.arachne.portal.repository.SubmissionInsightSubmissionFileRepository) SubmissionStatus(com.odysseusinc.arachne.portal.model.SubmissionStatus) Submission(com.odysseusinc.arachne.portal.model.Submission) CommentTopic(com.odysseusinc.arachne.portal.model.CommentTopic) SubmissionInsight(com.odysseusinc.arachne.portal.model.SubmissionInsight) ResultFile(com.odysseusinc.arachne.portal.model.ResultFile) Date(java.util.Date) SubmissionStatus(com.odysseusinc.arachne.portal.model.SubmissionStatus) SubmissionInsightSubmissionFile(com.odysseusinc.arachne.portal.model.SubmissionInsightSubmissionFile) AlreadyExistException(com.odysseusinc.arachne.portal.exception.AlreadyExistException) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize)

Example 9 with AlreadyExistException

use of com.odysseusinc.arachne.portal.exception.AlreadyExistException in project ArachneCentralAPI by OHDSI.

the class EstimationPreprocessor method attachRunner.

private void attachRunner(Analysis analysis, File file) {
    try {
        String runnerContent = template.apply(prepareParameters(analysis, file));
        final MultipartFile analysisFile = new MockMultipartFile(ANALYSIS_RUNNER_FILENAME, ANALYSIS_RUNNER_FILENAME, "text/x-r-source", runnerContent.getBytes());
        AnalysisFile createdFile = analysisService.saveFile(analysisFile, analysis.getAuthor(), analysis, ANALYSIS_RUNNER_FILENAME, true, null);
        String fileUuid = createdFile.getUuid();
        // Set via service function to unselect all other files
        analysisService.setIsExecutable(fileUuid);
    } catch (IOException e) {
        LOGGER.error("Failed to generate estimation R execution", e);
        throw new UncheckedIOException(e);
    } catch (AlreadyExistException e) {
        LOGGER.error("Failed to save file", e);
    }
}
Also used : MockMultipartFile(org.springframework.mock.web.MockMultipartFile) MockMultipartFile(org.springframework.mock.web.MockMultipartFile) MultipartFile(org.springframework.web.multipart.MultipartFile) AnalysisFile(com.odysseusinc.arachne.portal.model.AnalysisFile) UncheckedIOException(java.io.UncheckedIOException) IOException(java.io.IOException) UncheckedIOException(java.io.UncheckedIOException) AlreadyExistException(com.odysseusinc.arachne.portal.exception.AlreadyExistException)

Example 10 with AlreadyExistException

use of com.odysseusinc.arachne.portal.exception.AlreadyExistException in project ArachneCentralAPI by OHDSI.

the class BaseAnalysisController method sendUnlockRequest.

@ApiOperation("Send analysis unlock request")
@RequestMapping(value = "/api/v1/analysis-management/analyses/{analysisId}/unlock-request", method = POST)
public JsonResult<FileDTO> sendUnlockRequest(Principal principal, @PathVariable("analysisId") Long analysisId, @RequestBody AnalysisUnlockRequestDTO analysisUnlockRequestDTO) throws NotExistException, PermissionDeniedException, AlreadyExistException {
    JsonResult result;
    final IUser user = getUser(principal);
    final AnalysisUnlockRequest unlockRequest = new AnalysisUnlockRequest();
    unlockRequest.setUser(user);
    unlockRequest.setStatus(AnalysisUnlockRequestStatus.PENDING);
    unlockRequest.setCreated(new Date());
    unlockRequest.setToken(UUID.randomUUID().toString().replace("-", ""));
    unlockRequest.setDescription(analysisUnlockRequestDTO.getDescription());
    try {
        final AnalysisUnlockRequest analysisUnlockRequest = analysisService.sendAnalysisUnlockRequest(analysisId, unlockRequest);
        analysisService.findLeads((T) analysisUnlockRequest.getAnalysis()).forEach(lead -> wsTemplate.convertAndSendToUser(lead.getUsername(), "/topic/invitations", new UpdateNotificationDTO()));
        result = new JsonResult<>(NO_ERROR);
    } catch (AlreadyExistException ex) {
        result = new JsonResult<>(VALIDATION_ERROR);
        result.setErrorMessage("Unlock request for the analysis was already created");
    }
    return result;
}
Also used : UpdateNotificationDTO(com.odysseusinc.arachne.portal.api.v1.dto.UpdateNotificationDTO) PUT(org.springframework.web.bind.annotation.RequestMethod.PUT) GET(org.springframework.web.bind.annotation.RequestMethod.GET) POST(org.springframework.web.bind.annotation.RequestMethod.POST) IUser(com.odysseusinc.arachne.portal.model.IUser) AlreadyExistException(com.odysseusinc.arachne.portal.exception.AlreadyExistException) JsonResult(com.odysseusinc.arachne.commons.api.v1.dto.util.JsonResult) AnalysisUnlockRequest(com.odysseusinc.arachne.portal.model.AnalysisUnlockRequest) Date(java.util.Date) ApiOperation(io.swagger.annotations.ApiOperation) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Aggregations

AlreadyExistException (com.odysseusinc.arachne.portal.exception.AlreadyExistException)10 Date (java.util.Date)6 PreAuthorize (org.springframework.security.access.prepost.PreAuthorize)6 NotExistException (com.odysseusinc.arachne.portal.exception.NotExistException)5 IUser (com.odysseusinc.arachne.portal.model.IUser)5 AnalysisFile (com.odysseusinc.arachne.portal.model.AnalysisFile)3 IOException (java.io.IOException)3 MockMultipartFile (org.springframework.mock.web.MockMultipartFile)3 MultipartFile (org.springframework.web.multipart.MultipartFile)3 UploadFileDTO (com.odysseusinc.arachne.portal.api.v1.dto.UploadFileDTO)2 ValidationRuntimeException (com.odysseusinc.arachne.portal.exception.ValidationRuntimeException)2 Analysis (com.odysseusinc.arachne.portal.model.Analysis)2 AnalysisUnlockRequest (com.odysseusinc.arachne.portal.model.AnalysisUnlockRequest)2 DataNodeUser (com.odysseusinc.arachne.portal.model.DataNodeUser)2 FavouriteStudy (com.odysseusinc.arachne.portal.model.FavouriteStudy)2 Study (com.odysseusinc.arachne.portal.model.Study)2 User (com.odysseusinc.arachne.portal.model.User)2 UserStudy (com.odysseusinc.arachne.portal.model.UserStudy)2 InvitationCollaboratorMailSender (com.odysseusinc.arachne.portal.service.mail.InvitationCollaboratorMailSender)2 List (java.util.List)2