Add collaboration feature
[sdc.git] / openecomp-be / lib / openecomp-sdc-validation-lib / openecomp-sdc-validation-impl / src / main / java / org / openecomp / sdc / validation / impl / validators / ForbiddenResourceGuideLineValidator.java
1 package org.openecomp.sdc.validation.impl.validators;
2
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;
21
22 import java.util.HashSet;
23 import java.util.Map;
24 import java.util.Objects;
25 import java.util.Set;
26
27 /**
28  * Created by TALIO on 2/15/2017.
29  */
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");
36
37   private final Logger log = (Logger) LoggerFactory.getLogger(this.getClass().getName());
38
39   @Override
40   public void init(Map<String, Object> properties) {
41     Map<String, Map<String, Object>> forbiddenResourcesMap =
42         (Map<String, Map<String, Object>>) properties.get("forbiddenResourceTypes");
43
44     forbiddenResourcesMap.entrySet().stream()
45         .filter(entry -> isResourceEnabled(entry.getValue().get("enable")))
46         .forEach(entry -> forbiddenResources.add(entry.getKey()));
47   }
48
49   private boolean isResourceEnabled(Object enableValue){
50     if(Objects.isNull(enableValue)){
51       return true;
52     }
53
54     if(enableValue instanceof Boolean){
55       return (Boolean)enableValue;
56     }
57
58     return Boolean.valueOf((String) enableValue);
59   }
60
61
62   @Override
63   public void validate(GlobalValidationContext globalContext) {
64     ManifestContent manifestContent;
65     try {
66       manifestContent = ValidationUtil.validateManifest(globalContext);
67     } catch (Exception exception) {
68       log.debug("",exception);
69       return;
70     }
71
72     Map<String, FileData.Type> fileTypeMap = ManifestUtil.getFileTypeMap(manifestContent);
73
74     globalContext.getFiles().stream()
75         .filter(fileName -> FileData
76             .isHeatFile(fileTypeMap.get(fileName)))
77         .forEach(fileName -> validate(fileName, globalContext));
78   }
79
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) {
86       return;
87     }
88
89     validateResourceTypeIsForbidden(fileName, heatOrchestrationTemplate, globalContext);
90   }
91
92   private void validateResourceTypeIsForbidden(String fileName,
93                                                HeatOrchestrationTemplate heatOrchestrationTemplate,
94                                                GlobalValidationContext globalContext) {
95
96     mdcDataDebugMessage.debugEntryMessage("file", fileName);
97
98     Map<String, Resource> resourcesMap = heatOrchestrationTemplate.getResources();
99     if (MapUtils.isEmpty(resourcesMap)) {
100       mdcDataDebugMessage.debugExitMessage("file", fileName);
101       return;
102     }
103
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);
112       } else {
113         if (isResourceForbidden(resourceType)){
114            globalContext.addMessage(
115               fileName,
116               ErrorLevel.WARNING,
117               ErrorMessagesFormatBuilder
118                   .getErrorWithParameters(ERROR_CODE_FRG_2, Messages.FORBIDDEN_RESOURCE_IN_USE
119                           .getErrorMessage(),
120                       resourceType, resourceEntry.getKey()),
121               LoggerTragetServiceName.VALIDATE_FORBIDDEN_RESOURCE,
122               LoggerErrorDescription.FLOATING_IP_IN_USE);
123         }
124       }
125     }
126     mdcDataDebugMessage.debugExitMessage("file", fileName);
127   }
128
129   private boolean isResourceForbidden(String resourceType){
130     return forbiddenResources.contains(resourceType);
131   }
132 }