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;
28 import java.util.HashSet;
30 import java.util.Properties;
33 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
34 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
35 import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
39 public class PropertiesNode implements SvcLogicJavaPlugin {
41 private static final Logger log = LoggerFactory.getLogger(PropertiesNode.class);
43 public void readProperties(Map<String, String> paramMap, SvcLogicContext ctx) throws SvcLogicException {
44 Parameters param = getParameters(paramMap);
45 Properties prop = new Properties();
47 File file = new File(param.fileName);
48 try(InputStream in = new FileInputStream(file)){
49 Map<String, String> mm = null;
50 String pfx = param.contextPrefix != null ? param.contextPrefix + '.' : "";
51 if(param.fileBasedParsing){
52 byte[] data = new byte[(int) file.length()];
53 if ("json".equalsIgnoreCase(getFileExtension(param.fileName))) {
55 String str = new String(data, "UTF-8");
56 mm = JsonParser.convertToProperties(str);
57 } else if ("xml".equalsIgnoreCase(getFileExtension(param.fileName))) {
59 String str = new String(data, "UTF-8");
60 mm = XmlParser.convertToProperties(str, param.listNameList);
63 for (Object key : prop.keySet()) {
64 String name = (String) key;
65 String value = prop.getProperty(name);
66 if (value != null && value.trim().length() > 0) {
67 ctx.setAttribute(pfx + name, value.trim());
68 log.info("+++ " + pfx + name + ": [" + value + "]");
73 for (Map.Entry<String,String> entry : mm.entrySet()){
74 ctx.setAttribute(pfx + entry.getKey(), entry.getValue());
75 log.info("+++ " + pfx + entry.getKey() + ": [" + entry.getValue() + "]");
80 for (Object key : prop.keySet()) {
81 String name = (String) key;
82 String value = prop.getProperty(name);
83 if (value != null && value.trim().length() > 0) {
84 ctx.setAttribute(pfx + name, value.trim());
85 log.info("+++ " + pfx + name + ": [" + value + "]");
90 } catch (IOException e) {
91 throw new SvcLogicException("Cannot read property file: " + param.fileName + ": " + e.getMessage(), e);
95 /* Getting extension has to do the following
98 * "name.txt" --> "txt"
100 * "name.with.many.dots.myext" --> "myext"
102 private static String getFileExtension(String fileName) {
103 if(fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0)
104 return fileName.substring(fileName.lastIndexOf(".")+1);
108 protected Parameters getParameters(Map<String, String> paramMap) throws SvcLogicException {
109 Parameters p = new Parameters();
110 p.fileName = parseParam(paramMap, "fileName", true, null);
111 p.contextPrefix = parseParam(paramMap, "contextPrefix", false, null);
112 p.listNameList = getListNameList(paramMap);
113 String fileBasedParsingStr = paramMap.get("fileBasedParsing");
114 p.fileBasedParsing = "true".equalsIgnoreCase(fileBasedParsingStr);
118 protected Set<String> getListNameList(Map<String, String> paramMap) {
119 Set<String> ll = new HashSet<>();
120 for (Map.Entry<String,String> entry : paramMap.entrySet())
121 if (entry.getKey().startsWith("listName"))
122 ll.add(entry.getValue());
126 private String parseParam(Map<String, String> paramMap, String name, boolean required, String def)
127 throws SvcLogicException {
128 String s = paramMap.get(name);
130 if (s == null || s.trim().length() == 0) {
133 throw new SvcLogicException("Parameter " + name + " is required in PropertiesNode");
139 int i1 = s.indexOf('%');
141 int i2 = s.indexOf('%', i1 + 1);
143 throw new SvcLogicException("Cannot parse parameter " + name + ": " + s + ": no matching %");
145 String varName = s.substring(i1 + 1, i2);
146 String varValue = System.getenv(varName);
147 if (varValue == null)
150 value += s.substring(i, i1);
154 i1 = s.indexOf('%', i);
156 value += s.substring(i);
158 log.info("Parameter " + name + ": " + value);