Added Some Tools to GsonUtil
[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 import static org.onap.holmes.common.utils.GsonUtil.getAsString;\r
34 \r
35 public class DcaeConfigurationParser {\r
36 \r
37     private static final String RULE_CONTENT_SPLIT = "\\$\\$\\$";\r
38 \r
39     private static final List<String> OBJECT_ATTRS = Arrays\r
40             .asList(new String[]{"streams_subscribes", "streams_publishes", "services_calls", "services_provides"});\r
41 \r
42     public static DcaeConfigurations parse(String jsonStr) throws CorrelationException {\r
43         if (StringUtils.isEmpty(jsonStr)) {\r
44             throw new CorrelationException(\r
45                     "Can not resolve configurations from DCAE. The configuration string is empty.");\r
46         }\r
47 \r
48         DcaeConfigurations ret = new DcaeConfigurations();\r
49 \r
50         JsonObject jsonObject = null;\r
51         try {\r
52             jsonObject = JsonParser.parseString(jsonStr).getAsJsonObject();\r
53         } catch (Exception e) {\r
54             throw new CorrelationException(e.getMessage(), e);\r
55         }\r
56 \r
57         fillInRules(ret, jsonObject);\r
58         fillInPublishesInfo(ret, jsonObject);\r
59         fillInSubscribesInfo(ret, jsonObject);\r
60 \r
61         JsonObject finalJsonObject = jsonObject;\r
62         Stream.of(jsonObject.keySet().toArray(new String[0]))\r
63                 .filter(key -> !OBJECT_ATTRS.contains(key))\r
64                 .forEach(key -> ret.put(key, finalJsonObject.get(String.valueOf(key)).getAsString()));\r
65         return ret;\r
66     }\r
67 \r
68     private static void fillInPublishesInfo(DcaeConfigurations ret, JsonObject jsonObject) {\r
69         if (jsonObject.has("streams_publishes")) {\r
70             JsonObject publishes = jsonObject.get("streams_publishes").getAsJsonObject();\r
71             for (Object key : publishes.keySet()) {\r
72                 ret.addPubSecInfo((String) key,\r
73                         createSecurityInfo((String) key, publishes.get((String) key).getAsJsonObject()));\r
74             }\r
75         }\r
76     }\r
77 \r
78     private static void fillInSubscribesInfo(DcaeConfigurations ret, JsonObject jsonObject) {\r
79         if (jsonObject.has("streams_subscribes")) {\r
80             JsonObject subscribes = jsonObject.get("streams_subscribes").getAsJsonObject();\r
81             for (Object key : subscribes.keySet()) {\r
82                 ret.addSubSecInfo((String) key,\r
83                         createSecurityInfo((String) key, subscribes.get((String) key).getAsJsonObject()));\r
84             }\r
85         }\r
86     }\r
87 \r
88     private static SecurityInfo createSecurityInfo(String key, JsonObject entity) {\r
89         SecurityInfo securityInfo = new SecurityInfo();\r
90         securityInfo.setType(getAsString(entity, "type"));\r
91         securityInfo.setAafPassword(getAsString(entity, "aaf_password"));\r
92         securityInfo.setAafUsername(getAsString(entity, "aaf_username"));\r
93         securityInfo.setSecureTopic(!key.endsWith("unsecure"));\r
94         fillInDmaapInfo(securityInfo, entity.get("dmaap_info").getAsJsonObject());\r
95         return securityInfo;\r
96     }\r
97 \r
98     private static void fillInDmaapInfo(SecurityInfo securityInfo, JsonObject jsonDmaapInfo) {\r
99         SecurityInfo.DmaapInfo dmaapInfo = securityInfo.getDmaapInfo();\r
100         dmaapInfo.setLocation(getAsString(jsonDmaapInfo, "location"));\r
101         dmaapInfo.setTopicUrl(getAsString(jsonDmaapInfo, "topic_url"));\r
102         dmaapInfo.setClientId(getAsString(jsonDmaapInfo, "client_id"));\r
103         dmaapInfo.setClientRole(getAsString(jsonDmaapInfo, "client_role"));\r
104         dmaapInfo.setType(getAsString(jsonDmaapInfo, "type"));\r
105     }\r
106 \r
107     private static void fillInRules(DcaeConfigurations ret, JsonObject jsonObject) {\r
108         Set<Entry<String, JsonElement>> entries = jsonObject.entrySet();\r
109         for (Entry<String, JsonElement> entry : entries) {\r
110             if (entry.getKey().startsWith("holmes.default.rule")) {\r
111                 String value = entry.getValue().getAsString();\r
112                 String[] contents = value.split(RULE_CONTENT_SPLIT);\r
113                 ret.addDefaultRule(new Rule(entry.getKey(), contents[0], contents[1], 1));\r
114             }\r
115         }\r
116     }\r
117 }\r