Revert "vLAN . Support Policies."
[sdc/sdc-tosca.git] / src / main / java / org / openecomp / sdc / tosca / parser / config / ConfigurationManager.java
1 package org.openecomp.sdc.tosca.parser.config;
2
3 import com.google.common.base.Charsets;
4 import com.google.common.io.Resources;
5 import org.openecomp.sdc.tosca.parser.utils.YamlToObjectConverter;
6 import org.slf4j.Logger;
7 import org.slf4j.LoggerFactory;
8
9 import java.io.IOException;
10 import java.net.URL;
11 import java.util.HashMap;
12 import java.util.Map;
13
14
15 public class ConfigurationManager {
16
17         private static Logger log = LoggerFactory.getLogger(ConfigurationManager.class.getName());
18
19         private static final String CONFIGURATION_DIR = "config/";
20         private static volatile ConfigurationManager instance;
21
22
23         Map<String, Object> configurations = new HashMap<String, Object>();
24
25         private ConfigurationManager() {
26                 initialConfigObjectsFromFiles();
27         }
28
29         private void initialConfigObjectsFromFiles() {
30                 loadConfigurationClass(ErrorConfiguration.class);
31                 loadConfigurationClass(Configuration.class);
32                 loadConfigurationClass(JtoscaValidationIssueConfiguration.class);
33         }
34
35         private <T> void loadConfigurationClass(Class<T> clazz) {
36                 T object = getObjectFromYaml(clazz);
37                 configurations.put(clazz.getSimpleName(), object);
38         }
39
40         private <T> void loadConfigurationClass(Class<T> clazz, String fileName) {
41                 T object = getObjectFromYaml(clazz,fileName);
42                 configurations.put(clazz.getSimpleName(), object);
43         }
44
45         public static <T> T getObjectFromYaml(Class<T> className) {
46                 return getObjectFromYaml(className, null);
47         }
48
49         public static <T> T getObjectFromYaml(Class<T> className, String fileName) {
50
51
52                 String configFileName = fileName != null ? fileName : calculateFileName(className); ;
53
54                 URL url = Resources.getResource(CONFIGURATION_DIR + configFileName);
55                 String configFileContents = null;
56                 try {
57                         configFileContents = Resources.toString(url, Charsets.UTF_8);
58                 } catch (IOException e) {
59                         log.error("ConfigurationManager - Failed to load configuration file {}", configFileName, e);
60                 }
61                 YamlToObjectConverter yamlToObjectConverter = new YamlToObjectConverter();
62                 T object = yamlToObjectConverter.convertFromString(configFileContents, className);
63
64                 return object;
65         }
66
67
68         public static ConfigurationManager getInstance() {
69                 if (instance == null) {
70                         synchronized (ConfigurationManager.class) {
71                                 if (instance == null) {
72                                         instance = new ConfigurationManager();
73                                 }
74                         }
75                 }
76                 return instance;
77         }
78
79         private static <T> String calculateFileName(Class<T> className) {
80
81                 String[] words = className.getSimpleName().split("(?=\\p{Upper})");
82
83                 StringBuilder builder = new StringBuilder();
84
85                 // There cannot be a null value returned from "split" - words != null is
86                 // redundant
87                 // if (words != null) {
88                 boolean isFirst = true;
89                 for (int i = 0; i < words.length; i++) {
90
91                         String word = words[i];
92                         if (word != null && !word.isEmpty()) {
93                                 if (!isFirst) {
94                                         builder.append("-");
95                                 } else {
96                                         isFirst = false;
97                                 }
98                                 builder.append(words[i].toLowerCase());
99                         }
100                 }
101                 return builder.toString() + ".yaml";
102
103                 /*
104          * } else { return className.getSimpleName().toLowerCase() + Constants.YAML_SUFFIX; }
105                  */
106
107         }
108
109         public ErrorConfiguration getErrorConfiguration() {
110                 return (ErrorConfiguration) configurations.get((ErrorConfiguration.class.getSimpleName()));
111         }
112         public JtoscaValidationIssueConfiguration getJtoscaValidationIssueConfiguration() {
113                 return (JtoscaValidationIssueConfiguration) configurations.get((JtoscaValidationIssueConfiguration.class.getSimpleName()));
114         }
115         public void setJtoscaValidationIssueConfiguration(String fileName) {
116                 loadConfigurationClass(JtoscaValidationIssueConfiguration.class, fileName);
117         }
118         public Configuration getConfiguration() {
119                 return (Configuration) configurations.get((Configuration.class.getSimpleName()));
120         }
121         public void setErrorConfiguration(String fileName) {
122                 loadConfigurationClass(ErrorConfiguration.class, fileName);
123         }
124 }