d25d7db1c1222a35eab2dc60fa1a6f459da33700
[dcaegen2/collectors/datafile.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * Copyright (C) 2018 NOKIA Intellectual Property, 2018 Nordix Foundation. All rights reserved.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  * ============LICENSE_END=========================================================
17  */
18
19 package org.onap.dcaegen2.collectors.datafile.configuration;
20
21 import com.google.gson.JsonArray;
22 import com.google.gson.JsonElement;
23 import com.google.gson.JsonObject;
24
25 import java.util.HashMap;
26 import java.util.Iterator;
27 import java.util.Map;
28 import java.util.Map.Entry;
29 import java.util.Set;
30
31 import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException;
32
33 /**
34  * Parses the cloud configuration.
35  *
36  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 9/19/18
37  * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
38  */
39 public class CloudConfigParser {
40     private static final String DMAAP_SECURITY_TRUST_STORE_PATH = "dmaap.security.trustStorePath";
41     private static final String DMAAP_SECURITY_TRUST_STORE_PASS_PATH = "dmaap.security.trustStorePasswordPath";
42     private static final String DMAAP_SECURITY_KEY_STORE_PATH = "dmaap.security.keyStorePath";
43     private static final String DMAAP_SECURITY_KEY_STORE_PASS_PATH = "dmaap.security.keyStorePasswordPath";
44     private static final String DMAAP_SECURITY_ENABLE_DMAAP_CERT_AUTH = "dmaap.security.enableDmaapCertAuth";
45
46     private final JsonObject serviceConfigurationRoot;
47     private final JsonObject dmaapConfigurationRoot;
48
49     public CloudConfigParser(JsonObject serviceConfigurationRoot, JsonObject dmaapConfigurationRoot) {
50         this.serviceConfigurationRoot = serviceConfigurationRoot;
51         this.dmaapConfigurationRoot = dmaapConfigurationRoot;
52     }
53
54     public Map<String, PublisherConfiguration> getDmaapPublisherConfig() throws DatafileTaskException {
55         Iterator<JsonElement> producerCfgs =
56             toArray(serviceConfigurationRoot.get("dmaap.dmaapProducerConfiguration")).iterator();
57
58         Map<String, PublisherConfiguration> result = new HashMap<>();
59
60         while (producerCfgs.hasNext()) {
61             JsonObject producerCfg = producerCfgs.next().getAsJsonObject();
62             String feedName = getAsString(producerCfg, "feedName");
63             JsonObject feedConfig = getFeedConfig(feedName);
64
65             PublisherConfiguration cfg = ImmutablePublisherConfiguration.builder() //
66                 .publishUrl(getAsString(feedConfig, "publish_url")) //
67                 .passWord(getAsString(feedConfig, "password")) //
68                 .userName(getAsString(feedConfig, "username")) //
69                 .trustStorePath(getAsString(serviceConfigurationRoot, DMAAP_SECURITY_TRUST_STORE_PATH)) //
70                 .trustStorePasswordPath(getAsString(serviceConfigurationRoot, DMAAP_SECURITY_TRUST_STORE_PASS_PATH)) //
71                 .keyStorePath(getAsString(serviceConfigurationRoot, DMAAP_SECURITY_KEY_STORE_PATH)) //
72                 .keyStorePasswordPath(getAsString(serviceConfigurationRoot, DMAAP_SECURITY_KEY_STORE_PASS_PATH)) //
73                 .enableDmaapCertAuth(
74                     get(serviceConfigurationRoot, DMAAP_SECURITY_ENABLE_DMAAP_CERT_AUTH).getAsBoolean()) //
75                 .changeIdentifier(getAsString(producerCfg, "changeIdentifier")) //
76                 .logUrl(getAsString(feedConfig, "log_url")) //
77                 .build();
78
79             result.put(cfg.changeIdentifier(), cfg);
80         }
81         return result;
82     }
83
84     public ConsumerConfiguration getDmaapConsumerConfig() throws DatafileTaskException {
85         JsonObject consumerCfg = serviceConfigurationRoot.get("streams_subscribes").getAsJsonObject();
86         Set<Entry<String, JsonElement>> topics = consumerCfg.entrySet();
87         if (topics.size() != 1) {
88             throw new DatafileTaskException("Invalid configuration, number oftopic must be one, config: " + topics);
89         }
90         JsonObject topic = topics.iterator().next().getValue().getAsJsonObject();
91         JsonObject dmaapInfo = get(topic, "dmmap_info").getAsJsonObject();
92         String topicUrl = getAsString(dmaapInfo, "topic_url");
93
94         return ImmutableConsumerConfiguration.builder().topicUrl(topicUrl)
95             .trustStorePath(getAsString(serviceConfigurationRoot, DMAAP_SECURITY_TRUST_STORE_PATH))
96             .trustStorePasswordPath(getAsString(serviceConfigurationRoot, DMAAP_SECURITY_TRUST_STORE_PASS_PATH))
97             .keyStorePath(getAsString(serviceConfigurationRoot, DMAAP_SECURITY_KEY_STORE_PATH))
98             .keyStorePasswordPath(getAsString(serviceConfigurationRoot, DMAAP_SECURITY_KEY_STORE_PASS_PATH))
99             .enableDmaapCertAuth(get(serviceConfigurationRoot, DMAAP_SECURITY_ENABLE_DMAAP_CERT_AUTH).getAsBoolean()) //
100             .build();
101     }
102
103     public FtpesConfig getFtpesConfig() throws DatafileTaskException {
104         return new ImmutableFtpesConfig.Builder() //
105             .keyCert(getAsString(serviceConfigurationRoot, "dmaap.ftpesConfig.keyCert"))
106             .keyPassword(getAsString(serviceConfigurationRoot, "dmaap.ftpesConfig.keyPassword"))
107             .trustedCa(getAsString(serviceConfigurationRoot, "dmaap.ftpesConfig.trustedCa"))
108             .trustedCaPassword(getAsString(serviceConfigurationRoot, "dmaap.ftpesConfig.trustedCaPassword")) //
109             .build();
110     }
111
112     private static JsonElement get(JsonObject obj, String memberName) throws DatafileTaskException {
113         JsonElement elem = obj.get(memberName);
114         if (elem == null) {
115             throw new DatafileTaskException("Could not find member: " + memberName + " in: " + obj);
116         }
117         return elem;
118     }
119
120     private static String getAsString(JsonObject obj, String memberName) throws DatafileTaskException {
121         return get(obj, memberName).getAsString();
122     }
123
124     private JsonObject getFeedConfig(String feedName) throws DatafileTaskException {
125         JsonElement elem = dmaapConfigurationRoot.get(feedName);
126         if (elem == null) {
127             elem = get(serviceConfigurationRoot, feedName); // Fallback, try to find it under serviceConfigurationRoot
128         }
129         return elem.getAsJsonObject();
130     }
131
132     private static JsonArray toArray(JsonElement obj) {
133         if (obj.isJsonArray()) {
134             return obj.getAsJsonArray();
135         }
136         JsonArray arr = new JsonArray();
137         arr.add(obj);
138         return arr;
139     }
140 }