aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/ContrailValidator.java
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/ContrailValidator.java')
-rw-r--r--openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/ContrailValidator.java201
1 files changed, 201 insertions, 0 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/ContrailValidator.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/ContrailValidator.java
new file mode 100644
index 0000000000..3e7d83457f
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/ContrailValidator.java
@@ -0,0 +1,201 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.validation.impl.validators;
+
+import org.apache.commons.collections4.MapUtils;
+import org.openecomp.core.utilities.yaml.YamlUtil;
+import org.openecomp.sdc.validation.Validator;
+import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
+import org.openecomp.core.validation.types.GlobalValidationContext;
+import org.openecomp.sdc.common.errors.Messages;
+import org.openecomp.sdc.datatypes.error.ErrorLevel;
+import org.openecomp.sdc.heat.datatypes.manifest.FileData;
+import org.openecomp.sdc.heat.datatypes.manifest.ManifestContent;
+import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
+import org.openecomp.sdc.heat.datatypes.model.Resource;
+import org.openecomp.sdc.heat.services.HeatConstants;
+import org.openecomp.sdc.heat.services.manifest.ManifestUtil;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
+import org.openecomp.sdc.logging.types.LoggerErrorDescription;
+import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
+import org.openecomp.sdc.validation.tos.ContrailResourcesMappingTo;
+import org.openecomp.sdc.validation.util.ValidationUtil;
+
+import java.io.InputStream;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+
+
+public class ContrailValidator implements Validator {
+ public static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+ protected static Logger logger = (Logger) LoggerFactory.getLogger(ContrailValidator.class);
+
+ @Override
+ public void validate(GlobalValidationContext globalContext) {
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
+ ManifestContent manifestContent;
+ try {
+ manifestContent = ValidationUtil.checkValidationPreCondition(globalContext);
+ } catch (Exception exception) {
+ return;
+ }
+ Map<String, FileData.Type> fileTypeMap = ManifestUtil.getFileTypeMap(manifestContent);
+ ContrailResourcesMappingTo contrailResourcesMappingTo = new ContrailResourcesMappingTo();
+
+ globalContext.getFiles().stream()
+ .filter(fileName -> FileData.isHeatFile(fileTypeMap.get(fileName)))
+ .forEach(fileName -> validate(fileName, fileTypeMap,
+ contrailResourcesMappingTo, globalContext));
+
+ mdcDataDebugMessage.debugExitMessage(null, null);
+ }
+
+
+ private void validate(String fileName, Map<String, FileData.Type> fileTypeMap,
+ ContrailResourcesMappingTo contrailResourcesMappingTo,
+ GlobalValidationContext globalContext) {
+ handleContrailV1AndContrailV2ResourceMerging(fileName, fileTypeMap, contrailResourcesMappingTo,
+ globalContext);
+ validateNoContrailResourceTypeIsInUse(fileName, globalContext);
+ }
+
+
+ private void handleContrailV1AndContrailV2ResourceMerging(String fileName,
+ Map<String, FileData.Type> fileTypeMap,
+ ContrailResourcesMappingTo contrailResourcesMappingTo,
+ GlobalValidationContext globalContext) {
+
+
+ mdcDataDebugMessage.debugEntryMessage("file", fileName);
+
+ Optional<ContrailResourcesMappingTo> fileContrailResourcesMappingTo =
+ collectHeatFileContrailResources(globalContext, fileName);
+ if (fileContrailResourcesMappingTo.isPresent()) {
+ contrailResourcesMappingTo.addAll(fileContrailResourcesMappingTo.get());
+ }
+ addContrailMergeValidationMessageToGlobalContext(globalContext, contrailResourcesMappingTo);
+
+ mdcDataDebugMessage.debugExitMessage("file", fileName);
+ }
+
+ private void addContrailMergeValidationMessageToGlobalContext(
+ GlobalValidationContext globalContext,
+ ContrailResourcesMappingTo contrailResourcesMappingTo) {
+
+
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
+ if (!MapUtils.isEmpty(contrailResourcesMappingTo.getContrailV1Resources())
+ && !MapUtils.isEmpty(contrailResourcesMappingTo.getContrailV2Resources())) {
+ globalContext.addMessage(
+ contrailResourcesMappingTo.getContrailV1Resources().keySet().iterator().next(),
+ ErrorLevel.WARNING, ErrorMessagesFormatBuilder.getErrorWithParameters(
+ Messages.MERGE_OF_CONTRAIL2_AND_CONTRAIL3_RESOURCES.getErrorMessage(),
+ contrailResourcesMappingTo.fetchContrailV1Resources(),
+ contrailResourcesMappingTo.fetchContrailV2Resources()),
+ LoggerTragetServiceName.MERGE_OF_CONTRAIL_2_AND_3,
+ LoggerErrorDescription.MERGE_CONTRAIL_2_AND_3);
+ }
+
+ mdcDataDebugMessage.debugExitMessage(null, null);
+ }
+
+ private Optional<ContrailResourcesMappingTo> collectHeatFileContrailResources(
+ GlobalValidationContext globalContext, String fileName) {
+ Optional<InputStream> fileContent = globalContext.getFileContent(fileName);
+ if (!fileContent.isPresent()) {
+ globalContext.addMessage(fileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
+ .getErrorWithParameters(Messages.INVALID_HEAT_FORMAT_REASON.getErrorMessage(),
+ "The file '" + fileName + "' has no content"),
+ LoggerTragetServiceName.VALIDATE_HEAT_FORMAT, LoggerErrorDescription.INVALID_HEAT_FORMAT);
+ return Optional.empty();
+ }
+ return fetchContrailResourcesMapping(fileName, fileContent.get(), globalContext);
+ }
+
+ private Optional<ContrailResourcesMappingTo> fetchContrailResourcesMapping(String fileName,
+ InputStream fileContent,
+ GlobalValidationContext globalContext) {
+
+
+ mdcDataDebugMessage.debugEntryMessage("file", fileName);
+
+ ContrailResourcesMappingTo contrailResourcesMappingTo = new ContrailResourcesMappingTo();
+ HeatOrchestrationTemplate heatOrchestrationTemplate;
+ try {
+ heatOrchestrationTemplate =
+ new YamlUtil().yamlToObject(fileContent, HeatOrchestrationTemplate.class);
+ } catch (Exception ignored) {
+ // the HeatValidator should handle file that is failing to parse
+ mdcDataDebugMessage.debugExitMessage("file", fileName);
+ return Optional.empty();
+ }
+ if( !MapUtils.isEmpty(heatOrchestrationTemplate.getResources())) {
+ heatOrchestrationTemplate.getResources().entrySet()
+ .forEach(entry -> {
+ if (entry.getValue().getType().startsWith(HeatConstants.CONTRAIL_RESOURCE_PREFIX)) {
+ contrailResourcesMappingTo.addContrailV1Resource(fileName, entry.getKey());
+ } else if (entry.getValue().getType()
+ .startsWith(HeatConstants.CONTRAIL_V2_RESOURCE_PREFIX)) {
+ contrailResourcesMappingTo.addContrailV2Resource(fileName, entry.getKey());
+ }
+ });
+ }
+
+ mdcDataDebugMessage.debugExitMessage("file", fileName);
+ return Optional.of(contrailResourcesMappingTo);
+ }
+
+
+ private void validateNoContrailResourceTypeIsInUse(String fileName,
+ GlobalValidationContext globalContext) {
+
+ mdcDataDebugMessage.debugEntryMessage("file", fileName);
+
+ HeatOrchestrationTemplate heatOrchestrationTemplate =
+ ValidationUtil.checkHeatOrchestrationPreCondition(fileName, globalContext);
+
+ if (heatOrchestrationTemplate == null) {
+ return;
+ }
+
+ Map<String, Resource> resourcesMap = heatOrchestrationTemplate.getResources();
+
+ if( ! MapUtils.isEmpty(resourcesMap)) {
+ for (Map.Entry<String, Resource> resourceEntry : resourcesMap.entrySet()) {
+ String type = resourceEntry.getValue().getType();
+ if (Objects.nonNull(type) && type.startsWith(HeatConstants.CONTRAIL_RESOURCE_PREFIX)) {
+ globalContext.addMessage(fileName, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
+ .getErrorWithParameters(Messages.CONTRAIL_2_IN_USE.getErrorMessage(),
+ resourceEntry.getKey()), LoggerTragetServiceName.CONTRAIL_2_IN_USE,
+ LoggerErrorDescription.CONTRAIL_2_IN_USE);
+ }
+ }
+ }
+
+ mdcDataDebugMessage.debugExitMessage("file", fileName);
+ }
+
+}