Additional code for Tosca
[clamp.git] / src / main / java / org / onap / clamp / clds / config / ClampProperties.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP CLAMP
4  * ================================================================================
5  * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
6  *                             reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END============================================
20  * ===================================================================
21  *
22  */
23
24 package org.onap.clamp.clds.config;
25
26 import com.fasterxml.jackson.databind.JsonNode;
27 import com.google.common.base.Splitter;
28
29 import java.io.IOException;
30 import java.net.URL;
31 import java.nio.charset.StandardCharsets;
32 import java.util.List;
33
34 import org.apache.commons.io.IOUtils;
35 import org.onap.clamp.clds.util.JacksonUtils;
36 import org.springframework.beans.factory.annotation.Autowired;
37 import org.springframework.context.ApplicationContext;
38 import org.springframework.core.env.Environment;
39 import org.springframework.stereotype.Component;
40
41 /**
42  * Holds Clamp properties and add some functionalities.
43  */
44 @Component
45 public class ClampProperties {
46
47     @Autowired
48     private ApplicationContext appContext;
49     @Autowired
50     private Environment env;
51     public static final String CONFIG_PREFIX = "clamp.config.";
52
53     /**
54      * get property value.
55      *
56      * @param key
57      *        The first key
58      * @return The string with the value
59      */
60     public String getStringValue(String key) {
61         return env.getProperty(CONFIG_PREFIX + key);
62     }
63
64     /**
65      * get property value for a combo key (key1 + "." + key2). If not found just use
66      * key1.
67      *
68      * @param key1
69      *        The first key
70      * @param key2
71      *        The second key after a dot
72      * @return The string with the value
73      */
74     public String getStringValue(String key1, String key2) {
75         String value = getStringValue(key1 + "." + key2);
76         if (value == null || value.length() == 0) {
77             value = getStringValue(key1);
78         }
79         return value;
80     }
81
82     /**
83      * Return json as objects that can be updated. The value obtained from the
84      * clds-reference file will be used as a filename.
85      *
86      * @param key
87      *        The key that will be used to access the clds-reference file
88      * @return A jsonNode
89      * @throws IOException
90      *         In case of issues with the JSON parser
91      */
92     public JsonNode getJsonTemplate(String key) throws IOException {
93         String fileReference = getStringValue(key);
94         return (fileReference != null)
95             ? JacksonUtils.getObjectMapperInstance().readValue(getFileContentFromPath(fileReference), JsonNode.class)
96             : null;
97     }
98
99     /**
100      * Return json as objects that can be updated. First try with combo key (key1 +
101      * "." + key2), otherwise default to just key1. The value obtained from the
102      * clds-reference file will be used as a filename.
103      *
104      * @param key1
105      *        The first key
106      * @param key2
107      *        The second key after a dot
108      * @return A JsonNode
109      * @throws IOException
110      *         In case of issues with the JSON parser
111      */
112     public JsonNode getJsonTemplate(String key1, String key2) throws IOException {
113         String fileReference = getStringValue(key1, key2);
114         return (fileReference != null)
115             ? JacksonUtils.getObjectMapperInstance().readValue(getFileContentFromPath(fileReference), JsonNode.class)
116             : null;
117     }
118
119     /**
120      * Return the file content. The value obtained from the clds-reference file will
121      * be used as a filename.
122      *
123      * @param key
124      *        The key that will be used to access the clds-reference file
125      * @return File content in String
126      * @throws IOException
127      *         In case of issues with the JSON parser
128      */
129     public String getFileContent(String key) throws IOException {
130         String fileReference = getStringValue(key);
131         return (fileReference != null) ? getFileContentFromPath(fileReference) : null;
132     }
133
134     /**
135      * Return the file content. First try with combo key (key1 + "." + key2),
136      * otherwise default to just key1. The value obtained from the clds-reference
137      * file will be used as a filename.
138      *
139      * @param key1
140      *        The first key
141      * @param key2
142      *        The second key after a dot
143      * @return File content in String
144      * @throws IOException
145      *         In case of issues with the JSON parser
146      */
147     public String getFileContent(String key1, String key2) throws IOException {
148         String fileReference = getStringValue(key1, key2);
149         return (fileReference != null) ? getFileContentFromPath(fileReference) : null;
150     }
151
152     private String getFileContentFromPath(String filepath) throws IOException {
153         URL url = appContext.getResource(filepath).getURL();
154         return IOUtils.toString(url, StandardCharsets.UTF_8);
155     }
156
157     /**
158      * 
159      * 
160      * @param key
161      *        property key
162      * @param separator
163      *        property value separator
164      * @return List of Strings split with a separator
165      */
166     public List<String> getStringList(String key, String separator) {
167         return Splitter.on(separator).trimResults().omitEmptyStrings()
168             .splitToList(env.getProperty(CONFIG_PREFIX + key));
169     }
170 }