1 package org.openecomp.sdc.validation.impl.validators;
3 import org.apache.commons.collections4.MapUtils;
4 import org.openecomp.core.validation.ErrorMessageCode;
5 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
6 import org.openecomp.core.validation.types.GlobalValidationContext;
7 import org.openecomp.sdc.common.errors.Messages;
8 import org.openecomp.sdc.datatypes.error.ErrorLevel;
9 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
10 import org.openecomp.sdc.heat.datatypes.manifest.ManifestContent;
11 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
12 import org.openecomp.sdc.heat.datatypes.model.Resource;
13 import org.openecomp.sdc.heat.services.manifest.ManifestUtil;
14 import org.openecomp.sdc.logging.api.Logger;
15 import org.openecomp.sdc.logging.api.LoggerFactory;
16 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
17 import org.openecomp.sdc.logging.types.LoggerErrorDescription;
18 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
19 import org.openecomp.sdc.validation.Validator;
20 import org.openecomp.sdc.validation.util.ValidationUtil;
22 import java.util.HashSet;
24 import java.util.Objects;
28 * Created by TALIO on 2/15/2017.
30 public class ForbiddenResourceGuideLineValidator implements Validator {
31 private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
32 private static Set<String> forbiddenResources = new HashSet<>();
33 private static final ErrorMessageCode ERROR_CODE_FRG_1 = new ErrorMessageCode("FRG1");
34 private static final ErrorMessageCode ERROR_CODE_FRG_2 = new ErrorMessageCode("FRG2");
35 private static final ErrorMessageCode ERROR_CODE_FRG_3 = new ErrorMessageCode("FRG3");
37 private final Logger log = (Logger) LoggerFactory.getLogger(this.getClass().getName());
40 public void init(Map<String, Object> properties) {
41 Map<String, Map<String, Object>> forbiddenResourcesMap =
42 (Map<String, Map<String, Object>>) properties.get("forbiddenResourceTypes");
44 forbiddenResourcesMap.entrySet().stream()
45 .filter(entry -> isResourceEnabled(entry.getValue().get("enable")))
46 .forEach(entry -> forbiddenResources.add(entry.getKey()));
49 private boolean isResourceEnabled(Object enableValue){
50 if(Objects.isNull(enableValue)){
54 if(enableValue instanceof Boolean){
55 return (Boolean)enableValue;
58 return Boolean.valueOf((String) enableValue);
63 public void validate(GlobalValidationContext globalContext) {
64 ManifestContent manifestContent;
66 manifestContent = ValidationUtil.validateManifest(globalContext);
67 } catch (Exception exception) {
68 log.debug("",exception);
72 Map<String, FileData.Type> fileTypeMap = ManifestUtil.getFileTypeMap(manifestContent);
74 globalContext.getFiles().stream()
75 .filter(fileName -> FileData
76 .isHeatFile(fileTypeMap.get(fileName)))
77 .forEach(fileName -> validate(fileName, globalContext));
80 private void validate(String fileName, GlobalValidationContext globalContext) {
81 globalContext.setMessageCode(ERROR_CODE_FRG_3);
82 HeatOrchestrationTemplate
83 heatOrchestrationTemplate = ValidationUtil.checkHeatOrchestrationPreCondition(
84 fileName, globalContext);
85 if (heatOrchestrationTemplate == null) {
89 validateResourceTypeIsForbidden(fileName, heatOrchestrationTemplate, globalContext);
92 private void validateResourceTypeIsForbidden(String fileName,
93 HeatOrchestrationTemplate heatOrchestrationTemplate,
94 GlobalValidationContext globalContext) {
96 mdcDataDebugMessage.debugEntryMessage("file", fileName);
98 Map<String, Resource> resourcesMap = heatOrchestrationTemplate.getResources();
99 if (MapUtils.isEmpty(resourcesMap)) {
100 mdcDataDebugMessage.debugExitMessage("file", fileName);
104 for (Map.Entry<String, Resource> resourceEntry : resourcesMap.entrySet()) {
105 String resourceType = resourceEntry.getValue().getType();
106 if (Objects.isNull(resourceType)) {
107 globalContext.addMessage(fileName, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
108 .getErrorWithParameters(ERROR_CODE_FRG_1,
109 Messages.INVALID_RESOURCE_TYPE.getErrorMessage(),"null",
110 resourceEntry.getKey()), LoggerTragetServiceName.VALIDATE_RESOURCE_TYPE,
111 LoggerErrorDescription.INVALID_RESOURCE_TYPE);
113 if (isResourceForbidden(resourceType)){
114 globalContext.addMessage(
117 ErrorMessagesFormatBuilder
118 .getErrorWithParameters(ERROR_CODE_FRG_2, Messages.FORBIDDEN_RESOURCE_IN_USE
120 resourceType, resourceEntry.getKey()),
121 LoggerTragetServiceName.VALIDATE_FORBIDDEN_RESOURCE,
122 LoggerErrorDescription.FLOATING_IP_IN_USE);
126 mdcDataDebugMessage.debugExitMessage("file", fileName);
129 private boolean isResourceForbidden(String resourceType){
130 return forbiddenResources.contains(resourceType);