[SDC-29] Amdocs OnBoard 1707 initial commit.
[sdc.git] / openecomp-be / lib / openecomp-sdc-validation-lib / openecomp-sdc-validation-impl / src / main / java / org / openecomp / sdc / validation / impl / validators / heatresource / ContrailNetworkPolicyResourceValidator.java
1 package org.openecomp.sdc.validation.impl.validators.heatresource;
2
3 import org.apache.commons.collections4.MapUtils;
4 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
5 import org.openecomp.core.validation.types.GlobalValidationContext;
6 import org.openecomp.sdc.common.errors.Messages;
7 import org.openecomp.sdc.datatypes.error.ErrorLevel;
8 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
9 import org.openecomp.sdc.heat.datatypes.model.Resource;
10 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
11 import org.openecomp.sdc.logging.types.LoggerErrorDescription;
12 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
13 import org.openecomp.sdc.validation.ResourceValidator;
14 import org.openecomp.sdc.validation.ValidationContext;
15 import org.openecomp.sdc.validation.type.HeatResourceValidationContext;
16 import org.openecomp.sdc.validation.type.ValidatorConstants;
17
18 import java.util.List;
19 import java.util.Map;
20
21 /**
22  * Created by TALIO on 2/28/2017.
23  */
24 public class ContrailNetworkPolicyResourceValidator implements ResourceValidator {
25   private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
26
27   @Override
28   public void validate(String fileName, Map.Entry<String, Resource> resourceEntry,
29                        GlobalValidationContext globalContext, ValidationContext validationContext) {
30     validateNetworkPolicyIsUsed
31         (fileName, resourceEntry, globalContext, (HeatResourceValidationContext)validationContext);
32
33   }
34
35   private static void validateNetworkPolicyIsUsed(String fileName,
36                                                   Map.Entry<String, Resource> resourceEntry,
37                                                   GlobalValidationContext globalContext,
38                                                   HeatResourceValidationContext validationContext) {
39     mdcDataDebugMessage.debugEntryMessage("file", fileName);
40
41     Map<String, Map<String, List<String>>> referencedNetworkAttachPoliciesResources =
42         validationContext.getFileLevelResourceDependencies()
43             .get(HeatResourcesTypes.CONTRAIL_NETWORK_RULE_RESOURCE_TYPE.getHeatResource());
44
45     if (MapUtils.isEmpty(referencedNetworkAttachPoliciesResources)) {
46       globalContext
47           .addMessage(
48               fileName,
49               ErrorLevel.WARNING,
50               ErrorMessagesFormatBuilder
51                   .getErrorWithParameters(
52                       Messages.RESOURCE_NOT_IN_USE.getErrorMessage(),
53                       ValidatorConstants.Network_Policy, resourceEntry.getKey()),
54               LoggerTragetServiceName.VALIDATE_ATTACH_POLICY_IN_USE,
55               LoggerErrorDescription.NETWORK_ATTACH_POLICY_NOT_IN_USE);
56       return;
57     }
58
59     handleNetworkAttachPolicyReferences
60         (fileName, resourceEntry, referencedNetworkAttachPoliciesResources, globalContext);
61
62     mdcDataDebugMessage.debugExitMessage("file", fileName);
63
64   }
65
66   private static void handleNetworkAttachPolicyReferences(String fileName,
67                                                           Map.Entry<String, Resource> resourceEntry,
68                                                           Map<String, Map<String, List<String>>> pointedNetworkAttachPolicies,
69                                                           GlobalValidationContext globalContext) {
70
71     Map<String, List<String>> resourcesPointingToCurrNetworkAttachPolicy =
72         pointedNetworkAttachPolicies.get(resourceEntry.getKey());
73     if (isNetworkAttachPolicyNotInUse(resourcesPointingToCurrNetworkAttachPolicy)) {
74       globalContext
75           .addMessage(
76               fileName,
77               ErrorLevel.WARNING,
78               ErrorMessagesFormatBuilder
79                   .getErrorWithParameters(
80                       Messages.RESOURCE_NOT_IN_USE.getErrorMessage(),
81                       ValidatorConstants.Network_Policy, resourceEntry.getKey()),
82               LoggerTragetServiceName.VALIDATE_ATTACH_POLICY_IN_USE,
83               LoggerErrorDescription.NETWORK_ATTACH_POLICY_NOT_IN_USE);
84     }
85   }
86
87   private static boolean isNetworkAttachPolicyNotInUse(
88       Map<String, List<String>> resourcesPointingToCurrNetworkAttachPolicy) {
89     return MapUtils.isEmpty(resourcesPointingToCurrNetworkAttachPolicy);
90   }
91
92 }