diff options
Diffstat (limited to 'workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java')
-rw-r--r-- | workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java | 144 |
1 files changed, 83 insertions, 61 deletions
diff --git a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java index e934efd3..d559f025 100644 --- a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java +++ b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java @@ -6,20 +6,21 @@ import java.io.IOException; import java.io.InputStream; import java.util.Collection; import java.util.List; -import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; import org.onap.sdc.workflow.api.types.VersionRequestDto; import org.onap.sdc.workflow.persistence.ArtifactRepository; import org.onap.sdc.workflow.persistence.types.ArtifactEntity; -import org.onap.sdc.workflow.persistence.types.WorkflowVersionStatus; import org.onap.sdc.workflow.persistence.types.WorkflowVersion; +import org.onap.sdc.workflow.persistence.types.WorkflowVersionState; import org.onap.sdc.workflow.services.WorkflowVersionManager; -import org.onap.sdc.workflow.services.exceptions.CreateVersionException; import org.onap.sdc.workflow.services.exceptions.EntityNotFoundException; import org.onap.sdc.workflow.services.exceptions.InvalidArtifactException; +import org.onap.sdc.workflow.services.exceptions.VersionCreationException; import org.onap.sdc.workflow.services.exceptions.VersionModificationException; +import org.onap.sdc.workflow.services.exceptions.VersionStateModificationException; import org.onap.sdc.workflow.services.impl.mappers.VersionMapper; +import org.onap.sdc.workflow.services.impl.mappers.VersionStateMapper; import org.openecomp.sdc.versioning.VersioningManager; import org.openecomp.sdc.versioning.dao.types.Version; import org.openecomp.sdc.versioning.types.VersionCreationMethod; @@ -31,54 +32,41 @@ import org.springframework.web.multipart.MultipartFile; @Service("workflowVersionManager") public class WorkflowVersionManagerImpl implements WorkflowVersionManager { + private static final String VERSION_NOT_EXIST_MSG = "version with id '%s' does not exist for workflow with id '%s'"; private final VersioningManager versioningManager; private final ArtifactRepository artifactRepository; - private VersionMapper versionMapper; + private final VersionMapper versionMapper; + private final VersionStateMapper versionStateMapper; @Autowired public WorkflowVersionManagerImpl(VersioningManager versioningManager, ArtifactRepository artifactRepository, - VersionMapper versionMapper) { + VersionMapper versionMapper, VersionStateMapper versionStateMapper) { this.versioningManager = versioningManager; this.artifactRepository = artifactRepository; this.versionMapper = versionMapper; + this.versionStateMapper = versionStateMapper; } @Override public Collection<WorkflowVersion> list(String workflowId) { - - return versioningManager.list(workflowId).stream() - .map(version -> versionMapper.versionToWorkflowVersion(version)) + return versioningManager.list(workflowId).stream().map(versionMapper::versionToWorkflowVersion) .collect(Collectors.toList()); } @Override public WorkflowVersion get(String workflowId, String versionId) { - - Version version = new Version(versionId); - try { - return this.versionMapper.versionToWorkflowVersion(versioningManager.get(workflowId, version)); - } catch (Exception e) { - throw new EntityNotFoundException( - String.format("version with id '%s' does not exist for workflow with id %s", version.getId(), - workflowId)); - } + return versionMapper.versionToWorkflowVersion(getVersion(workflowId, versionId)); } @Override public WorkflowVersion create(String workflowId, VersionRequestDto versionRequest) { - List<Version> versions = versioningManager.list(workflowId); if (versionRequest.getBaseVersionId() != null) { - Version baseVersion = findVersion(versions, versionRequest.getBaseVersionId()).orElseThrow( - () -> new EntityNotFoundException( - String.format("version with id '%s' does not exist for workflow with id %s", - versionRequest.getBaseVersionId(), workflowId))); - - if(!Certified.equals(baseVersion.getStatus())){ - throw new CreateVersionException(workflowId, versionRequest.getBaseVersionId()); - } + validateVersionExistAndCertified(workflowId, versions, versionRequest.getBaseVersionId()); + } else if (!versions.isEmpty()) { + throw new VersionCreationException(workflowId); } Version version = new Version(); @@ -86,40 +74,63 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager { version.setBaseId(versionRequest.getBaseVersionId()); Version createdVersion = versioningManager.create(workflowId, version, VersionCreationMethod.major); - if (versions.isEmpty()){ + if (versions.isEmpty()) { // only for first version artifactRepository.createStructure(workflowId, createdVersion.getId()); + versioningManager.publish(workflowId, createdVersion, "Add workflow structure"); } - versioningManager.publish(workflowId, createdVersion, "Initial version"); - return versionMapper.versionToWorkflowVersion(createdVersion); } - private Optional<Version> findVersion(List<Version> versions, String baseVersionId) { - return versions.stream().filter(version -> baseVersionId.equals(version.getId())).findFirst(); + @Override + public void update(String workflowId, WorkflowVersion workflowVersion) { + Version retrievedVersion = getVersion(workflowId, workflowVersion.getId()); + if (WorkflowVersionState.CERTIFIED + .equals(versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus()))) { + throw new VersionModificationException(workflowId, workflowVersion.getId()); + } + + Version version = versionMapper.workflowVersionToVersion(workflowVersion); + version.setName(retrievedVersion.getName()); + version.setStatus(retrievedVersion.getStatus()); + + versioningManager.updateVersion(workflowId, version); + versioningManager.publish(workflowId, version, "Update version"); } @Override - public void update(String id, WorkflowVersion version) { - - Version versionToUpdate = mapVersionInfo(id, version); - versioningManager.updateVersion(id, versionToUpdate); - versioningManager.publish(id, versionToUpdate, "Update version"); + public WorkflowVersionState getState(String workflowId, String versionId) { + return versionStateMapper.versionStatusToWorkflowVersionState(getVersion(workflowId, versionId).getStatus()); } + @Override + public void updateState(String workflowId, String versionId, WorkflowVersionState state) { + Version retrievedVersion = getVersion(workflowId, versionId); + WorkflowVersionState retrievedState = + versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus()); + if (WorkflowVersionState.CERTIFIED.equals(retrievedState) || retrievedState.equals(state)) { + throw new VersionStateModificationException(workflowId, versionId, retrievedState, state); + } + + retrievedVersion.setStatus(versionStateMapper.workflowVersionStateToVersionStatus(state)); + versioningManager.updateVersion(workflowId, retrievedVersion); + versioningManager.publish(workflowId, retrievedVersion, + String.format("Update version state from %s to %s", retrievedState.name(), state.name())); + } @Override - public void uploadArtifact(String workflowId, WorkflowVersion version, MultipartFile artifact) { - WorkflowVersion retrievedVersion = get(workflowId, version.getId()); - if (WorkflowVersionStatus.CERTIFIED.equals(retrievedVersion.getStatus())) { - throw new VersionModificationException(workflowId, version.getId()); + public void uploadArtifact(String workflowId, String versionId, MultipartFile artifact) { + Version retrievedVersion = getVersion(workflowId, versionId); + if (WorkflowVersionState.CERTIFIED + .equals(versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus()))) { + throw new VersionModificationException(workflowId, versionId); } try (InputStream artifactData = artifact.getInputStream()) { ArtifactEntity artifactEntity = new ArtifactEntity(StringUtils.cleanPath(artifact.getOriginalFilename()), artifactData); - artifactRepository.update(workflowId, version.getId(), artifactEntity); - versioningManager.publish(workflowId, versionMapper.workflowVersionToVersion(version), "Update Artifact"); + artifactRepository.update(workflowId, versionId, artifactEntity); + versioningManager.publish(workflowId, new Version(versionId), "Update Artifact"); } catch (IOException e) { throw new InvalidArtifactException(e.getMessage()); @@ -127,38 +138,49 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager { } @Override - public ArtifactEntity getArtifact(String workflowId, WorkflowVersion version) { - WorkflowVersion retrievedVersion = get(workflowId, version.getId()); - Optional<ArtifactEntity> artifactOptional = artifactRepository.get(workflowId, retrievedVersion.getId()); + public ArtifactEntity getArtifact(String workflowId, String versionId) { + getVersion(workflowId, versionId); + Optional<ArtifactEntity> artifactOptional = artifactRepository.get(workflowId, versionId); if (!artifactOptional.isPresent()) { throw new EntityNotFoundException( - String.format("Artifact for workflow id %S version id %S was not found", workflowId, - version.getId())); + String.format("Artifact for workflow id %S version id %S was not found", workflowId, versionId)); } return artifactOptional.get(); } @Override - public void deleteArtifact(String workflowId, WorkflowVersion version) { - WorkflowVersion retrievedVersion = get(workflowId, version.getId()); - if (WorkflowVersionStatus.CERTIFIED.equals(retrievedVersion.getStatus())) { - throw new VersionModificationException(workflowId, version.getId()); + public void deleteArtifact(String workflowId, String versionId) { + WorkflowVersion retrievedVersion = get(workflowId, versionId); + if (WorkflowVersionState.CERTIFIED.equals(retrievedVersion.getState())) { + throw new VersionModificationException(workflowId, versionId); } - artifactRepository.delete(workflowId, version.getId()); + artifactRepository.delete(workflowId, versionId); + versioningManager.publish(workflowId, new Version(versionId), "Delete Artifact"); } - private boolean isFirstVersionCreation(String id, Version createdVersion) { - return Objects.isNull(createdVersion.getBaseId()) && versioningManager.list(id).size() == 1; - } + private void validateVersionExistAndCertified(String workflowId, List<Version> versions, String versionId) { + Version baseVersion = findVersion(versions, versionId).orElseThrow( + () -> new EntityNotFoundException(String.format(VERSION_NOT_EXIST_MSG, versionId, workflowId))); - protected Version mapVersionInfo(String id, WorkflowVersion workflowVersion) { - WorkflowVersion retrievedVersion = get(id, workflowVersion.getId()); - Version version = new Version(workflowVersion.getId()); - version.setBaseId(retrievedVersion.getBaseId()); - version.setName(retrievedVersion.getName()); - return version; + if (!Certified.equals(baseVersion.getStatus())) { + throw new VersionCreationException(workflowId, versionId); + } } + private Version getVersion(String workflowId, String versionId) { + try { + Version version = versioningManager.get(workflowId, new Version(versionId)); + if (version == null) { + throw new EntityNotFoundException(String.format(VERSION_NOT_EXIST_MSG, versionId, workflowId)); + } + return version; + } catch (Exception e) { + throw new EntityNotFoundException(String.format(VERSION_NOT_EXIST_MSG, versionId, workflowId)); + } + } + private static Optional<Version> findVersion(List<Version> versions, String versionId) { + return versions.stream().filter(version -> versionId.equals(version.getId())).findFirst(); + } } |