From 30ab38f38ebf9b89d7c0e01409d2af6b5f31d46d Mon Sep 17 00:00:00 2001 From: ayalaben Date: Tue, 17 Jul 2018 11:59:29 +0300 Subject: Workflow Version Inputs Outputs Change-Id: Ie09dcd9c7ad5e162ab37513db9f2ad00a0f91388 Issue-ID: SDC-1518 Signed-off-by: ayalaben --- .../sdc/workflow/api/types/VersionRequestDto.java | 4 + .../workflow/persistence/ParameterRepository.java | 23 +++ .../persistence/impl/ArtifactRepositoryImpl.java | 13 +- .../persistence/impl/ParameterRepositoryImpl.java | 183 +++++++++++++++++++++ .../persistence/types/ParameterEntity.java | 12 ++ .../persistence/types/ParameterPropertyName.java | 7 + .../workflow/persistence/types/ParameterRole.java | 8 + .../workflow/persistence/types/ParameterType.java | 9 + .../persistence/types/WorkflowElementType.java | 10 ++ .../persistence/types/WorkflowVersion.java | 3 + .../services/impl/WorkflowVersionManagerImpl.java | 59 ++++++- .../persistence/impl/ArtifactRepositoryTest.java | 72 +++++++- .../persistence/impl/ParameterRepositoryTest.java | 109 ++++++++++++ .../impl/WorkflowVersionManagerImplTest.java | 49 +++--- 14 files changed, 528 insertions(+), 33 deletions(-) create mode 100644 workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ParameterRepository.java create mode 100644 workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryImpl.java create mode 100644 workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterEntity.java create mode 100644 workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterPropertyName.java create mode 100644 workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterRole.java create mode 100644 workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterType.java create mode 100644 workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowElementType.java create mode 100644 workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryTest.java diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionRequestDto.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionRequestDto.java index 92ac3a73..bdd1c4ac 100644 --- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionRequestDto.java +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionRequestDto.java @@ -1,11 +1,15 @@ package org.onap.sdc.workflow.api.types; +import java.util.Collection; import lombok.Data; +import org.onap.sdc.workflow.persistence.types.ParameterEntity; @Data public class VersionRequestDto { private String description; private String baseVersionId; + private Collection inputs; + private Collection outputs; } diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ParameterRepository.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ParameterRepository.java new file mode 100644 index 00000000..d4465006 --- /dev/null +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ParameterRepository.java @@ -0,0 +1,23 @@ +package org.onap.sdc.workflow.persistence; + +import java.util.Collection; +import org.onap.sdc.workflow.persistence.types.ParameterEntity; +import org.onap.sdc.workflow.persistence.types.ParameterRole; + + +public interface ParameterRepository { + + void createStructure(String id, String versionId); + + Collection list(String id, String versionId, ParameterRole role); + + void deleteAll(String id, String versionId, ParameterRole role); + + ParameterEntity get(String id, String versionId, String parameterId); + + void delete(String id, String versionId, String parameterId); + + ParameterEntity create(String id, String versionId , ParameterRole role, ParameterEntity parameter); + + void update(String id, String versionId, ParameterRole role, ParameterEntity parameter); +} diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryImpl.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryImpl.java index 9a449f0d..7e100cf4 100644 --- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryImpl.java +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryImpl.java @@ -12,14 +12,13 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; -import java.util.Map; import java.util.Optional; import org.apache.commons.io.IOUtils; import org.onap.sdc.workflow.persistence.ArtifactRepository; import org.onap.sdc.workflow.persistence.types.ArtifactEntity; +import org.onap.sdc.workflow.persistence.types.WorkflowElementType; import org.openecomp.core.zusammen.api.ZusammenAdaptor; import org.openecomp.core.zusammen.api.ZusammenAdaptorFactory; -import org.openecomp.sdc.datatypes.model.ElementType; import org.springframework.stereotype.Repository; @Repository @@ -33,7 +32,7 @@ public class ArtifactRepositoryImpl implements ArtifactRepository { @Override public void update(String id, String versionId, ArtifactEntity artifactEntity) { - ZusammenElement artifactElement = buildStructuralElement(ElementType.Artifact, Action.UPDATE); + ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.UPDATE); artifactElement.setData(artifactEntity.getArtifactData()); artifactElement.getInfo().addProperty(FILE_NAME_PROPERTY, artifactEntity.getFileName()); @@ -50,7 +49,7 @@ public class ArtifactRepositoryImpl implements ArtifactRepository { ElementContext elementContext = new ElementContext(id, versionId); Optional elementOptional = - zusammenAdaptor.getElementByName(context, elementContext, null, ElementType.Artifact.name()); + zusammenAdaptor.getElementByName(context, elementContext, null, WorkflowElementType.ARTIFACT.name()); if (!elementOptional.isPresent() || hasEmptyData(elementOptional.get().getData())) { return Optional.empty(); @@ -69,7 +68,7 @@ public class ArtifactRepositoryImpl implements ArtifactRepository { SessionContext context = createSessionContext(); ElementContext elementContext = new ElementContext(id, versionId); - ZusammenElement artifactElement = buildStructuralElement(ElementType.Artifact, Action.CREATE); + ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.CREATE); artifactElement.setData(new ByteArrayInputStream(EMPTY_DATA.getBytes())); zusammenAdaptor @@ -82,12 +81,12 @@ public class ArtifactRepositoryImpl implements ArtifactRepository { SessionContext context = createSessionContext(); ElementContext elementContext = new ElementContext(id, versionId); - ZusammenElement artifactElement = buildStructuralElement(ElementType.Artifact, Action.UPDATE); + ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.UPDATE); artifactElement.setData(new ByteArrayInputStream(EMPTY_DATA.getBytes())); artifactElement.getInfo().getProperties().remove(FILE_NAME_PROPERTY); zusammenAdaptor - .saveElement(context, elementContext, artifactElement, "Update WorkflowVersion Artifact Element"); + .saveElement(context, elementContext, artifactElement, "Delete WorkflowVersion Artifact Data"); } diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryImpl.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryImpl.java new file mode 100644 index 00000000..bcca104f --- /dev/null +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryImpl.java @@ -0,0 +1,183 @@ +package org.onap.sdc.workflow.persistence.impl; + +import static org.openecomp.core.zusammen.api.ZusammenUtil.buildElement; +import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement; +import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement; +import com.amdocs.zusammen.datatypes.Id; +import com.amdocs.zusammen.datatypes.SessionContext; +import com.amdocs.zusammen.datatypes.item.Action; +import com.amdocs.zusammen.datatypes.item.ElementContext; +import com.amdocs.zusammen.datatypes.item.Info; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Optional; +import java.util.stream.Collectors; +import javax.swing.DefaultBoundedRangeModel; +import org.onap.sdc.workflow.persistence.ParameterRepository; +import org.onap.sdc.workflow.persistence.types.ParameterEntity; +import org.onap.sdc.workflow.persistence.types.ParameterPropertyName; +import org.onap.sdc.workflow.persistence.types.ParameterRole; +import org.onap.sdc.workflow.persistence.types.ParameterType; +import org.onap.sdc.workflow.persistence.types.WorkflowElementType; +import org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.core.zusammen.api.ZusammenAdaptorFactory; +import org.openecomp.types.ElementPropertyName; +import org.springframework.stereotype.Repository; + +@Repository +public class ParameterRepositoryImpl implements ParameterRepository { + + private ZusammenAdaptor zusammenAdaptor = ZusammenAdaptorFactory.getInstance().createInterface(); + + @Override + public void createStructure(String id, String versionId) { + + SessionContext context = createSessionContext(); + ElementContext elementContext = new ElementContext(id, versionId); + + ZusammenElement inputsElement = buildStructuralElement(WorkflowElementType.INPUTS.name(), Action.CREATE); + ZusammenElement outputsElement = buildStructuralElement(WorkflowElementType.OUTPUTS.name(), Action.CREATE); + + zusammenAdaptor.saveElement(context, elementContext, inputsElement, "Create WorkflowVersion INPUTS Element"); + zusammenAdaptor.saveElement(context, elementContext, outputsElement, "Create WorkflowVersion OUTPUTS Element"); + } + + @Override + public Collection list(String id, String versionId, ParameterRole role) { + + SessionContext context = createSessionContext(); + ElementContext elementContext = new ElementContext(id, versionId); + + return zusammenAdaptor.listElementsByName(context, elementContext, null, role.name()).stream() + .map(this::mapElementInfoToParameter).collect(Collectors.toList()); + + } + + @Override + public void deleteAll(String id, String versionId, ParameterRole role) { + + SessionContext context = createSessionContext(); + ElementContext elementContext = new ElementContext(id, versionId); + + Optional optionalParentElement = zusammenAdaptor.getElementInfoByName(context, elementContext, null, + getParentElementType(role)); + + if (!optionalParentElement.isPresent()) { + return; + } + ZusammenElement parentElement = buildElement(optionalParentElement.get().getId(), Action.IGNORE); + parentElement.setSubElements(optionalParentElement.get().getSubElements().stream() + .map(parameter -> buildElement(parameter.getId(), + Action.DELETE)).collect(Collectors.toList())); + + zusammenAdaptor.saveElement(context, elementContext, parentElement, "Delete all " + role); + } + + @Override + public ParameterEntity get(String id, String versionId, String parameterId) { + + SessionContext context = createSessionContext(); + ElementContext elementContext = new ElementContext(id, versionId); + + Optional element = zusammenAdaptor.getElementInfo(context, elementContext,new Id(parameterId)); + + return element.map(this::mapElementInfoToParameter).orElse(null); + } + + @Override + public void delete(String id, String versionId, String parameterId){ + SessionContext context = createSessionContext(); + ElementContext elementContext = new ElementContext(id, versionId); + + ZusammenElement parameterElement = buildElement(new Id(parameterId),Action.DELETE); + + zusammenAdaptor.saveElement(context, elementContext, parameterElement, + String.format("Delete Parameter with id %s", parameterId)); + + } + + @Override + public ParameterEntity create(String id, String versionId, ParameterRole role, ParameterEntity parameter) { + + ZusammenElement parameterElement = + parameterToZusammenElement(parameter,role, Action.CREATE); + ZusammenElement parentElement = + buildStructuralElement(getParentElementType(role), Action.IGNORE); + parentElement.addSubElement(parameterElement); + + SessionContext context = createSessionContext(); + ElementContext elementContext = new ElementContext(id, versionId); + + Element savedElement = zusammenAdaptor.saveElement(context, elementContext, parentElement, + "Create WorkflowVersion Parameter Element"); + + parameter.setId(savedElement.getSubElements().iterator().next().getElementId().getValue()); + return parameter; + } + + @Override + public void update(String id, String versionId, ParameterRole role, ParameterEntity parameter) { + + SessionContext context = createSessionContext(); + ElementContext elementContext = new ElementContext(id, versionId); + + ZusammenElement parameterElement = + parameterToZusammenElement(parameter, role, Action.UPDATE); + + zusammenAdaptor.saveElement(context, elementContext, parameterElement, "Update WorkflowVersion Parameter"); + } + + private ZusammenElement parameterToZusammenElement(ParameterEntity parameter, ParameterRole role, + Action action) { + + ZusammenElement parameterElement = + buildElement(parameter.getId() == null ? null : new Id(parameter.getId()), action); + Info info = new Info(); + info.setName(parameter.getName()); + info.addProperty(ElementPropertyName.elementType.name(), WorkflowElementType.valueOf(role.name())); + info.addProperty(ParameterPropertyName.type.name(), parameter.getType()); + info.addProperty(ParameterPropertyName.mandatory.name(), parameter.isMandatory()); + parameterElement.setInfo(info); + + return parameterElement; + } + + ParameterEntity elementToParameterEntity(Element element) { + ParameterEntity parameterEntity = new ParameterEntity(); + parameterEntity.setId(element.getElementId().getValue()); + parameterEntity.setName(element.getInfo().getName()); + parameterEntity.setType(ParameterType.valueOf( + (String) element.getInfo().getProperties().get(ParameterPropertyName.type.name()))); + parameterEntity + .setMandatory((Boolean) element.getInfo().getProperties().get(ParameterPropertyName.mandatory.name())); + + return parameterEntity; + } + + private static String getParentElementType(ParameterRole role) { + switch (role){ + case INPUT: + return WorkflowElementType.INPUTS.name(); + case OUTPUT: + return WorkflowElementType.OUTPUTS.name(); + default: + throw new RuntimeException("Wrong Element Type"); + } + } + + private ParameterEntity mapElementInfoToParameter(ElementInfo elementInfo){ + ParameterEntity parameterEntity = new ParameterEntity(); + parameterEntity.setId(elementInfo.getId().getValue()); + parameterEntity.setName(elementInfo.getInfo().getName()); + parameterEntity.setType(ParameterType.valueOf( + elementInfo.getInfo().getProperty(ParameterPropertyName.type.name()))); + parameterEntity.setMandatory(elementInfo.getInfo().getProperty( + ParameterPropertyName.mandatory.name())); + return parameterEntity; + } + +} diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterEntity.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterEntity.java new file mode 100644 index 00000000..bc625b81 --- /dev/null +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterEntity.java @@ -0,0 +1,12 @@ +package org.onap.sdc.workflow.persistence.types; + +import lombok.Data; + +@Data +public class ParameterEntity { + + private String id; + private String name; + private ParameterType type; + private boolean mandatory; +} diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterPropertyName.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterPropertyName.java new file mode 100644 index 00000000..5024d4a8 --- /dev/null +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterPropertyName.java @@ -0,0 +1,7 @@ +package org.onap.sdc.workflow.persistence.types; + +public enum ParameterPropertyName { + + type, + mandatory +} diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterRole.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterRole.java new file mode 100644 index 00000000..9b5620b3 --- /dev/null +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterRole.java @@ -0,0 +1,8 @@ +package org.onap.sdc.workflow.persistence.types; + +public enum ParameterRole { + + INPUT, + OUTPUT + +} diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterType.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterType.java new file mode 100644 index 00000000..60465824 --- /dev/null +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterType.java @@ -0,0 +1,9 @@ +package org.onap.sdc.workflow.persistence.types; + +public enum ParameterType { + STRING, + INTEGER, + FLOAT, + BOOLEAN, + TIMESTAMP +} diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowElementType.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowElementType.java new file mode 100644 index 00000000..6f473453 --- /dev/null +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowElementType.java @@ -0,0 +1,10 @@ +package org.onap.sdc.workflow.persistence.types; + +public enum WorkflowElementType { + + ARTIFACT, + INPUTS, + OUTPUTS, + INPUT, + OUTPUT +} diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersion.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersion.java index db0999b6..e4158b19 100644 --- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersion.java +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersion.java @@ -1,5 +1,6 @@ package org.onap.sdc.workflow.persistence.types; +import java.util.Collection; import java.util.Date; import lombok.Data; @@ -14,6 +15,8 @@ public class WorkflowVersion { private Date creationTime; private Date modificationTime; private WorkflowVersionState state; + private Collection inputs; + private Collection outputs; public WorkflowVersion(String id) { diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java index cdfddf34..0f88d37f 100644 --- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java +++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java @@ -10,7 +10,10 @@ 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.ParameterRepository; import org.onap.sdc.workflow.persistence.types.ArtifactEntity; +import org.onap.sdc.workflow.persistence.types.ParameterEntity; +import org.onap.sdc.workflow.persistence.types.ParameterRole; import org.onap.sdc.workflow.persistence.types.WorkflowVersion; import org.onap.sdc.workflow.persistence.types.WorkflowVersionState; import org.onap.sdc.workflow.services.WorkflowVersionManager; @@ -35,30 +38,41 @@ 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 final ParameterRepository parameterRepository; private final VersionMapper versionMapper; private final VersionStateMapper versionStateMapper; @Autowired public WorkflowVersionManagerImpl(VersioningManager versioningManager, ArtifactRepository artifactRepository, - VersionMapper versionMapper, VersionStateMapper versionStateMapper) { + VersionMapper versionMapper, VersionStateMapper versionStateMapper, + ParameterRepository parameterRepository) { this.versioningManager = versioningManager; this.artifactRepository = artifactRepository; + this.parameterRepository = parameterRepository; this.versionMapper = versionMapper; this.versionStateMapper = versionStateMapper; } @Override public Collection list(String workflowId) { - return versioningManager.list(workflowId).stream().map(versionMapper::versionToWorkflowVersion) - .collect(Collectors.toList()); + Collection versions = + versioningManager.list(workflowId).stream().map(versionMapper::versionToWorkflowVersion) + .collect(Collectors.toList()); + versions.forEach(workflowVersion -> addVersionParameters(workflowId,workflowVersion)); + + return versions; } @Override public WorkflowVersion get(String workflowId, String versionId) { - return versionMapper.versionToWorkflowVersion(getVersion(workflowId, versionId)); + WorkflowVersion workflowVersion = versionMapper.versionToWorkflowVersion(getVersion(workflowId, versionId)); + addVersionParameters(workflowId,workflowVersion); + return workflowVersion; + } + @Override public WorkflowVersion create(String workflowId, VersionRequestDto versionRequest) { List versions = versioningManager.list(workflowId); @@ -76,10 +90,14 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager { if (versions.isEmpty()) { // only for first version artifactRepository.createStructure(workflowId, createdVersion.getId()); + parameterRepository.createStructure(workflowId, createdVersion.getId()); versioningManager.publish(workflowId, createdVersion, "Add workflow structure"); } - return versionMapper.versionToWorkflowVersion(createdVersion); + updateVersionParameters(workflowId, createdVersion.getId(), ParameterRole.INPUT, versionRequest.getInputs()); + updateVersionParameters(workflowId, createdVersion.getId(), ParameterRole.OUTPUT, versionRequest.getOutputs()); + + return get(workflowId, createdVersion.getId()); } @Override @@ -94,6 +112,9 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager { version.setName(retrievedVersion.getName()); version.setStatus(retrievedVersion.getStatus()); + updateVersionParameters(workflowId, version.getId(), ParameterRole.INPUT, workflowVersion.getInputs()); + updateVersionParameters(workflowId, version.getId(), ParameterRole.OUTPUT, workflowVersion.getOutputs()); + versioningManager.updateVersion(workflowId, version); versioningManager.publish(workflowId, version, "Update version"); } @@ -168,6 +189,7 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager { } } + private Version getVersion(String workflowId, String versionId) { try { Version version = versioningManager.get(workflowId, new Version(versionId)); @@ -180,7 +202,34 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager { } } + private void updateVersionParameters(String workflowId, String versionId, ParameterRole role, + Collection parameters) { + + Collection retrievedParameters = parameterRepository.list(workflowId, versionId, role); + + parameters.forEach(parameterEntity -> { + if (retrievedParameters.stream().anyMatch( + parameterEntity1 -> parameterEntity.getName().equals(parameterEntity1.getName()))) { + parameterRepository.update(workflowId, versionId, role, parameterEntity); + } else { + parameterRepository.create(workflowId, versionId, role, parameterEntity); + } + }); + + retrievedParameters.forEach(parameterEntity -> { + if (parameters.stream().noneMatch( + parameterEntity1 -> parameterEntity.getName().equals(parameterEntity1.getName()))) { + parameterRepository.delete(workflowId, versionId, parameterEntity.getId()); + } + }); + } + private static Optional findVersion(List versions, String versionId) { return versions.stream().filter(version -> versionId.equals(version.getId())).findFirst(); } + + private void addVersionParameters(String workflowId, WorkflowVersion workflowVersion) { + workflowVersion.setInputs(parameterRepository.list(workflowId, workflowVersion.getId(), ParameterRole.INPUT)); + workflowVersion.setOutputs(parameterRepository.list(workflowId, workflowVersion.getId(), ParameterRole.OUTPUT)); + } } \ No newline at end of file diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryTest.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryTest.java index 4bec8b97..b86b14b9 100644 --- a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryTest.java +++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryTest.java @@ -1,15 +1,40 @@ package org.onap.sdc.workflow.persistence.impl; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.isNull; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.verify; +import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement; +import com.amdocs.zusammen.datatypes.Id; +import com.amdocs.zusammen.datatypes.SessionContext; +import com.amdocs.zusammen.datatypes.item.Action; +import com.amdocs.zusammen.datatypes.item.ElementContext; import java.io.IOException; +import java.io.InputStream; +import java.util.Optional; +import org.apache.commons.io.IOUtils; +import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.onap.sdc.workflow.persistence.types.ArtifactEntity; +import org.onap.sdc.workflow.persistence.types.WorkflowElementType; import org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.sdc.common.session.SessionContextProviderFactory; +@RunWith(MockitoJUnitRunner.class) public class ArtifactRepositoryTest { private static final String FILE_NAME_PROPERTY = "fileName"; - private static final String EMPTY_DATA = "{}"; + private static final String FILE_NAME = "fileName.txt"; private static final String ITEM1_ID = "item_id_1"; private static final String VERSION1_ID = "version_id_1"; @@ -20,10 +45,55 @@ public class ArtifactRepositoryTest { @InjectMocks private ArtifactRepositoryImpl artifactRepository; + @Before + public void setUp() { + SessionContextProviderFactory.getInstance().createInterface().create("test_user", "workflow"); + } + @Test public void shouldUpdateArtifact() throws IOException { + InputStream inputStreamMock = IOUtils.toInputStream("some test data for my input stream", "UTF-8"); + ArtifactEntity artifactMock = new ArtifactEntity(FILE_NAME, inputStreamMock); + + artifactRepository.update(ITEM1_ID, VERSION1_ID, artifactMock); + verify(zusammenAdaptorMock) + .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class), + eq("Update WorkflowVersion Artifact Element")); } + @Test + public void shouldGetArtifactWhenExist() throws IOException { + + ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.UPDATE); + artifactElement.setData(IOUtils.toInputStream("some test data for my input stream", "UTF-8")); + artifactElement.getInfo().addProperty(FILE_NAME_PROPERTY, FILE_NAME); + Optional elementOptional = Optional.of(artifactElement); + + doReturn(elementOptional).when(zusammenAdaptorMock) + .getElementByName(any(SessionContext.class), any(ElementContext.class), isNull(Id.class), + eq(WorkflowElementType.ARTIFACT.name())); + + Optional result = artifactRepository.get(ITEM1_ID, VERSION1_ID); + assertTrue(result.isPresent()); + assertEquals(FILE_NAME,result.get().getFileName()); + verify(zusammenAdaptorMock).getElementByName(any(SessionContext.class), any(ElementContext.class), isNull(Id.class), + eq(WorkflowElementType.ARTIFACT.name())); + } + + @Test + public void shouldCreateArtifactStructure() { + artifactRepository.createStructure(ITEM1_ID, VERSION1_ID); + verify(zusammenAdaptorMock) + .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class), + eq("Create WorkflowVersion Artifact Element")); + } + + @Test + public void shouldDeleteArtifact(){ + artifactRepository.delete(ITEM1_ID,VERSION1_ID); + verify(zusammenAdaptorMock).saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class), + eq("Delete WorkflowVersion Artifact Data")); + } } diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryTest.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryTest.java new file mode 100644 index 00000000..a1708e67 --- /dev/null +++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryTest.java @@ -0,0 +1,109 @@ +package org.onap.sdc.workflow.persistence.impl; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.verify; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; + +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement; +import com.amdocs.zusammen.datatypes.Id; +import com.amdocs.zusammen.datatypes.SessionContext; +import com.amdocs.zusammen.datatypes.item.ElementContext; +import com.amdocs.zusammen.datatypes.item.Info; +import java.util.Optional; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnitRunner; +import org.onap.sdc.workflow.persistence.types.ParameterEntity; +import org.onap.sdc.workflow.persistence.types.ParameterPropertyName; +import org.onap.sdc.workflow.persistence.types.ParameterRole; +import org.onap.sdc.workflow.persistence.types.ParameterType; +import org.openecomp.core.zusammen.api.ZusammenAdaptor; +import org.openecomp.sdc.common.session.SessionContextProviderFactory; + +@RunWith(MockitoJUnitRunner.class) +public class ParameterRepositoryTest { + + private static final String ITEM1_ID = "item_id_1"; + private static final String VERSION1_ID = "version_id_1"; + private static final String PARAMETER1_ID = "parameter_id_1"; + + @Mock + private ZusammenAdaptor zusammenAdaptorMock; + @Spy + @InjectMocks + private ParameterRepositoryImpl parameterRepository; + + @Before + public void setUp() { + SessionContextProviderFactory.getInstance().createInterface().create("test_user", "workflow"); + } + + @Test + public void shouldGetParameterById() { + + ZusammenElement element = new ZusammenElement(); + element.setElementId(new Id(PARAMETER1_ID)); + Info info = new Info(); + info.setName("testInput"); + info.addProperty(ParameterPropertyName.type.name(),ParameterType.FLOAT.name()); + info.addProperty(ParameterPropertyName.mandatory.name(),true); + element.setInfo(info); + doReturn(Optional.of(element)).when(zusammenAdaptorMock) + .getElement(any(SessionContext.class), any(ElementContext.class), + eq(PARAMETER1_ID)); + ParameterEntity result = parameterRepository.get(ITEM1_ID, VERSION1_ID, PARAMETER1_ID); + verify(parameterRepository,times(1)).elementToParameterEntity(element); + verify(zusammenAdaptorMock).getElement(any(SessionContext.class), any(ElementContext.class),eq(PARAMETER1_ID)); + assertEquals("testInput",result.getName()); + + } + + + @Test + public void shouldUpdateParameter() { + ParameterEntity parameterEntityToUpdate = new ParameterEntity(); + parameterEntityToUpdate.setId(PARAMETER1_ID); + parameterEntityToUpdate.setName("Input1"); + parameterEntityToUpdate.setMandatory(true); + parameterEntityToUpdate.setType(ParameterType.STRING); + + parameterRepository.update(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT, parameterEntityToUpdate); + verify(zusammenAdaptorMock) + .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class), + eq("Update WorkflowVersion Parameter")); + + } + + @Test + public void shouldCreateParameterStructure(){ + parameterRepository.createStructure(ITEM1_ID,VERSION1_ID); + verify(zusammenAdaptorMock) + .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class), + eq("Create WorkflowVersion INPUTS Element")); + verify(zusammenAdaptorMock) + .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class), + eq("Create WorkflowVersion OUTPUTS Element")); + } + + @Test + public void shouldDeleteParameter() { + parameterRepository.delete(ITEM1_ID, VERSION1_ID, PARAMETER1_ID); + verify(zusammenAdaptorMock) + .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class), + eq("Delete Parameter with id parameter_id_1")); + } + + + + + + + +} diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImplTest.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImplTest.java index 144db81e..132d966c 100644 --- a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImplTest.java +++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImplTest.java @@ -13,9 +13,9 @@ import static org.onap.sdc.workflow.persistence.types.WorkflowVersionState.DRAFT import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.Date; import java.util.List; import java.util.Optional; import org.apache.commons.io.IOUtils; @@ -25,10 +25,13 @@ import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import org.onap.sdc.workflow.api.types.VersionRequestDto; import org.onap.sdc.workflow.persistence.ArtifactRepository; +import org.onap.sdc.workflow.persistence.ParameterRepository; import org.onap.sdc.workflow.persistence.types.ArtifactEntity; +import org.onap.sdc.workflow.persistence.types.ParameterRole; import org.onap.sdc.workflow.persistence.types.WorkflowVersion; import org.onap.sdc.workflow.persistence.types.WorkflowVersionState; import org.onap.sdc.workflow.services.exceptions.EntityNotFoundException; @@ -52,11 +55,14 @@ public class WorkflowVersionManagerImplTest { @Mock private VersioningManager versioningManagerMock; @Mock + private ParameterRepository parameterRepositoryMock; + @Mock private ArtifactRepository artifactRepositoryMock; @Mock private VersionMapper versionMapperMock; @Mock private VersionStateMapper versionStateMapperMock; + @Spy @InjectMocks private WorkflowVersionManagerImpl workflowVersionManager; @@ -70,22 +76,19 @@ public class WorkflowVersionManagerImplTest { @Test public void shouldReturnWorkflowVersionWhenExist() { Version version = new Version(VERSION1_ID); - doReturn(version).when(versioningManagerMock).get(ITEM1_ID, version); - workflowVersionManager.get(ITEM1_ID, VERSION1_ID); - verify(versioningManagerMock).get(ITEM1_ID, version); + WorkflowVersion workflowVersion = new WorkflowVersion(VERSION1_ID); + doReturn(workflowVersion).when(versionMapperMock).versionToWorkflowVersion(any(Version.class)); + doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID),any(Version.class)); + doReturn(new ArrayList()).when(parameterRepositoryMock).list(eq(ITEM1_ID), eq(VERSION1_ID), any(ParameterRole.class)); + workflowVersionManager.get(ITEM1_ID,VERSION1_ID); + verify(versioningManagerMock).get(ITEM1_ID,version); } @Test public void shouldReturnWorkflowVersionList() { List versionList = Arrays.asList(new Version(VERSION1_ID), new Version(VERSION2_ID)); - versionList.forEach(version -> { - version.setBaseId("baseVersionId"); - version.setDescription("Version description"); - version.setName("name"); - version.setCreationTime(new Date()); - version.setModificationTime(new Date()); - }); doReturn(versionList).when(versioningManagerMock).list(ITEM1_ID); + doReturn(new WorkflowVersion()).when(versionMapperMock).versionToWorkflowVersion(any(Version.class)); workflowVersionManager.list(ITEM1_ID); verify(versioningManagerMock).list(ITEM1_ID); verify(versionMapperMock, times(2)).versionToWorkflowVersion(any(Version.class)); @@ -93,6 +96,7 @@ public class WorkflowVersionManagerImplTest { @Test public void shouldUpdateWorkflowVersion() { + String updatedDescription = "WorkflowVersion description updated"; Version retrievedVersion = new Version(VERSION1_ID); retrievedVersion.setName("1.0"); retrievedVersion.setDescription("WorkflowVersion description"); @@ -102,11 +106,13 @@ public class WorkflowVersionManagerImplTest { WorkflowVersion inputVersion = new WorkflowVersion(VERSION1_ID); inputVersion.setName("1.0"); - inputVersion.setDescription("WorkflowVersion description updated"); + inputVersion.setDescription(updatedDescription); + inputVersion.setInputs(new ArrayList<>()); + inputVersion.setOutputs(new ArrayList<>()); Version mappedInputVersion = new Version(VERSION1_ID); mappedInputVersion.setName("1.0"); - mappedInputVersion.setDescription("WorkflowVersion description updated"); + mappedInputVersion.setDescription(updatedDescription); doReturn(mappedInputVersion).when(versionMapperMock).workflowVersionToVersion(inputVersion); ArgumentCaptor versionArgCaptor = ArgumentCaptor.forClass(Version.class); @@ -115,20 +121,23 @@ public class WorkflowVersionManagerImplTest { verify(versioningManagerMock).updateVersion(eq(ITEM1_ID), versionArgCaptor.capture()); Version captorVersion = versionArgCaptor.getValue(); assertEquals("1.0", captorVersion.getName()); - assertEquals("WorkflowVersion description updated", captorVersion.getDescription()); + assertEquals(updatedDescription, captorVersion.getDescription()); assertEquals(VersionStatus.Draft, captorVersion.getStatus()); verify(versioningManagerMock).publish(ITEM1_ID, mappedInputVersion, "Update version"); } + @Test - public void shouldCreateWorkflowVersion() { + public void shouldCreateWorkflowVersion(){ Version version = new Version(VERSION1_ID); version.setDescription("version desc"); - doReturn(version).when(versioningManagerMock).create(ITEM1_ID, version, VersionCreationMethod.major); - VersionRequestDto workflowVersion = new VersionRequestDto(); - workflowVersion.setDescription("version desc"); - workflowVersionManager.create(ITEM1_ID, workflowVersion); - verify(versioningManagerMock).create(ITEM1_ID, version, VersionCreationMethod.major); + doReturn(version).when(versioningManagerMock).create(ITEM1_ID,version, VersionCreationMethod.major); + VersionRequestDto versionRequest = new VersionRequestDto(); + versionRequest.setDescription("version desc"); + WorkflowVersion workflowVersion = new WorkflowVersion(VERSION1_ID); + doReturn(workflowVersion).when(workflowVersionManager).get(ITEM1_ID,VERSION1_ID); + workflowVersionManager.create(ITEM1_ID,versionRequest); + verify(versioningManagerMock).create(ITEM1_ID,version, VersionCreationMethod.major); } -- cgit 1.2.3-korg