1 package org.openecomp.sdc.asdctool.impl.migration.v1707;
3 import java.util.EnumMap;
4 import java.util.HashMap;
7 import java.util.Map.Entry;
8 import java.util.stream.Collectors;
10 import org.apache.commons.collections.MapUtils;
11 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
12 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
13 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
14 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
15 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
16 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
17 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
18 import org.openecomp.sdc.be.model.ComponentParametersView;
19 import org.openecomp.sdc.be.model.DistributionStatusEnum;
20 import org.openecomp.sdc.be.model.LifecycleStateEnum;
21 import org.openecomp.sdc.be.model.Service;
22 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
23 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
24 import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27 import org.springframework.beans.factory.annotation.Autowired;
28 import org.springframework.stereotype.Component;
30 import fj.data.Either;
32 @Component("distributionStatusUpdate")
33 public class DistributionStatusUpdate {
34 private static Logger LOGGER = LoggerFactory.getLogger(DistributionStatusUpdate.class);
37 private ToscaOperationFacade toscaOperationFacade;
39 private TitanDao titanDao;
42 public boolean migrate() {
43 boolean result = true;
44 Either<Map<GraphVertex, org.openecomp.sdc.be.model.Service>, StorageOperationStatus> getAllServiceComponentsRes = getAllServiceComponents();
45 if(getAllServiceComponentsRes.isRight()){
48 if(result && MapUtils.isNotEmpty(getAllServiceComponentsRes.left().value())){
49 updateDistributionStatusFromMetadata(getAllServiceComponentsRes.left().value());
50 updateDistributionStatusToNotDistributed(getAllServiceComponentsRes.left().value());
53 toscaOperationFacade.commit();
59 private void updateDistributionStatusToNotDistributed(Map<GraphVertex, org.openecomp.sdc.be.model.Service> components) {
61 Map<GraphVertex, org.openecomp.sdc.be.model.Service> filteredComponents = components.entrySet()
63 .filter(e -> e.getValue().getLifecycleState() != LifecycleStateEnum.CERTIFIED)
64 .collect(Collectors.toMap(e -> e.getKey(), e -> (Service)e.getValue()));
67 Either<GraphVertex, TitanOperationStatus> updateResponse;
68 GraphVertex metadataV;
70 for(Entry<GraphVertex, Service> currComponent : filteredComponents.entrySet()){
71 metadataV = currComponent.getKey();
72 service = currComponent.getValue();
74 metadataV.addMetadataProperty(GraphPropertyEnum.DISTRIBUTION_STATUS, DistributionStatusEnum.DISTRIBUTION_NOT_APPROVED.name());
75 updateResponse = titanDao.updateVertex(metadataV);
77 if (updateResponse.isRight()) {
78 LOGGER.debug("failed to updateDistributionStatusToNotDistributed service {} error {}", service.getUniqueId(), updateResponse.right().value());
81 } catch (Exception e) {
82 LOGGER.debug("failed to updateDistributionStatusToNotDistributed service {} error {}", service.getUniqueId(), e.toString());
87 private void updateDistributionStatusFromMetadata(Map<GraphVertex, org.openecomp.sdc.be.model.Service> components) {
89 String statusFromMetadata;
90 Either<GraphVertex, TitanOperationStatus> updateResponse;
91 GraphVertex metadataV;
93 for(Entry<GraphVertex, Service> currComponent : components.entrySet()){
94 metadataV = currComponent.getKey();
95 service = currComponent.getValue();
97 statusFromMetadata = (String) metadataV.getJsonMetadataField(JsonPresentationFields.DISTRIBUTION_STATUS);
98 metadataV.addMetadataProperty(GraphPropertyEnum.DISTRIBUTION_STATUS, statusFromMetadata);
99 updateResponse = titanDao.updateVertex(metadataV);
101 if (updateResponse.isRight()) {
102 LOGGER.debug("failed to updateDistributionStatusFromMetadata service {} error {}", service.getUniqueId(), updateResponse.right().value());
105 } catch (Exception e) {
106 LOGGER.debug("failed to read distribution status of service {} error {}", service.getUniqueId(), e.toString());
113 public Either<Map<GraphVertex, org.openecomp.sdc.be.model.Service>, StorageOperationStatus> getAllServiceComponents() {
115 Map<GraphVertex, org.openecomp.sdc.be.model.Service> components = new HashMap<>();
116 Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
117 Map<GraphPropertyEnum, Object> propertiesNotMatch = new EnumMap<>(GraphPropertyEnum.class);
118 propertiesToMatch.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
119 propertiesNotMatch.put(GraphPropertyEnum.IS_DELETED, true);
120 Either<List<GraphVertex>, TitanOperationStatus> getVerticiesRes = toscaOperationFacade.getTitanDao().getByCriteria(null, propertiesToMatch, propertiesNotMatch, JsonParseFlagEnum.ParseAll);
122 if (getVerticiesRes.isRight() && getVerticiesRes.right().value() != TitanOperationStatus.NOT_FOUND) {
123 LOGGER.debug("Failed to fetch all service components. Status is {}", getVerticiesRes.right().value());
124 return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(getVerticiesRes.right().value()));
126 if(getVerticiesRes.isLeft()){
127 List<GraphVertex> componentVerticies = getVerticiesRes.left().value();
128 for (GraphVertex componentV : componentVerticies) {
129 ComponentParametersView filters = new ComponentParametersView(true);
130 Either<org.openecomp.sdc.be.model.Component, StorageOperationStatus> getComponentsRes = toscaOperationFacade.getToscaElement(componentV.getUniqueId(), filters);
131 if (getComponentsRes.isRight()) {
132 return Either.right(getComponentsRes.right().value());
134 components.put(componentV, (Service) getComponentsRes.left().value());
137 return Either.left(components);