diff options
Diffstat (limited to 'workflow-designer-be/src/main/java/org/onap/sdc/workflow/services')
10 files changed, 193 insertions, 42 deletions
diff --git a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowVersionManager.java b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowVersionManager.java index b288b287..fc60b27a 100644 --- a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowVersionManager.java +++ b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowVersionManager.java @@ -1,16 +1,25 @@ package org.onap.sdc.workflow.services; import java.util.Collection; -import org.openecomp.sdc.versioning.dao.types.Version; +import org.onap.sdc.workflow.api.types.VersionRequestDto; +import org.onap.sdc.workflow.persistence.types.WorkflowVersion; +import org.onap.sdc.workflow.persistence.types.ArtifactEntity; + public interface WorkflowVersionManager { - Collection<Version> list(String id); + Collection<WorkflowVersion> list(String workflowId); + + WorkflowVersion get(String workflowId,String versionId); + + WorkflowVersion create(String workflowId, VersionRequestDto versionRequest); + + void update(String id,WorkflowVersion version); - Version get(String id, Version version); + void uploadArtifact(String workflowId,WorkflowVersion version, MultipartFile artifact); - Version create(String id, Version version); + ArtifactEntity getArtifact(String workflowId,WorkflowVersion version); - void update(String id,Version version); + void deleteArtifact(String workflowId,WorkflowVersion version); } diff --git a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/CreateVersionException.java b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/CreateVersionException.java new file mode 100644 index 00000000..cadabb4c --- /dev/null +++ b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/CreateVersionException.java @@ -0,0 +1,9 @@ +package org.onap.sdc.workflow.services.exceptions; + +public class CreateVersionException extends RuntimeException { + + public CreateVersionException(String workflowId, String version) { + super(String.format("Error creating new version for workflow with id %s. There is already a draft version %s", + workflowId, version)); + } +} diff --git a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/EntityNotFoundException.java b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/EntityNotFoundException.java new file mode 100644 index 00000000..1ed3df5a --- /dev/null +++ b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/EntityNotFoundException.java @@ -0,0 +1,8 @@ +package org.onap.sdc.workflow.services.exceptions; + +public class EntityNotFoundException extends RuntimeException { + + public EntityNotFoundException(String message) { + super(message); + } +} diff --git a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidArtifactException.java b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidArtifactException.java new file mode 100644 index 00000000..89c5fd5f --- /dev/null +++ b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidArtifactException.java @@ -0,0 +1,8 @@ +package org.onap.sdc.workflow.services.exceptions; + +public class InvalidArtifactException extends RuntimeException { + + public InvalidArtifactException(String message) { + super("Invalid artifact file can not be processed. Error: " + message); + } +} diff --git a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionModificationException.java b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionModificationException.java new file mode 100644 index 00000000..dc7d62fd --- /dev/null +++ b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionModificationException.java @@ -0,0 +1,9 @@ +package org.onap.sdc.workflow.services.exceptions; + +public class VersionModificationException extends RuntimeException { + + public VersionModificationException(String workflowId, String version) { + super(String.format("Error while trying to modify version for workflow id %s. " + + "Version %s is Certified and can not be edited", workflowId, version)); + } +} diff --git a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionNotFoundException.java b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionNotFoundException.java deleted file mode 100644 index 3bf86ad1..00000000 --- a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionNotFoundException.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.onap.sdc.workflow.services.exceptions; - -public class VersionNotFoundException extends RuntimeException { - - public VersionNotFoundException(String workflowId, String versioId) { - super(String.format("version with id '%s' does not exist for workflow with id %s",versioId,workflowId)); - } -} diff --git a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/WorkflowNotFoundException.java b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/WorkflowNotFoundException.java deleted file mode 100644 index 13c8021f..00000000 --- a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/WorkflowNotFoundException.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.onap.sdc.workflow.services.exceptions; - -public class WorkflowNotFoundException extends RuntimeException { - - public WorkflowNotFoundException(String workflowId) { - super(String.format("Workflow with id '%s' does not exist", workflowId)); - } -} diff --git a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImpl.java b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImpl.java index 8bb5f709..cf1a7e18 100644 --- a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImpl.java +++ b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImpl.java @@ -3,11 +3,11 @@ package org.onap.sdc.workflow.services.impl; import java.util.Collection; import java.util.function.Predicate; import java.util.stream.Collectors; +import org.onap.sdc.workflow.services.exceptions.EntityNotFoundException; import org.onap.sdc.workflow.services.mappers.WorkflowMapper; import org.onap.sdc.workflow.persistence.types.Workflow; import org.onap.sdc.workflow.services.UniqueValueService; import org.onap.sdc.workflow.services.WorkflowManager; -import org.onap.sdc.workflow.services.exceptions.WorkflowNotFoundException; import org.openecomp.sdc.versioning.ItemManager; import org.openecomp.sdc.versioning.types.Item; import org.openecomp.sdc.versioning.types.ItemStatus; @@ -19,6 +19,7 @@ import org.springframework.stereotype.Service; public class WorkflowManagerImpl implements WorkflowManager { private static final String WORKFLOW_TYPE = "WORKFLOW"; + private static final String WORKFLOW_NOT_FOUND_ERROR_MSG = "Workflow with id '%s' does not exist"; protected static final Predicate<Item> ITEM_PREDICATE = item -> WORKFLOW_TYPE.equals(item.getType()); private static final String WORKFLOW_NAME_UNIQUE_TYPE = "WORKFLOW_NAME"; private final ItemManager itemManager; @@ -43,7 +44,7 @@ public class WorkflowManagerImpl implements WorkflowManager { public Workflow get(Workflow workflow) { Item retrievedItem = itemManager.get(workflow.getId()); if (retrievedItem == null) { - throw new WorkflowNotFoundException(workflow.getId()); + throw new EntityNotFoundException(String.format(WORKFLOW_NOT_FOUND_ERROR_MSG, workflow.getId())); } return this.workflowMapper.itemToWorkflow(retrievedItem); } @@ -63,7 +64,7 @@ public class WorkflowManagerImpl implements WorkflowManager { public void update(Workflow workflow) { Item retrievedItem = itemManager.get(workflow.getId()); if (retrievedItem == null) { - throw new WorkflowNotFoundException(workflow.getId()); + throw new EntityNotFoundException(String.format(WORKFLOW_NOT_FOUND_ERROR_MSG, workflow.getId())); } uniqueValueService.updateUniqueValue(WORKFLOW_NAME_UNIQUE_TYPE, retrievedItem.getName(), workflow.getName()); 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 b0a14fd6..99b64c7f 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 @@ -1,57 +1,165 @@ package org.onap.sdc.workflow.services.impl; +import static org.openecomp.sdc.versioning.dao.types.VersionStatus.Certified; + +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 java.util.stream.Stream; +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.VersionStatus; +import org.onap.sdc.workflow.persistence.types.WorkflowVersion; import org.onap.sdc.workflow.services.WorkflowVersionManager; -import org.onap.sdc.workflow.services.exceptions.VersionNotFoundException; +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.VersionModificationException; +import org.onap.sdc.workflow.services.mappers.VersionMapper; import org.openecomp.sdc.versioning.VersioningManager; import org.openecomp.sdc.versioning.dao.types.Version; import org.openecomp.sdc.versioning.types.VersionCreationMethod; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; @Service("workflowVersionManager") -public class WorkflowVersionManagerImpl implements WorkflowVersionManager { +public class WorkflowVersionManagerImpl implements WorkflowVersionManager { private final VersioningManager versioningManager; + private final ArtifactRepository artifactRepository; + private VersionMapper versionMapper; + @Autowired - public WorkflowVersionManagerImpl(VersioningManager versioningManager) { + public WorkflowVersionManagerImpl(VersioningManager versioningManager, ArtifactRepository artifactRepository, + VersionMapper versionMapper) { this.versioningManager = versioningManager; + this.artifactRepository = artifactRepository; + this.versionMapper = versionMapper; } @Override - public Collection<Version> list(String id) { - return versioningManager.list(id); + public Collection<WorkflowVersion> list(String workflowId) { + + return versioningManager.list(workflowId).stream() + .map(version -> versionMapper.versionToWorkflowVersion(version)) + .collect(Collectors.toList()); } @Override - public Version get(String id,Version version) { + public WorkflowVersion get(String workflowId, String versionId) { + Version version = new Version(versionId); try { - return versioningManager.get(id, version); - } catch (Exception e){ - throw new VersionNotFoundException(id,version.getId()); + 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)); + } + } + + @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()); + } + } + + Version version = new Version(); + version.setDescription(versionRequest.getDescription()); + version.setBaseId(versionRequest.getBaseVersionId()); + Version createdVersion = versioningManager.create(workflowId, version, VersionCreationMethod.major); + + if (versions.isEmpty()){ + artifactRepository.createStructure(workflowId, createdVersion.getId()); + } + + 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 id, WorkflowVersion version) { + + Version versionToUpdate = mapVersionInfo(id, version); + versioningManager.updateVersion(id, versionToUpdate); + versioningManager.publish(id, versionToUpdate, "Update version"); + } + + + @Override + public void uploadArtifact(String workflowId, WorkflowVersion version, MultipartFile artifact) { + WorkflowVersion retrievedVersion = get(workflowId, version.getId()); + if (VersionStatus.Certified.equals(retrievedVersion.getStatus())) { + throw new VersionModificationException(workflowId, version.getId()); + } + + 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"); + + } catch (IOException e) { + throw new InvalidArtifactException(e.getMessage()); } } @Override - public Version create(String id, Version version) { - if (Objects.nonNull(getLatestVersion(id))) - version.setBaseId(getLatestVersion(id).getId()); - return versioningManager.create(id,version, VersionCreationMethod.major); + public ArtifactEntity getArtifact(String workflowId, WorkflowVersion version) { + WorkflowVersion retrievedVersion = get(workflowId, version.getId()); + Optional<ArtifactEntity> artifactOptional = artifactRepository.get(workflowId, retrievedVersion.getId()); + if (!artifactOptional.isPresent()) { + throw new EntityNotFoundException( + String.format("Artifact for workflow id %S version id %S was not found", workflowId, + version.getId())); + } + return artifactOptional.get(); } @Override - public void update(String id,Version version) { + public void deleteArtifact(String workflowId, WorkflowVersion version) { + WorkflowVersion retrievedVersion = get(workflowId, version.getId()); + if (VersionStatus.Certified.equals(retrievedVersion.getStatus())) { + throw new VersionModificationException(workflowId, version.getId()); + } + + artifactRepository.delete(workflowId, version.getId()); + } - versioningManager.updateVersion(id,version); + private boolean isFirstVersionCreation(String id, Version createdVersion) { + return Objects.isNull(createdVersion.getBaseId()) && versioningManager.list(id).size() == 1; } - protected Version getLatestVersion(String itemId) { - List<Version> list = versioningManager.list(itemId); - return list.stream().max(Version::compareTo).orElse(null); + 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; } + } diff --git a/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/mappers/VersionMapper.java b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/mappers/VersionMapper.java new file mode 100644 index 00000000..4f894f7f --- /dev/null +++ b/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/mappers/VersionMapper.java @@ -0,0 +1,15 @@ +package org.onap.sdc.workflow.services.mappers; + +import org.mapstruct.InheritInverseConfiguration; +import org.mapstruct.Mapper; +import org.onap.sdc.workflow.persistence.types.WorkflowVersion; +import org.openecomp.sdc.versioning.dao.types.Version; + +@Mapper(componentModel = "spring") +public interface VersionMapper { + + WorkflowVersion versionToWorkflowVersion(Version version); + + @InheritInverseConfiguration + Version workflowVersionToVersion(WorkflowVersion workflowVersion); +} |