2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
22 package org.onap.ccsdk.sli.plugins.prop;
25 import java.io.FileInputStream;
26 import java.io.IOException;
27 import java.io.InputStream;
29 import java.util.Properties;
31 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
32 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
33 import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
37 public class PropertiesNode implements SvcLogicJavaPlugin {
39 private static final Logger log = LoggerFactory.getLogger(PropertiesNode.class);
41 public void readProperties(Map<String, String> paramMap, SvcLogicContext ctx) throws SvcLogicException {
42 Parameters param = getParameters(paramMap);
43 Properties prop = new Properties();
45 File file = new File(param.fileName);
46 InputStream in = new FileInputStream(file);
47 Map<String, String> mm = null;
48 String pfx = param.contextPrefix != null ? param.contextPrefix + '.' : "";
49 if ("json".equalsIgnoreCase(getFileExtension(param.fileName))){
50 byte[] data = new byte[(int) file.length()];
53 String str = new String(data, "UTF-8");
54 mm = JsonParser.convertToProperties(str);
57 for (Object key : prop.keySet()) {
58 String name = (String) key;
59 String value = prop.getProperty(name);
60 if (value != null && value.trim().length() > 0) {
61 ctx.setAttribute(pfx + name, value.trim());
62 log.info("+++ " + pfx + name + ": [" + value + "]");
67 for (Map.Entry<String,String> entry : mm.entrySet()){
68 ctx.setAttribute(pfx + entry.getKey(), entry.getValue());
69 log.info("+++ " + pfx + entry.getKey() + ": [" + entry.getValue() + "]");
73 } catch (IOException e) {
74 throw new SvcLogicException("Cannot read property file: " + param.fileName + ": " + e.getMessage(), e);
78 /* Getting extension has to do the following
81 * "name.txt" --> "txt"
83 * "name.with.many.dots.myext" --> "myext"
85 private static String getFileExtension(String fileName) {
86 if(fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0)
87 return fileName.substring(fileName.lastIndexOf(".")+1);
91 protected Parameters getParameters(Map<String, String> paramMap) throws SvcLogicException {
92 Parameters p = new Parameters();
93 p.fileName = parseParam(paramMap, "fileName", true, null);
94 p.contextPrefix = parseParam(paramMap, "contextPrefix", false, null);
98 private String parseParam(Map<String, String> paramMap, String name, boolean required, String def)
99 throws SvcLogicException {
100 String s = paramMap.get(name);
102 if (s == null || s.trim().length() == 0) {
105 throw new SvcLogicException("Parameter " + name + " is required in PropertiesNode");
111 int i1 = s.indexOf('%');
113 int i2 = s.indexOf('%', i1 + 1);
115 throw new SvcLogicException("Cannot parse parameter " + name + ": " + s + ": no matching %");
117 String varName = s.substring(i1 + 1, i2);
118 String varValue = System.getenv(varName);
119 if (varValue == null)
122 value += s.substring(i, i1);
126 i1 = s.indexOf('%', i);
128 value += s.substring(i);
130 log.info("Parameter " + name + ": " + value);