The refactor removes unnecessary component id from the substitution filters structure, as the substitution filters belongs to and only to the component.
This also avoid any copying issues during the new version creation, as there is not need to update the structure with a new component id.
Issue-ID: SDC-3619
Signed-off-by: KrupaNagabhushan <krupa.nagabhushan@est.tech>
Change-Id: Ibcfd9be0c8ceb95d5c1c3bd3f21c3dec26c398f7
import org.openecomp.sdc.be.model.Service;
import org.openecomp.sdc.be.tosca.utils.NodeFilterConverter;
import org.openecomp.sdc.be.tosca.utils.SubstitutionFilterConverter;
-import org.openecomp.sdc.be.ui.model.UINodeFilter;
import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer;
import org.openecomp.sdc.be.ui.model.UiComponentMetadata;
import org.openecomp.sdc.be.ui.model.UiResourceDataTransfer;
}
private void setSubstitutionFilter(final UiComponentDataTransfer dataTransfer, final Component component) {
- if (component.getSubstitutionFilterComponents() == null) {
- dataTransfer.setSubstitutionFilter(null);
+ if (component.getSubstitutionFilter() == null) {
+ dataTransfer.setSubstitutionFilters(null);
} else {
- dataTransfer.setSubstitutionFilter(component.getSubstitutionFilterComponents());
+ final SubstitutionFilterConverter substitutionFilterConverter = new SubstitutionFilterConverter();
+ dataTransfer.setSubstitutionFilters(substitutionFilterConverter.convertToUi(component.getSubstitutionFilter()));
}
}
break;
case SUBSTITUTION_FILTER:
if (resource.getSubstitutionFilter() == null) {
- dataTransfer.setSubstitutionFilterForTopologyTemplate(null);
+ dataTransfer.setSubstitutionFilters(null);
} else {
final SubstitutionFilterConverter substitutionFilterConverter = new SubstitutionFilterConverter();
- final Map<String, UINodeFilter> filterUiMap = new HashMap<>();
- filterUiMap.put(resource.getUniqueId(), substitutionFilterConverter.convertToUi(resource.getSubstitutionFilter()));
- dataTransfer.setSubstitutionFilterForTopologyTemplate(filterUiMap);
+ dataTransfer.setSubstitutionFilters(substitutionFilterConverter.convertToUi(resource.getSubstitutionFilter()));
}
break;
case NODE_FILTER:
break;
case SUBSTITUTION_FILTER:
if (service.getSubstitutionFilter() == null) {
- dataTransfer.setSubstitutionFilterForTopologyTemplate(null);
+ dataTransfer.setSubstitutionFilters(null);
} else {
final SubstitutionFilterConverter substitutionFilterConverter = new SubstitutionFilterConverter();
- final Map<String, UINodeFilter> filterUiMap = new HashMap<>();
- filterUiMap.put(service.getUniqueId(), substitutionFilterConverter.convertToUi(service.getSubstitutionFilter()));
- dataTransfer.setSubstitutionFilterForTopologyTemplate(filterUiMap);
+ dataTransfer.setSubstitutionFilters(substitutionFilterConverter.convertToUi(service.getSubstitutionFilter()));
}
break;
default:
package org.openecomp.sdc.be.datamodel;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
import static org.hibernate.validator.internal.util.CollectionHelper.asSet;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.RequirementSubstitutionFilterPropertyDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.SubstitutionFilterDataDefinition;
import org.openecomp.sdc.be.model.ComponentInstanceProperty;
import org.openecomp.sdc.be.model.GroupDefinition;
import org.openecomp.sdc.be.model.PropertyDefinition;
import org.openecomp.sdc.be.model.Resource;
import org.openecomp.sdc.be.model.Service;
+import org.openecomp.sdc.be.ui.model.UIConstraint;
import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer;
import org.openecomp.sdc.be.ui.model.UiComponentMetadata;
import org.openecomp.sdc.be.ui.model.UiServiceDataTransfer;
UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
Collections.singletonList("substitutionFilter"));
- assertThat(uiComponentDataTransfer.getSubstitutionFilter()).isNull();
+ assertThat(uiComponentDataTransfer.getSubstitutionFilters()).isNull();
}
@Test
SubstitutionFilterDataDefinition substitutionFilter = new SubstitutionFilterDataDefinition();
substitutionFilter.setID(SUBSTITUTION_FILTER_UID);
+ final ListDataDefinition<RequirementSubstitutionFilterPropertyDataDefinition> expectedPropertyFilters = new ListDataDefinition<>();
+ var filter1 = new RequirementSubstitutionFilterPropertyDataDefinition();
+ filter1.setName("filter1");
+ filter1.setConstraints(Collections.singletonList("constraint1: {equal: testvalue1}\n"));
+ expectedPropertyFilters.add(filter1);
+
+ var filter2 = new RequirementSubstitutionFilterPropertyDataDefinition();
+ filter2.setName("filter2");
+ filter2.setConstraints(Collections.singletonList("constraint2: {equal: testvalue2}\n"));
+ expectedPropertyFilters.add(filter2);
+
+ substitutionFilter.setProperties(expectedPropertyFilters);
+
Resource resource = new ResourceBuilder().build();
resource.setSubstitutionFilter(substitutionFilter);
UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
Collections.singletonList("substitutionFilter"));
+ assertThat(uiComponentDataTransfer.getSubstitutionFilters()).isNotNull();
+
+ List<UIConstraint> propertyFilters = uiComponentDataTransfer.getSubstitutionFilters().getProperties();
+ assertFalse(propertyFilters.isEmpty());
+ assertEquals(propertyFilters.size(), substitutionFilter.getProperties().getListToscaDataDefinition().size());
+
+ verifyPropertyFilters(propertyFilters.get(0), "constraint1", "testvalue1", "static", "equal");
+ verifyPropertyFilters(propertyFilters.get(1), "constraint2", "testvalue2", "static", "equal");
+ }
- assertThat(uiComponentDataTransfer.getSubstitutionFilterForTopologyTemplate()).isNotEmpty();
+ private void verifyPropertyFilters(UIConstraint uiConstraint, String propertyName, String value, String sourceType, String operator){
+ assertEquals(propertyName, uiConstraint.getServicePropertyName());
+ assertEquals(value, uiConstraint.getValue());
+ assertEquals(sourceType, uiConstraint.getSourceType());
+ assertEquals(operator, uiConstraint.getConstraintOperator());
}
private Resource buildResourceWithGroups() {
private String derivedFromGenericVersion;
private String toscaType;
private Map<String, CINodeFilterDataDefinition> nodeFilterComponents;
- private Map<String, SubstitutionFilterDataDefinition> substitutionFilterComponents;
private Map<String, InterfaceDefinition> interfaces;
private List<DataTypeDefinition> dataTypes;
private SubstitutionFilterDataDefinition substitutionFilter;
component.setNodeFilterComponents(null);
}
if (ignoreSubstitutionFilter) {
- component.setSubstitutionFilterComponents(null);
+ component.setSubstitutionFilter(null);
}
if (ignoreDataType) {
component.setDataTypes(null);
private Map<String, MapInterfaceInstanceDataDefinition> instInterfaces;
private Map<String, MapInterfaceDataDefinition> componentInstInterfaces;
private Map<String, CINodeFilterDataDefinition> nodeFilterComponents;
- private Map<String, SubstitutionFilterDataDefinition> substitutionFilterDataDefinitionMap;
+ private SubstitutionFilterDataDefinition substitutionFilters;
//-----------------------------------------------------------------------
private Map<String, MapComponentInstanceExternalRefs> mapComponentInstancesExternalRefs;
//Component Instances External References (instanceId -> ExternalRefsMap)
import org.openecomp.sdc.common.api.Constants;
import org.openecomp.sdc.common.jsongraph.util.CommonUtility;
import org.openecomp.sdc.common.jsongraph.util.CommonUtility.LogLevelEnum;
+import org.openecomp.sdc.common.log.elements.ErrorLogOptionalData;
+import org.openecomp.sdc.common.log.enums.EcompErrorSeverity;
+import org.openecomp.sdc.common.log.enums.EcompLoggerErrorCode;
import org.openecomp.sdc.common.log.wrappers.Logger;
import org.openecomp.sdc.common.util.ValidationUtils;
import org.springframework.beans.factory.annotation.Autowired;
final Either<Map<String, SubstitutionFilterDataDefinition>, JanusGraphOperationStatus> result = getDataFromGraph(componentV,
EdgeLabelEnum.SUBSTITUTION_FILTER_TEMPLATE);
if (result.isLeft()) {
- topologyTemplate.setSubstitutionFilterDataDefinitionMap(result.left().value());
+ final Map<String, SubstitutionFilterDataDefinition> filters = result.left().value();
+ if (MapUtils.isEmpty(filters)) {
+ return JanusGraphOperationStatus.OK;
+ }
+ if(filters.values().size() > 1) {
+ log.error(EcompLoggerErrorCode.DATA_ERROR, TopologyTemplateOperation.class.getName(),
+ (ErrorLogOptionalData) null, "Only a single substitution filter is expected, but got '{}'", filters.values().size());
+ return JanusGraphOperationStatus.GENERAL_ERROR;
+ }
+ topologyTemplate.setSubstitutionFilters(new SubstitutionFilterDataDefinition(filters.values().iterator().next()));
} else {
if (result.right().value() != JanusGraphOperationStatus.NOT_FOUND) {
return result.right().value();
}
private static void convertSubstitutionFiltersComponents(final TopologyTemplate topologyTemplate, final Component component) {
- final Map<String, SubstitutionFilterDataDefinition> filters = topologyTemplate.getSubstitutionFilterDataDefinitionMap();
- if (MapUtils.isNotEmpty(filters)) {
- component.setSubstitutionFilter(filters.get(component.getUniqueId()));
+ final SubstitutionFilterDataDefinition filters = topologyTemplate.getSubstitutionFilters();
+ if (filters == null){
+ component.setSubstitutionFilter(null);
+ return;
}
+ component.setSubstitutionFilter(new SubstitutionFilterDataDefinition(filters));
}
private static void convertServiceApiArtifacts(TopologyTemplate topologyTemplate, Service service) {
private List<GroupDefinition> groups;
private Map<String, InterfaceDefinition> interfaces;
private Map<String, CINodeFilterDataDefinition> nodeFilter;
- private Map<String, SubstitutionFilterDataDefinition> substitutionFilter;
+ private UINodeFilter substitutionFilters;
private Map<String, UINodeFilter> nodeFilterforNode;
- private Map<String, UINodeFilter> substitutionFilterForTopologyTemplate;
private List<PropertyDefinition> properties;
private List<AttributeDefinition> attributes;
private Map<String, List<ComponentInstanceInterface>> componentInstancesInterfaces;
private loadSubstitutionFilter = (): void => {
this.topologyTemplateService.getSubstitutionFilterConstraints(this.compositeService.componentType, this.compositeService.uniqueId)
.subscribe((response) => {
- if (response.substitutionFilterForTopologyTemplate && response.substitutionFilterForTopologyTemplate[this.compositeService.uniqueId]) {
- this.constraintProperties = response.
- substitutionFilterForTopologyTemplate[this.compositeService.uniqueId].properties;
+ if(response.substitutionFilters) {
+ this.constraintProperties = response.substitutionFilters.properties;
}
});
}
public loadConstraints = (): void => {
this.topologyTemplateService.getSubstitutionFilterConstraints(this.metaData.componentType, this.metaData.uniqueId).subscribe((response) => {
- this.componentInstancesConstraints = response.substitutionFilterForTopologyTemplate;
+ this.componentInstancesConstraints = response.substitutionFilters;
});
}
public additionalInformation:any;
public derivedList:Array<any>;
public nodeFilterforNode: Array<any>;
- public substitutionFilterForTopologyTemplate: Array<any>;
+ public substitutionFilters: any;
public derivedFromGenericType;
public derivedFromGenericVersion;
if(response.nodeFilterforNode) {
this.nodeFilterforNode = response.nodeFilterforNode;
}
- if(response.substitutionFilterForTopologyTemplate) {
- this.substitutionFilterForTopologyTemplate = response.substitutionFilterForTopologyTemplate;
+ if(response.substitutionFilters) {
+ this.substitutionFilters = response.substitutionFilters;
}
if(response.derivedFromGenericType) {
this.derivedFromGenericType = response.derivedFromGenericType;