X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=policy-agent%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fpolicyagent%2Fconfiguration%2FApplicationConfigParser.java;h=530ac98ba831f8eaf7358eb304806174b09ff505;hb=ff56d2600d074ac0a4473c81b8193004a316c2f8;hp=487c3a994cf50d990c2afb6be28dda519b0e0275;hpb=3bdae60a11a5f154500b4e7c5de4090326af1f98;p=nonrtric.git diff --git a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java index 487c3a99..530ac98b 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java @@ -20,23 +20,58 @@ package org.oransc.policyagent.configuration; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Set; +import java.util.Vector; + +import javax.validation.constraints.NotNull; + import org.oransc.policyagent.exceptions.ServiceException; public class ApplicationConfigParser { private static final String CONFIG = "config"; + private static Gson gson = new GsonBuilder() // + .serializeNulls() // + .create(); // + + private Vector ricConfig; + private Properties dmaapConsumerConfig; + public ApplicationConfigParser() { } - String example; - public void parse(JsonObject root) throws ServiceException { - JsonObject config = root.getAsJsonObject(CONFIG); - example = getAsString(config, "exampleProperty"); + JsonObject ricConfigJson = root.getAsJsonObject(CONFIG); + ricConfig = parseRics(ricConfigJson); + JsonObject dmaapConfigJson = root.getAsJsonObject("streams_subscribes"); + dmaapConsumerConfig = parseDmaapConsumerConfig(dmaapConfigJson); + } + + public Vector getRicConfigs() { + return this.ricConfig; + } + + public Properties getDmaapConsumerConfig() { + return dmaapConsumerConfig; + } + + private Vector parseRics(JsonObject config) throws ServiceException { + Vector result = new Vector(); + for (JsonElement ricElem : getAsJsonArray(config, "ric")) { + result.add(gson.fromJson(ricElem.getAsJsonObject(), ImmutableRicConfig.class)); + } + return result; } private static JsonElement get(JsonObject obj, String memberName) throws ServiceException { @@ -47,12 +82,73 @@ public class ApplicationConfigParser { return elem; } - private static String getAsString(JsonObject obj, String memberName) throws ServiceException { + private JsonArray getAsJsonArray(JsonObject obj, String memberName) throws ServiceException { + return get(obj, memberName).getAsJsonArray(); + } + + private Properties parseDmaapConsumerConfig(JsonObject consumerCfg) throws ServiceException { + Set> topics = consumerCfg.entrySet(); + if (topics.size() != 1) { + throw new ServiceException("Invalid configuration, number of topic must be one, config: " + topics); + } + JsonObject topic = topics.iterator().next().getValue().getAsJsonObject(); + JsonObject dmaapInfo = get(topic, "dmaap_info").getAsJsonObject(); + String topicUrl = getAsString(dmaapInfo, "topic_url"); + + Properties dmaapProps = new Properties(); + try { + URL url = new URL(topicUrl); + String passwd = ""; + String userName = ""; + if (url.getUserInfo() != null) { + String[] userInfo = url.getUserInfo().split(":"); + userName = userInfo[0]; + passwd = userInfo[1]; + } + String urlPath = url.getPath(); + DmaapConsumerUrlPath path = parseDmaapUrlPath(urlPath); + + dmaapProps.put("port", url.getPort()); + dmaapProps.put("server", url.getHost()); + dmaapProps.put("topic", path.dmaapTopicName); + dmaapProps.put("consumerGroup", path.consumerGroup); + dmaapProps.put("consumerInstance", path.consumerId); + dmaapProps.put("fetchTimeout", 15000); + dmaapProps.put("fetchLimit", 1000); + dmaapProps.put("userName", userName); + dmaapProps.put("password", passwd); + } catch (MalformedURLException e) { + throw new ServiceException("Could not parse the URL", e); + } + + return dmaapProps; + } + + private static @NotNull String getAsString(JsonObject obj, String memberName) throws ServiceException { return get(obj, memberName).getAsString(); } - private static JsonObject getAsJson(JsonObject obj, String memberName) throws ServiceException { - return get(obj, memberName).getAsJsonObject(); + private class DmaapConsumerUrlPath { + final String dmaapTopicName; + final String consumerGroup; + final String consumerId; + + DmaapConsumerUrlPath(String dmaapTopicName, String consumerGroup, String consumerId) { + this.dmaapTopicName = dmaapTopicName; + this.consumerGroup = consumerGroup; + this.consumerId = consumerId; + } } + private DmaapConsumerUrlPath parseDmaapUrlPath(String urlPath) throws ServiceException { + String[] tokens = urlPath.split("/"); // /events/A1-P/users/sdnc1 + if (tokens.length != 5) { + throw new ServiceException("The path has incorrect syntax: " + urlPath); + } + + final String dmaapTopicName = tokens[1] + "/" + tokens[2]; // /events/A1-P + final String consumerGroup = tokens[3]; // users + final String consumerId = tokens[4]; // sdnc1 + return new DmaapConsumerUrlPath(dmaapTopicName, consumerGroup, consumerId); + } }