diff options
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/HeatResourceValidator.java')
-rw-r--r-- | openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/HeatResourceValidator.java | 307 |
1 files changed, 121 insertions, 186 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/HeatResourceValidator.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/HeatResourceValidator.java index e445477498..abdb65670e 100644 --- a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/HeatResourceValidator.java +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/HeatResourceValidator.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.openecomp.sdc.validation.impl.validators; import java.util.ArrayList; @@ -24,7 +23,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; - import org.openecomp.core.validation.types.GlobalValidationContext; import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate; import org.openecomp.sdc.heat.datatypes.model.Output; @@ -39,210 +37,147 @@ import org.openecomp.sdc.validation.type.ConfigConstants; import org.openecomp.sdc.validation.type.HeatResourceValidationContext; public class HeatResourceValidator extends ResourceBaseValidator { - private static final Logger LOGGER = LoggerFactory.getLogger(ResourceBaseValidator.class); - private static final String GET_ATTR = "get_attr"; - - @Override - public void init(Map<String, Object> properties) { - super.init((Map<String, Object>) properties.get(ConfigConstants.Resource_Base_Validator)); - } - - @Override - public ValidationContext createValidationContext(String fileName, - String envFileName, - HeatOrchestrationTemplate heatOrchestrationTemplate, - GlobalValidationContext globalContext) { - Map<String, Resource> resourcesMap = - heatOrchestrationTemplate.getResources() == null ? new HashMap<>() - : heatOrchestrationTemplate.getResources(); - - Map<String, Output> outputMap = heatOrchestrationTemplate.getOutputs() == null ? new HashMap<>() - : heatOrchestrationTemplate.getOutputs(); - - Map<String, Map<String, Map<String, List<String>>>> - typeToPointingResourcesMap = new HashMap<>(); - - initTypeRelationsMap (fileName, resourcesMap, outputMap, - typeToPointingResourcesMap, globalContext); - - return new HeatResourceValidationContext (heatOrchestrationTemplate, typeToPointingResourcesMap, - envFileName ); - } - - private void initTypeRelationsMap (String fileName, - Map<String, Resource> resourceMap, - Map<String, Output> outputMap, - Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap, - GlobalValidationContext globalContext ) { - initTypeRelationsMapFromResourcesMap (fileName, resourceMap, - typeToPointingResourcesMap, globalContext); - - initTypeRelationsMapFromOutputsMap (fileName, resourceMap, outputMap, - typeToPointingResourcesMap, globalContext); - } - - private void initTypeRelationsMapFromOutputsMap (String fileName, - Map<String, Resource> resourceMap, - Map<String, Output> outputMap, - Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap, - GlobalValidationContext globalContext ) { - for (Map.Entry<String, Output> outputEntry : outputMap.entrySet()) { - Object outputValue = outputEntry.getValue().getValue(); - Set<String> referencedResources = HeatStructureUtil - .getReferencedValuesByFunctionName(fileName, - ResourceReferenceFunctions.GET_RESOURCE.getFunction(), outputValue, globalContext); - - updateRelationsMapWithOutputsReferences (outputEntry, resourceMap, referencedResources, typeToPointingResourcesMap); - } - } - private void updateRelationsMapWithOutputsReferences (Map.Entry<String, Output> outputEntry, - Map<String, Resource> resourceMap, - Set<String> referencedResources, - Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap ) { + private static final Logger LOGGER = LoggerFactory.getLogger(ResourceBaseValidator.class); + private static final String GET_ATTR = "get_attr"; - for (String pointedResourceName : referencedResources) { - Resource pointedResource = resourceMap.get(pointedResourceName); + @Override + public void init(Map<String, Object> properties) { + super.init((Map<String, Object>) properties.get(ConfigConstants.Resource_Base_Validator)); + } - if (Objects.nonNull(pointedResource)) { - initCurrentResourceTypeInMap(pointedResourceName, pointedResource.getType(), - "output", typeToPointingResourcesMap); + @Override + public ValidationContext createValidationContext(String fileName, String envFileName, HeatOrchestrationTemplate heatOrchestrationTemplate, + GlobalValidationContext globalContext) { + Map<String, Resource> resourcesMap = + heatOrchestrationTemplate.getResources() == null ? new HashMap<>() : heatOrchestrationTemplate.getResources(); + Map<String, Output> outputMap = heatOrchestrationTemplate.getOutputs() == null ? new HashMap<>() : heatOrchestrationTemplate.getOutputs(); + Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap = new HashMap<>(); + initTypeRelationsMap(fileName, resourcesMap, outputMap, typeToPointingResourcesMap, globalContext); + return new HeatResourceValidationContext(heatOrchestrationTemplate, typeToPointingResourcesMap, envFileName); + } - typeToPointingResourcesMap - .get(pointedResource.getType()).get(pointedResourceName) - .get("output").add(outputEntry.getKey()); - } + private void initTypeRelationsMap(String fileName, Map<String, Resource> resourceMap, Map<String, Output> outputMap, + Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap, + GlobalValidationContext globalContext) { + initTypeRelationsMapFromResourcesMap(fileName, resourceMap, typeToPointingResourcesMap, globalContext); + initTypeRelationsMapFromOutputsMap(fileName, resourceMap, outputMap, typeToPointingResourcesMap, globalContext); } - } - private void initTypeRelationsMapFromResourcesMap(String fileName, - Map<String, Resource> resourceMap, + private void initTypeRelationsMapFromOutputsMap(String fileName, Map<String, Resource> resourceMap, Map<String, Output> outputMap, Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap, GlobalValidationContext globalContext) { - for (Map.Entry<String, Resource> resourceEntry : resourceMap.entrySet()) { - Resource pointingResource = resourceEntry.getValue(); - Map<String, Object> properties = - pointingResource.getProperties() == null ? new HashMap<>() - : pointingResource.getProperties(); - - Set<String> referencedResourcesByGetResource = - getResourcesIdsPointedByCurrentResource(fileName, ResourceReferenceFunctions.GET_RESOURCE, - properties, globalContext); - - Set<String> referencedResourcesByGetAttr = - handleGetAttrBetweenResources(properties); - - referencedResourcesByGetResource.addAll(referencedResourcesByGetAttr); - - updateRelationsMapWithCurrentResourceReferences - (resourceMap, resourceEntry, referencedResourcesByGetResource, typeToPointingResourcesMap); + for (Map.Entry<String, Output> outputEntry : outputMap.entrySet()) { + Object outputValue = outputEntry.getValue().getValue(); + Set<String> referencedResources = HeatStructureUtil + .getReferencedValuesByFunctionName(fileName, ResourceReferenceFunctions.GET_RESOURCE.getFunction(), outputValue, globalContext); + updateRelationsMapWithOutputsReferences(outputEntry, resourceMap, referencedResources, typeToPointingResourcesMap); + } } - } - - private void updateRelationsMapWithCurrentResourceReferences(Map<String, Resource> resourceMap, - Map.Entry<String, Resource> currentResourceEntry, - Set<String> referencedResourcesFromCurrentResource, - Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap) { - - for (String pointedResourceName : referencedResourcesFromCurrentResource) { - Resource pointedResource = resourceMap.get(pointedResourceName); - if (Objects.nonNull(pointedResource)) { - String pointedResourceType = pointedResource.getType(); - updateMapWithRelationsBetweenResources (pointedResourceName, pointedResourceType, - currentResourceEntry, typeToPointingResourcesMap); - } + private void updateRelationsMapWithOutputsReferences(Map.Entry<String, Output> outputEntry, Map<String, Resource> resourceMap, + Set<String> referencedResources, + Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap) { + for (String pointedResourceName : referencedResources) { + Resource pointedResource = resourceMap.get(pointedResourceName); + if (Objects.nonNull(pointedResource)) { + initCurrentResourceTypeInMap(pointedResourceName, pointedResource.getType(), "output", typeToPointingResourcesMap); + typeToPointingResourcesMap.get(pointedResource.getType()).get(pointedResourceName).get("output").add(outputEntry.getKey()); + } + } } - } - - private void updateMapWithRelationsBetweenResources(String pointedResourceName, - String pointedResourceType, - Map.Entry<String, Resource> currentResourceEntry, - Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap) { - - initCurrentResourceTypeInMap(pointedResourceName, pointedResourceType, - currentResourceEntry.getValue().getType(), typeToPointingResourcesMap); - - typeToPointingResourcesMap.get(pointedResourceType).get(pointedResourceName) - .get(currentResourceEntry.getValue().getType()).add(currentResourceEntry.getKey()); - } - - private void initCurrentResourceTypeInMap(String resourceName, String resourceType, - String pointingResourceType, - Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap) { - - typeToPointingResourcesMap.putIfAbsent(resourceType, new HashMap<>()); - typeToPointingResourcesMap.get(resourceType).putIfAbsent(resourceName, new HashMap<>()); - typeToPointingResourcesMap.get(resourceType).get(resourceName) - .putIfAbsent (pointingResourceType, new ArrayList<>()); - } - - private Set<String> handleGetAttrBetweenResources (Map<String, Object> properties) { - Set<String> referencedResourcesByGetAttr = new HashSet<>(); - for (Map.Entry<String, Object> proprtyEntry : properties.entrySet()) { - referencedResourcesByGetAttr.addAll(getGetAttrReferencesInCaseOfContrail(proprtyEntry - .getValue())); + + private void initTypeRelationsMapFromResourcesMap(String fileName, Map<String, Resource> resourceMap, + Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap, + GlobalValidationContext globalContext) { + for (Map.Entry<String, Resource> resourceEntry : resourceMap.entrySet()) { + Resource pointingResource = resourceEntry.getValue(); + Map<String, Object> properties = pointingResource.getProperties() == null ? new HashMap<>() : pointingResource.getProperties(); + Set<String> referencedResourcesByGetResource = getResourcesIdsPointedByCurrentResource(fileName, ResourceReferenceFunctions.GET_RESOURCE, + properties, globalContext); + Set<String> referencedResourcesByGetAttr = handleGetAttrBetweenResources(properties); + referencedResourcesByGetResource.addAll(referencedResourcesByGetAttr); + updateRelationsMapWithCurrentResourceReferences(resourceMap, resourceEntry, referencedResourcesByGetResource, typeToPointingResourcesMap); + } } - return referencedResourcesByGetAttr; - } + private void updateRelationsMapWithCurrentResourceReferences(Map<String, Resource> resourceMap, Map.Entry<String, Resource> currentResourceEntry, + Set<String> referencedResourcesFromCurrentResource, + Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap) { + for (String pointedResourceName : referencedResourcesFromCurrentResource) { + Resource pointedResource = resourceMap.get(pointedResourceName); + if (Objects.nonNull(pointedResource)) { + String pointedResourceType = pointedResource.getType(); + updateMapWithRelationsBetweenResources(pointedResourceName, pointedResourceType, currentResourceEntry, typeToPointingResourcesMap); + } + } + } + private void updateMapWithRelationsBetweenResources(String pointedResourceName, String pointedResourceType, + Map.Entry<String, Resource> currentResourceEntry, + Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap) { + initCurrentResourceTypeInMap(pointedResourceName, pointedResourceType, currentResourceEntry.getValue().getType(), typeToPointingResourcesMap); + typeToPointingResourcesMap.get(pointedResourceType).get(pointedResourceName).get(currentResourceEntry.getValue().getType()) + .add(currentResourceEntry.getKey()); + } - private Set<String> getGetAttrReferencesInCaseOfContrail(Object propertyValue) { - Set<String> getAttrReferences = new HashSet<>(); + private void initCurrentResourceTypeInMap(String resourceName, String resourceType, String pointingResourceType, + Map<String, Map<String, Map<String, List<String>>>> typeToPointingResourcesMap) { + typeToPointingResourcesMap.putIfAbsent(resourceType, new HashMap<>()); + typeToPointingResourcesMap.get(resourceType).putIfAbsent(resourceName, new HashMap<>()); + typeToPointingResourcesMap.get(resourceType).get(resourceName).putIfAbsent(pointingResourceType, new ArrayList<>()); + } - if (propertyValue instanceof Map) { - if (((Map) propertyValue).containsKey(GET_ATTR)) { - if (validatePropertyValueAndAddAttrReferencesInSet(propertyValue, getAttrReferences)) { - return getAttrReferences; + private Set<String> handleGetAttrBetweenResources(Map<String, Object> properties) { + Set<String> referencedResourcesByGetAttr = new HashSet<>(); + for (Map.Entry<String, Object> proprtyEntry : properties.entrySet()) { + referencedResourcesByGetAttr.addAll(getGetAttrReferencesInCaseOfContrail(proprtyEntry.getValue())); } - } else { - Collection<Object> valCollection = ((Map) propertyValue).values(); - for (Object entryValue : valCollection) { - getAttrReferences.addAll(getGetAttrReferencesInCaseOfContrail(entryValue)); + return referencedResourcesByGetAttr; + } + + private Set<String> getGetAttrReferencesInCaseOfContrail(Object propertyValue) { + Set<String> getAttrReferences = new HashSet<>(); + if (propertyValue instanceof Map) { + if (((Map) propertyValue).containsKey(GET_ATTR)) { + if (validatePropertyValueAndAddAttrReferencesInSet(propertyValue, getAttrReferences)) { + return getAttrReferences; + } + } else { + Collection<Object> valCollection = ((Map) propertyValue).values(); + for (Object entryValue : valCollection) { + getAttrReferences.addAll(getGetAttrReferencesInCaseOfContrail(entryValue)); + } + } + } else if (propertyValue instanceof List) { + for (Object prop : (List) propertyValue) { + getAttrReferences.addAll(getGetAttrReferencesInCaseOfContrail(prop)); + } } - } - } else if (propertyValue instanceof List) { - for (Object prop : (List) propertyValue) { - getAttrReferences.addAll(getGetAttrReferencesInCaseOfContrail(prop)); - } + return getAttrReferences; } - return getAttrReferences; - } - - private boolean validatePropertyValueAndAddAttrReferencesInSet(Object propertyValue, - Set<String> getAttrReferences) { - Object value = ((Map) propertyValue).get(GET_ATTR ); - if (value instanceof List && ((List) value).size() == 2 - && ("fq_name").equals(((List) value).get(1))) { - if (((List) value).get(0) instanceof String) { - String attrReference = (((List) value).get(0)).toString(); - getAttrReferences.add(attrReference); - return true; - } else { - LOGGER.warn("invalid format of 'get_attr' function - " + propertyValue.toString()); - } - } - return false; - } - - - private Set<String> getResourcesIdsPointedByCurrentResource(String fileName, - ResourceReferenceFunctions function, - Map<String, Object> properties, - GlobalValidationContext globalContext) { - - Set<String> referencedResources = new HashSet<>(); - for (Map.Entry<String, Object> propertyEntry : properties.entrySet()) { - referencedResources - .addAll(HeatStructureUtil - .getReferencedValuesByFunctionName(fileName, - function.getFunction(), - propertyEntry.getValue(), - globalContext)); + private boolean validatePropertyValueAndAddAttrReferencesInSet(Object propertyValue, Set<String> getAttrReferences) { + Object value = ((Map) propertyValue).get(GET_ATTR); + if (value instanceof List && ((List) value).size() == 2 && ("fq_name").equals(((List) value).get(1))) { + if (((List) value).get(0) instanceof String) { + String attrReference = (((List) value).get(0)).toString(); + getAttrReferences.add(attrReference); + return true; + } else { + LOGGER.warn("invalid format of 'get_attr' function - " + propertyValue.toString()); + } + } + return false; } - return referencedResources; - } + private Set<String> getResourcesIdsPointedByCurrentResource(String fileName, ResourceReferenceFunctions function, Map<String, Object> properties, + GlobalValidationContext globalContext) { + Set<String> referencedResources = new HashSet<>(); + for (Map.Entry<String, Object> propertyEntry : properties.entrySet()) { + referencedResources.addAll( + HeatStructureUtil.getReferencedValuesByFunctionName(fileName, function.getFunction(), propertyEntry.getValue(), globalContext)); + } + return referencedResources; + } } |