1 package org.openecomp.sdc.be.model.jsontitan.operations;
3 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
4 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
5 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
6 import org.openecomp.sdc.be.dao.utils.MapUtil;
7 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
8 import org.openecomp.sdc.be.model.Component;
9 import org.openecomp.sdc.be.model.PolicyDefinition;
10 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
11 import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
15 import java.util.ArrayList;
16 import java.util.List;
19 @org.springframework.stereotype.Component
20 public class PolicyOperation {
22 private static final Logger log = LoggerFactory.getLogger(PolicyOperation.class);
23 private TopologyTemplateOperation topologyTemplateOperation;
24 private TitanDao titanDao;
26 public PolicyOperation(TopologyTemplateOperation topologyTemplateOperation, TitanDao titanDao) {
27 this.topologyTemplateOperation = topologyTemplateOperation;
28 this.titanDao = titanDao;
32 * updates a list of policy properties by overriding the existing ones with the same name
33 * @param containerComponent the container of the policy of which its properties are to be updated
34 * @param policyId the id of the policy of which its properties are to be updated
35 * @param propertiesToUpdate the policy properties to update
36 * @return the update operation status
38 public StorageOperationStatus updatePolicyProperties(Component containerComponent, String policyId, List<PropertyDataDefinition> propertiesToUpdate) {
39 log.debug("#updatePolicyProperties - updating the properties of policy {} in component {}", policyId, containerComponent.getUniqueId());
40 PolicyDefinition policy = containerComponent.getPolicyById(policyId);
41 return titanDao.getVertexById(containerComponent.getUniqueId(), JsonParseFlagEnum.NoParse)
42 .either(containerVertex -> updatePolicyProperties(containerVertex, policy, propertiesToUpdate),
43 DaoStatusConverter::convertTitanStatusToStorageStatus);
46 private StorageOperationStatus updatePolicyProperties(GraphVertex container, PolicyDefinition policy, List<PropertyDataDefinition> propertiesToUpdate) {
47 List<PropertyDataDefinition> policyProperties = policy.getProperties();
48 List<PropertyDataDefinition> updatedPolicyProperties = updatePolicyProperties(policyProperties, propertiesToUpdate);
49 policy.setProperties(updatedPolicyProperties);
50 return topologyTemplateOperation.updatePolicyOfToscaElement(container, policy);
53 private List<PropertyDataDefinition> updatePolicyProperties(List<PropertyDataDefinition> currentPolicyProperties, List<PropertyDataDefinition> toBeUpdatedProperties) {
54 Map<String, PropertyDataDefinition> currPropsByName = MapUtil.toMap(currentPolicyProperties, PropertyDataDefinition::getName);
55 overrideCurrentPropertiesWithUpdatedProperties(currPropsByName, toBeUpdatedProperties);
56 return new ArrayList<>(currPropsByName.values());
59 private void overrideCurrentPropertiesWithUpdatedProperties(Map<String, PropertyDataDefinition> currPropsByName, List<PropertyDataDefinition> toBeUpdatedProperties) {
60 toBeUpdatedProperties.forEach(prop -> currPropsByName.put(prop.getName(), prop));