2 * Copyright © 2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.validation.impl.validators;
19 import org.apache.commons.collections4.MapUtils;
20 import org.openecomp.core.validation.ErrorMessageCode;
21 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
22 import org.openecomp.core.validation.types.GlobalValidationContext;
23 import org.openecomp.sdc.common.errors.Messages;
24 import org.openecomp.sdc.datatypes.error.ErrorLevel;
25 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
26 import org.openecomp.sdc.heat.datatypes.manifest.ManifestContent;
27 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
28 import org.openecomp.sdc.heat.datatypes.model.Resource;
29 import org.openecomp.sdc.heat.services.manifest.ManifestUtil;
30 import org.openecomp.sdc.logging.api.Logger;
31 import org.openecomp.sdc.logging.api.LoggerFactory;
32 import org.openecomp.sdc.validation.Validator;
33 import org.openecomp.sdc.validation.util.ValidationUtil;
35 import java.util.HashSet;
37 import java.util.Objects;
40 public class ForbiddenResourceGuideLineValidator implements Validator {
41 private static Set<String> forbiddenResources = new HashSet<>();
42 private static final ErrorMessageCode ERROR_CODE_FRG_1 = new ErrorMessageCode("FRG1");
43 private static final ErrorMessageCode ERROR_CODE_FRG_2 = new ErrorMessageCode("FRG2");
44 private static final ErrorMessageCode ERROR_CODE_FRG_3 = new ErrorMessageCode("FRG3");
46 private static final Logger LOGGER = LoggerFactory
47 .getLogger(ForbiddenResourceGuideLineValidator.class);
50 public void init(Map<String, Object> properties) {
51 Map<String, Map<String, Object>> forbiddenResourcesMap =
52 (Map<String, Map<String, Object>>) properties.get("forbiddenResourceTypes");
54 forbiddenResourcesMap.entrySet().stream()
55 .filter(entry -> isResourceEnabled(entry.getValue().get("enable")))
56 .forEach(entry -> forbiddenResources.add(entry.getKey()));
59 private boolean isResourceEnabled(Object enableValue) {
60 if (Objects.isNull(enableValue)) {
64 if (enableValue instanceof Boolean) {
65 return (Boolean)enableValue;
68 return Boolean.valueOf((String) enableValue);
73 public void validate(GlobalValidationContext globalContext) {
74 ManifestContent manifestContent;
76 manifestContent = ValidationUtil.validateManifest(globalContext);
77 } catch (Exception exception) {
78 LOGGER.error("Failed to validate manifest file", exception);
82 Map<String, FileData.Type> fileTypeMap = ManifestUtil.getFileTypeMap(manifestContent);
84 globalContext.getFiles().stream()
85 .filter(fileName -> FileData
86 .isHeatFile(fileTypeMap.get(fileName)))
87 .forEach(fileName -> validate(fileName, globalContext));
90 private void validate(String fileName, GlobalValidationContext globalContext) {
91 globalContext.setMessageCode(ERROR_CODE_FRG_3);
92 HeatOrchestrationTemplate
93 heatOrchestrationTemplate = ValidationUtil.checkHeatOrchestrationPreCondition(
94 fileName, globalContext);
95 if (heatOrchestrationTemplate == null) {
99 validateResourceTypeIsForbidden(fileName, heatOrchestrationTemplate, globalContext);
102 private void validateResourceTypeIsForbidden(String fileName,
103 HeatOrchestrationTemplate heatOrchestrationTemplate,
104 GlobalValidationContext globalContext) {
105 Map<String, Resource> resourcesMap = heatOrchestrationTemplate.getResources();
106 if (MapUtils.isEmpty(resourcesMap)) {
110 for (Map.Entry<String, Resource> resourceEntry : resourcesMap.entrySet()) {
111 String resourceType = resourceEntry.getValue().getType();
112 if (Objects.isNull(resourceType)) {
113 globalContext.addMessage(fileName, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
114 .getErrorWithParameters(ERROR_CODE_FRG_1,
115 Messages.INVALID_RESOURCE_TYPE.getErrorMessage(),"null",
116 resourceEntry.getKey()));
118 if (isResourceForbidden(resourceType)) {
119 globalContext.addMessage(
122 ErrorMessagesFormatBuilder
123 .getErrorWithParameters(ERROR_CODE_FRG_2, Messages.FORBIDDEN_RESOURCE_IN_USE
125 resourceType, resourceEntry.getKey()));
131 private boolean isResourceForbidden(String resourceType) {
132 return forbiddenResources.contains(resourceType);