aboutsummaryrefslogtreecommitdiffstats
path: root/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services
diff options
context:
space:
mode:
Diffstat (limited to 'workflow-designer-be/src/main/java/org/onap/sdc/workflow/services')
-rw-r--r--workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowVersionManager.java19
-rw-r--r--workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/CreateVersionException.java9
-rw-r--r--workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/EntityNotFoundException.java8
-rw-r--r--workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidArtifactException.java8
-rw-r--r--workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionModificationException.java9
-rw-r--r--workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionNotFoundException.java8
-rw-r--r--workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/WorkflowNotFoundException.java8
-rw-r--r--workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImpl.java7
-rw-r--r--workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java144
-rw-r--r--workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/mappers/VersionMapper.java15
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);
+}