diff options
Diffstat (limited to 'openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateUploadManagerImpl.java')
1 files changed, 68 insertions, 10 deletions
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateUploadManagerImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateUploadManagerImpl.java index d7cfe041c2..df280bd20f 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateUploadManagerImpl.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateUploadManagerImpl.java @@ -21,9 +21,13 @@ package org.openecomp.sdcrests.vsp.rest.services; +import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.alreadyInStatusBeingUpdated; import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotCreateLock; import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotFindLock; +import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotFindStatus; import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotUpdateLock; +import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotUpdateStatus; +import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.invalidCompletionStatus; import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.uploadAlreadyFinished; import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspUploadAlreadyInProgress; @@ -58,28 +62,31 @@ public class OrchestrationTemplateCandidateUploadManagerImpl implements Orchestr private static final Logger LOGGER = LoggerFactory.getLogger(OrchestrationTemplateCandidateUploadManagerImpl.class); - private final VspUploadStatusRecordDao uploadManagerDao; + private final VspUploadStatusRecordDao vspUploadStatusRecordDao; private final VspUploadStatusRecordMapper vspUploadStatusRecordMapper; private final VendorSoftwareProductManager vendorSoftwareProductManager; private final Lock startUploadLock; + private final Lock updateStatusLock; @Autowired public OrchestrationTemplateCandidateUploadManagerImpl( - @Qualifier("vsp-upload-status-record-dao-impl") final VspUploadStatusRecordDao uploadManagerDao) { + @Qualifier("vsp-upload-status-record-dao-impl") final VspUploadStatusRecordDao vspUploadStatusRecordDao) { - this.uploadManagerDao = uploadManagerDao; + this.vspUploadStatusRecordDao = vspUploadStatusRecordDao; this.vendorSoftwareProductManager = VspManagerFactory.getInstance().createInterface(); this.vspUploadStatusRecordMapper = new VspUploadStatusRecordMapper(); startUploadLock = new ReentrantLock(); + updateStatusLock = new ReentrantLock(); } //for tests purpose - OrchestrationTemplateCandidateUploadManagerImpl(final VspUploadStatusRecordDao uploadManagerDao, + OrchestrationTemplateCandidateUploadManagerImpl(final VspUploadStatusRecordDao vspUploadStatusRecordDao, final VendorSoftwareProductManager vendorSoftwareProductManager) { - this.uploadManagerDao = uploadManagerDao; + this.vspUploadStatusRecordDao = vspUploadStatusRecordDao; this.vendorSoftwareProductManager = vendorSoftwareProductManager; this.vspUploadStatusRecordMapper = new VspUploadStatusRecordMapper(); startUploadLock = new ReentrantLock(); + updateStatusLock = new ReentrantLock(); } @Override @@ -90,7 +97,7 @@ public class OrchestrationTemplateCandidateUploadManagerImpl implements Orchestr final VspUploadStatusRecord vspUploadStatusRecord; startUploadLock.lock(); try { - final List<VspUploadStatusRecord> uploadInProgressList = uploadManagerDao.findAllInProgress(vspId, vspVersionId); + final List<VspUploadStatusRecord> uploadInProgressList = vspUploadStatusRecordDao.findAllInProgress(vspId, vspVersionId); if (!uploadInProgressList.isEmpty()) { throw vspUploadAlreadyInProgress(vspId, vspVersionId).get(); } @@ -102,7 +109,7 @@ public class OrchestrationTemplateCandidateUploadManagerImpl implements Orchestr vspUploadStatusRecord.setLockId(UUID.randomUUID()); vspUploadStatusRecord.setCreated(new Date()); - uploadManagerDao.create(vspUploadStatusRecord); + vspUploadStatusRecordDao.create(vspUploadStatusRecord); LOGGER.debug("Upload lock '{}' created for VSP id '{}', version '{}'", vspUploadStatusRecord.getLockId(), vspId, vspVersionId); } catch (final CoreException e) { throw e; @@ -116,6 +123,57 @@ public class OrchestrationTemplateCandidateUploadManagerImpl implements Orchestr } @Override + public VspUploadStatusDto putUploadInValidation(final String vspId, final String vspVersionId, final String user) { + return updateToNotFinalStatus(vspId, vspVersionId, VspUploadStatus.VALIDATING, user); + } + + @Override + public VspUploadStatusDto putUploadInProcessing(final String vspId, final String vspVersionId, final String user) { + return updateToNotFinalStatus(vspId, vspVersionId, VspUploadStatus.PROCESSING, user); + } + + private VspUploadStatusDto updateToNotFinalStatus(final String vspId, final String vspVersionId, final VspUploadStatus status, final String user) { + LOGGER.debug("Updating upload status to '{}' for VSP id '{}', version '{}', triggered by user '{}'", status, vspId, vspVersionId, user); + if (status.isCompleteStatus()) { + throw invalidCompletionStatus(status).get(); + } + updateStatusLock.lock(); + try { + final Optional<VspUploadStatusRecord> vspUploadStatusRecordOptional = vspUploadStatusRecordDao.findLatest(vspId, vspVersionId); + if (vspUploadStatusRecordOptional.isEmpty()) { + throw couldNotFindStatus(vspId, vspVersionId).get(); + } + + final VspUploadStatusRecord vspUploadStatusRecord = vspUploadStatusRecordOptional.get(); + final VspUploadStatus currentStatus = vspUploadStatusRecord.getStatus(); + if (currentStatus == status) { + throw alreadyInStatusBeingUpdated(vspId, vspVersionId, status).get(); + } + return updateStatus(vspUploadStatusRecord, status); + } finally { + updateStatusLock.unlock(); + } + } + + private VspUploadStatusDto updateStatus(final VspUploadStatusRecord vspUploadStatusRecord, final VspUploadStatus status) { + final VspUploadStatus currentStatus = vspUploadStatusRecord.getStatus(); + vspUploadStatusRecord.setStatus(status); + vspUploadStatusRecord.setUpdated(new Date()); + + final String vspId = vspUploadStatusRecord.getVspId(); + final String vspVersionId = vspUploadStatusRecord.getVspVersionId(); + try { + vspUploadStatusRecordDao.update(vspUploadStatusRecord); + LOGGER.debug("Upload lock '{}' status updated from '{}' to '{}' for VSP id '{}', version '{}'", + vspUploadStatusRecord.getLockId(), currentStatus, status, vspId, vspVersionId); + } catch (final Exception e) { + throw couldNotUpdateStatus(vspId, vspVersionId, status, e).get(); + } + + return vspUploadStatusRecordMapper.applyMapping(vspUploadStatusRecord, VspUploadStatusDto.class); + } + + @Override public VspUploadStatusDto putUploadAsFinished(final String vspId, final String vspVersionId, final UUID lockId, final VspUploadStatus completionStatus, final String user) { @@ -123,7 +181,7 @@ public class OrchestrationTemplateCandidateUploadManagerImpl implements Orchestr throw OrchestrationTemplateCandidateUploadManagerExceptionSupplier.invalidCompleteStatus(completionStatus).get(); } final Optional<VspUploadStatusRecord> vspUploadStatusOptional = - uploadManagerDao.findByVspIdAndVersionIdAndLockId(vspId, vspVersionId, lockId); + vspUploadStatusRecordDao.findByVspIdAndVersionIdAndLockId(vspId, vspVersionId, lockId); if (vspUploadStatusOptional.isEmpty()) { throw couldNotFindLock(lockId, vspId, vspVersionId).get(); } @@ -138,7 +196,7 @@ public class OrchestrationTemplateCandidateUploadManagerImpl implements Orchestr vspUploadStatusRecord.setIsComplete(true); try { - uploadManagerDao.update(vspUploadStatusRecord); + vspUploadStatusRecordDao.update(vspUploadStatusRecord); LOGGER.debug("Upload complete for VSP '{}', version '{}', lock '{}'", vspUploadStatusRecord.getLockId(), vspUploadStatusRecord.getVspId(), vspUploadStatusRecord.getVspVersionId()); } catch (final Exception e) { @@ -160,7 +218,7 @@ public class OrchestrationTemplateCandidateUploadManagerImpl implements Orchestr public Optional<VspUploadStatusDto> findLatestStatus(final String vspId, final String vspVersionId, final String user) { checkVspExists(vspId, vspVersionId); - final Optional<VspUploadStatusRecord> vspUploadStatus = uploadManagerDao.findLatest(vspId, vspVersionId); + final Optional<VspUploadStatusRecord> vspUploadStatus = vspUploadStatusRecordDao.findLatest(vspId, vspVersionId); if (vspUploadStatus.isEmpty()) { return Optional.empty(); } |