import org.openecomp.sdc.be.components.impl.utils.NodeFilterConstraintAction;
import org.openecomp.sdc.be.components.validation.NodeFilterValidator;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.datamodel.utils.ConstraintConvertor;
import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.RequirementNodeFilterCapabilityDataDefinition;
final String componentInstanceId,
final List<String> constraints,
final boolean shouldLock,
- final ComponentTypeEnum componentTypeEnum)
+ final ComponentTypeEnum componentTypeEnum,
+ final NodeFilterConstraintType nodeFilterConstraintType)
throws BusinessLogicException {
final Component component = getComponent(componentId);
lockComponent(component.getUniqueId(), component,"Update Node Filter on Component");
wasLocked = true;
}
- final List<RequirementNodeFilterPropertyDataDefinition> properties = constraints.stream()
- .map(this::getRequirementNodeFilterPropertyDataDefinition).collect(Collectors.toList());
- final Either<CINodeFilterDataDefinition, StorageOperationStatus> result = nodeFilterOperation
- .updateProperties(componentId, componentInstanceId, nodeFilterDataDefinition, properties);
+ final Either<CINodeFilterDataDefinition, StorageOperationStatus> result =
+ updateNodeFilterConstraint(componentId, componentInstanceId, constraints, nodeFilterConstraintType,
+ nodeFilterDataDefinition);
if (result.isRight()) {
janusGraphDao.rollback();
return Optional.ofNullable(nodeFilterDataDefinition);
}
+ private Either<CINodeFilterDataDefinition, StorageOperationStatus> updateNodeFilterConstraint(
+ final String componentId, final String componentInstanceId, final List<String> constraints,
+ final NodeFilterConstraintType nodeFilterConstraintType, final CINodeFilterDataDefinition nodeFilterDataDefinition) {
+
+ if (NodeFilterConstraintType.PROPERTIES.equals(nodeFilterConstraintType)) {
+ final List<RequirementNodeFilterPropertyDataDefinition> properties = constraints.stream()
+ .map(this::getRequirementNodeFilterPropertyDataDefinition).collect(Collectors.toList());
+ return nodeFilterOperation.updateProperties(componentId, componentInstanceId,
+ nodeFilterDataDefinition, properties);
+ }
+ final List<RequirementNodeFilterCapabilityDataDefinition> capabilities = constraints.stream()
+ .map(this::getRequirementNodeFilterCapabilityDataDefinition).collect(Collectors.toList());
+ return nodeFilterOperation.updateCapabilities(componentId, componentInstanceId,
+ nodeFilterDataDefinition, capabilities);
+ }
+
private Either<CINodeFilterDataDefinition, StorageOperationStatus> addNewNodeFilter(
final String componentId,
final String componentInstanceId,
requirementNodeFilterCapabilityDataDefinition);
}
+
private void unlockComponent(final String componentUniqueId,
final ComponentTypeEnum componentType) {
graphLockOperation.unlockComponent(componentUniqueId, componentType.getNodeType());
private RequirementNodeFilterPropertyDataDefinition getRequirementNodeFilterPropertyDataDefinition(
final String constraint) {
- final RequirementNodeFilterPropertyDataDefinition pdd = new RequirementNodeFilterPropertyDataDefinition();
- pdd.setConstraints(Arrays.asList(constraint));
- return pdd;
+ final RequirementNodeFilterPropertyDataDefinition requirementNodeFilterPropertyDataDefinition =
+ new RequirementNodeFilterPropertyDataDefinition();
+ requirementNodeFilterPropertyDataDefinition.setConstraints(Arrays.asList(constraint));
+ return requirementNodeFilterPropertyDataDefinition;
+ }
+
+ private RequirementNodeFilterCapabilityDataDefinition getRequirementNodeFilterCapabilityDataDefinition(
+ final String constraint) {
+
+ final RequirementNodeFilterCapabilityDataDefinition requirementNodeFilterCapabilityDataDefinition =
+ new RequirementNodeFilterCapabilityDataDefinition();
+ final ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> propertyDataDefinitionList =
+ new ListDataDefinition<>();
+ propertyDataDefinitionList.getListToscaDataDefinition().addAll(
+ Collections.singleton(getRequirementNodeFilterPropertyDataDefinition(constraint)));
+ requirementNodeFilterCapabilityDataDefinition.setName(new ConstraintConvertor().convert(constraint)
+ .getServicePropertyName());
+ requirementNodeFilterCapabilityDataDefinition.setProperties(propertyDataDefinitionList);
+ return requirementNodeFilterCapabilityDataDefinition;
}
private CINodeFilterDataDefinition validateAndReturnNodeFilterDefinition(final String componentInstanceId,
"Failed to parse constraint data", constraintData));
}
final List<String> constraints = new ConstraintConvertor().convertToList(uiConstraints);
+ final Optional<NodeFilterConstraintType> nodeFilterConstraintType =
+ NodeFilterConstraintType.parse(constraintType);
+ if (!nodeFilterConstraintType.isPresent()) {
+ return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT_PARAM,
+ "Invalid value for NodeFilterConstraintType enum %s", constraintType));
+ }
final Optional<CINodeFilterDataDefinition> actionResponse = componentNodeFilterBusinessLogic
.updateNodeFilter(componentId.toLowerCase(), componentInstanceId, constraints,
- true, componentTypeEnum);
+ true, componentTypeEnum, nodeFilterConstraintType.get());
if (!actionResponse.isPresent()) {
LOGGER.error(FAILED_TO_UPDATE_NODE_FILTER);
final List<String> constraints = requirementNodeFilterPropertyDataDefinition.getConstraints();
assertThrows(BusinessLogicException.class, () -> componentNodeFilterBusinessLogic
- .updateNodeFilter(componentId, componentInstanceId, constraints, true, ComponentTypeEnum.RESOURCE));
+ .updateNodeFilter(componentId, componentInstanceId, constraints, true, ComponentTypeEnum.RESOURCE,
+ NodeFilterConstraintType.PROPERTIES));
verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
verify(nodeFilterValidator, times(1)).validateFilter(resource, componentInstanceId,
constraints, NodeFilterConstraintAction.UPDATE)).thenReturn(Either.left(true));
assertThrows(BusinessLogicException.class, () -> componentNodeFilterBusinessLogic
- .updateNodeFilter(componentId, componentInstanceId, constraints, true, ComponentTypeEnum.RESOURCE));
+ .updateNodeFilter(componentId, componentInstanceId, constraints, true, ComponentTypeEnum.RESOURCE,
+ NodeFilterConstraintType.PROPERTIES));
verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
verify(nodeFilterValidator, times(1)).validateFilter(resource, componentInstanceId,
when(componentNodeFilterBusinessLogic
.updateNodeFilter(componentId, componentInstance, Collections.singletonList(constraint),
- true, ComponentTypeEnum.RESOURCE)).thenReturn(Optional.of(ciNodeFilterDataDefinition));
+ true, ComponentTypeEnum.RESOURCE, NodeFilterConstraintType.PROPERTIES))
+ .thenReturn(Optional.of(ciNodeFilterDataDefinition));
final Response response = target()
.path(path)
.request(MediaType.APPLICATION_JSON)
verify(componentNodeFilterBusinessLogic, times(1))
.updateNodeFilter(anyString(), anyString(), anyList(), anyBoolean(),
- ArgumentMatchers.any(ComponentTypeEnum.class));
+ ArgumentMatchers.any(ComponentTypeEnum.class), ArgumentMatchers.any(NodeFilterConstraintType.class));
assertThat(response.getStatus()).isEqualTo(HttpStatus.OK_200);
}
when(componentNodeFilterBusinessLogic
.updateNodeFilter(componentId, componentInstance, Collections.singletonList(constraint),
- true, ComponentTypeEnum.RESOURCE))
+ true, ComponentTypeEnum.RESOURCE, NodeFilterConstraintType.PROPERTIES))
.thenReturn(Optional.empty());
final Response response = target()
.path(path)
verify(componentNodeFilterBusinessLogic, times(1))
.updateNodeFilter(anyString(), anyString(), anyList(), anyBoolean(),
- ArgumentMatchers.any(ComponentTypeEnum.class));
+ ArgumentMatchers.any(ComponentTypeEnum.class), ArgumentMatchers.any(NodeFilterConstraintType.class));
assertThat(response.getStatus()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR_500);
}
public Either<CINodeFilterDataDefinition, StorageOperationStatus> updateProperties(
- final String serviceId, final String componentInstanceId,
+ final String componentId, final String componentInstanceId,
final CINodeFilterDataDefinition nodeFilterDataDefinition,
final List<RequirementNodeFilterPropertyDataDefinition> requirementNodeFilterPropertyDataDefinition) {
- ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> properties =
+ final ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> properties =
nodeFilterDataDefinition.getProperties();
properties.getListToscaDataDefinition().clear();
properties.getListToscaDataDefinition().addAll(requirementNodeFilterPropertyDataDefinition);
nodeFilterDataDefinition.setProperties(properties);
- return addOrUpdateNodeFilter(true, serviceId, componentInstanceId, nodeFilterDataDefinition);
+ return addOrUpdateNodeFilter(true, componentId, componentInstanceId, nodeFilterDataDefinition);
+ }
+
+ public Either<CINodeFilterDataDefinition, StorageOperationStatus> updateCapabilities(
+ final String componentId, final String componentInstanceId,
+ final CINodeFilterDataDefinition nodeFilterDataDefinition,
+ final List<RequirementNodeFilterCapabilityDataDefinition> requirementNodeFilterCapabilityDataDefinitions) {
+
+ final ListDataDefinition<RequirementNodeFilterCapabilityDataDefinition> capabilities =
+ nodeFilterDataDefinition.getCapabilities();
+ capabilities.getListToscaDataDefinition().clear();
+ capabilities.getListToscaDataDefinition().addAll(requirementNodeFilterCapabilityDataDefinitions);
+ nodeFilterDataDefinition.setCapabilities(capabilities);
+ return addOrUpdateNodeFilter(true, componentId, componentInstanceId, nodeFilterDataDefinition);
}
public Either<CINodeFilterDataDefinition, StorageOperationStatus> updateNodeFilter(final String serviceId,
VertexTypeEnum.NODE_FILTER_TEMPLATE, toscaDataList, JsonPresentationFields.UNIQUE_ID);
}
}
-
}