Fixed the CLM Issues
[holmes/common.git] / holmes-actions / src / main / java / org / onap / holmes / common / dcae / utils / DcaeConfigurationParser.java
1 /*\r
2  * Copyright 2017-2020 ZTE Corporation.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 package org.onap.holmes.common.dcae.utils;\r
17 \r
18 import com.google.gson.JsonElement;\r
19 import com.google.gson.JsonObject;\r
20 import com.google.gson.JsonParser;\r
21 import org.apache.commons.lang3.StringUtils;\r
22 import org.onap.holmes.common.dcae.entity.DcaeConfigurations;\r
23 import org.onap.holmes.common.dcae.entity.Rule;\r
24 import org.onap.holmes.common.dcae.entity.SecurityInfo;\r
25 import org.onap.holmes.common.exception.CorrelationException;\r
26 \r
27 import java.util.Arrays;\r
28 import java.util.List;\r
29 import java.util.Map.Entry;\r
30 import java.util.Set;\r
31 import java.util.stream.Stream;\r
32 \r
33 public class DcaeConfigurationParser {\r
34 \r
35     private static final String RULE_CONTENT_SPLIT = "\\$\\$\\$";\r
36 \r
37     private static final List<String> OBJECT_ATTRS = Arrays\r
38             .asList(new String[]{"streams_subscribes", "streams_publishes", "services_calls", "services_provides"});\r
39 \r
40     public static DcaeConfigurations parse(String jsonStr) throws CorrelationException {\r
41         if (StringUtils.isEmpty(jsonStr)) {\r
42             throw new CorrelationException(\r
43                     "Can not resolve configurations from DCAE. The configuration string is empty.");\r
44         }\r
45 \r
46         DcaeConfigurations ret = new DcaeConfigurations();\r
47 \r
48         JsonObject jsonObject = null;\r
49         try {\r
50             jsonObject = JsonParser.parseString(jsonStr).getAsJsonObject();\r
51         } catch (Exception e) {\r
52             throw new CorrelationException(e.getMessage(), e);\r
53         }\r
54 \r
55         fillInRules(ret, jsonObject);\r
56         fillInPublishesInfo(ret, jsonObject);\r
57         fillInSubscribesInfo(ret, jsonObject);\r
58 \r
59         JsonObject finalJsonObject = jsonObject;\r
60         Stream.of(jsonObject.keySet().toArray(new String[0]))\r
61                 .filter(key -> !OBJECT_ATTRS.contains(key))\r
62                 .forEach(key -> ret.put(key, finalJsonObject.get(String.valueOf(key)).getAsString()));\r
63         return ret;\r
64     }\r
65 \r
66     private static void fillInPublishesInfo(DcaeConfigurations ret, JsonObject jsonObject) {\r
67         if (jsonObject.has("streams_publishes")) {\r
68             JsonObject publishes = jsonObject.get("streams_publishes").getAsJsonObject();\r
69             for (Object key : publishes.keySet()) {\r
70                 ret.addPubSecInfo((String) key,\r
71                         createSecurityInfo((String) key, publishes.get((String) key).getAsJsonObject()));\r
72             }\r
73         }\r
74     }\r
75 \r
76     private static void fillInSubscribesInfo(DcaeConfigurations ret, JsonObject jsonObject) {\r
77         if (jsonObject.has("streams_subscribes")) {\r
78             JsonObject subscribes = jsonObject.get("streams_subscribes").getAsJsonObject();\r
79             for (Object key : subscribes.keySet()) {\r
80                 ret.addSubSecInfo((String) key,\r
81                         createSecurityInfo((String) key, subscribes.get((String) key).getAsJsonObject()));\r
82             }\r
83         }\r
84     }\r
85 \r
86     private static SecurityInfo createSecurityInfo(String key, JsonObject entity) {\r
87         SecurityInfo securityInfo = new SecurityInfo();\r
88         if (entity.has("type") && !entity.get("type").isJsonNull()) {\r
89             securityInfo.setType(entity.get("type").getAsString());\r
90         }\r
91         if (entity.has("aaf_password") && !entity.get("aaf_password").isJsonNull()) {\r
92             securityInfo.setAafPassword(entity.get("aaf_password").getAsString());\r
93         }\r
94         if (entity.has("aaf_username") && !entity.get("aaf_username").isJsonNull()) {\r
95             securityInfo.setAafUsername(entity.get("aaf_username").getAsString());\r
96         }\r
97         securityInfo.setSecureTopic(!key.endsWith("unsecure"));\r
98         fillInDmaapInfo(securityInfo, entity.get("dmaap_info").getAsJsonObject());\r
99         return securityInfo;\r
100     }\r
101 \r
102     private static void fillInDmaapInfo(SecurityInfo securityInfo, JsonObject jsonDmaapInfo) {\r
103         SecurityInfo.DmaapInfo dmaapInfo = securityInfo.getDmaapInfo();\r
104         if (jsonDmaapInfo.has("location") && !jsonDmaapInfo.get("location").isJsonNull()){\r
105             dmaapInfo.setLocation(jsonDmaapInfo.get("location").getAsString());\r
106         }\r
107         if (jsonDmaapInfo.has("topic_url") && !jsonDmaapInfo.get("topic_url").isJsonNull()) {\r
108             dmaapInfo.setTopicUrl(jsonDmaapInfo.get("topic_url").getAsString());\r
109         }\r
110         if (jsonDmaapInfo.has("client_id") && !jsonDmaapInfo.get("client_id").isJsonNull()) {\r
111             dmaapInfo.setClientId(jsonDmaapInfo.get("client_id").getAsString());\r
112         }\r
113         if (jsonDmaapInfo.has("client_role") && !jsonDmaapInfo.get("client_role").isJsonNull()) {\r
114             dmaapInfo.setClientRole(jsonDmaapInfo.get("client_role").getAsString());\r
115         }\r
116         if (jsonDmaapInfo.has("type") && !jsonDmaapInfo.get("type").isJsonNull()) {\r
117             dmaapInfo.setType(jsonDmaapInfo.get("type").getAsString());\r
118         }\r
119     }\r
120 \r
121     private static void fillInRules(DcaeConfigurations ret, JsonObject jsonObject) {\r
122         Set<Entry<String, JsonElement>> entries = jsonObject.entrySet();\r
123         for (Entry<String, JsonElement> entry : entries) {\r
124             if (entry.getKey().startsWith("holmes.default.rule")) {\r
125                 String value = entry.getValue().getAsString();\r
126                 String[] contents = value.split(RULE_CONTENT_SPLIT);\r
127                 ret.addDefaultRule(new Rule(entry.getKey(), contents[0], contents[1], 1));\r
128             }\r
129         }\r
130     }\r
131 }\r