push addional code
[sdc.git] / openecomp-be / lib / openecomp-sdc-validation-lib / openecomp-sdc-validation-api / src / main / java / org / openecomp / core / validation / types / GlobalValidationContext.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.core.validation.types;
22
23 import org.apache.commons.collections4.CollectionUtils;
24 import org.openecomp.core.utilities.CommonMethods;
25 import org.openecomp.core.validation.interfaces.Validator;
26 import org.openecomp.sdc.common.utils.AsdcCommon;
27 import org.openecomp.sdc.datatypes.error.ErrorLevel;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31 import java.io.InputStream;
32 import java.util.Collection;
33 import java.util.HashMap;
34 import java.util.Map;
35 import java.util.function.BiPredicate;
36 import java.util.stream.Collectors;
37
38 public class GlobalValidationContext {
39
40   private static Logger logger = LoggerFactory.getLogger(Validator.class);
41   private Map<String, FileValidationContext> fileContextMap = new HashMap<>();
42   private Map<String, MessageContainer> messageContainerMap = new HashMap<>();
43
44   /**
45    * Add message.
46    *
47    * @param fileName the file name
48    * @param level    the level
49    * @param message  the message
50    */
51   public void addMessage(String fileName, ErrorLevel level, String message) {
52
53     printLog(fileName, message, level);
54
55     if (fileContextMap.containsKey(fileName)) {
56       fileContextMap.get(fileName).getMessageContainer().getMessageBuilder().setMessage(message)
57           .setLevel(level).create();
58     } else {
59       if (CommonMethods.isEmpty(fileName)) {
60         fileName = AsdcCommon.UPLOAD_FILE;
61       }
62       MessageContainer messageContainer;
63       synchronized (this) {
64         messageContainer = messageContainerMap.get(fileName);
65         if (messageContainer == null) {
66           messageContainer = new MessageContainer();
67           messageContainerMap.put(fileName, messageContainer);
68         }
69       }
70       messageContainer.getMessageBuilder().setMessage(message).setLevel(level).create();
71     }
72   }
73
74   /**
75    * Gets file content.
76    *
77    * @param fileName the file name
78    * @return the file content
79    */
80   public InputStream getFileContent(String fileName) {
81     FileValidationContext fileContext = fileContextMap.get(fileName);
82     if (fileContext == null || fileContext.isEmpty()) {
83       return null;
84     }
85     return fileContext.getContent();
86   }
87
88   public void addFileContext(String fileName, byte[] fileContent) {
89     fileContextMap.put(fileName, new FileValidationContext(fileName, fileContent));
90   }
91
92   /**
93    * Gets context message containers.
94    *
95    * @return the context message containers
96    */
97   public Map<String, MessageContainer> getContextMessageContainers() {
98
99     Map<String, MessageContainer> contextMessageContainer = new HashMap<>();
100     fileContextMap.entrySet().stream().filter(entry -> CollectionUtils
101         .isNotEmpty(entry.getValue().getMessageContainer().getErrorMessageList())).forEach(
102           entry -> contextMessageContainer.put(
103             entry.getKey(), entry.getValue().getMessageContainer()));
104     messageContainerMap.entrySet().stream()
105         .filter(entry -> CollectionUtils.isNotEmpty(entry.getValue().getErrorMessageList()))
106         .forEach(entry -> contextMessageContainer.put(entry.getKey(), entry.getValue()));
107     return contextMessageContainer;
108   }
109
110   public Map<String, FileValidationContext> getFileContextMap() {
111     return fileContextMap;
112   }
113
114   private void printLog(String fileName, String message, ErrorLevel level) {
115
116     String messageToPrint = message + " in file[" + fileName + "]";
117
118     switch (level) {
119       case ERROR:
120         logger.error(messageToPrint);
121         break;
122       case WARNING:
123         logger.warn(messageToPrint);
124         break;
125       case INFO:
126         logger.info(messageToPrint);
127         break;
128       default:
129         break;
130     }
131   }
132
133   public Collection<String> files(BiPredicate<String, GlobalValidationContext> func) {
134     return fileContextMap.keySet().stream().filter(t -> func.test(t, this))
135         .collect(Collectors.toList());
136   }
137
138   public Collection<String> getFiles() {
139     return this.getFileContextMap().keySet();
140   }
141
142 }