X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=policy-agent%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fpolicyagent%2Fconfiguration%2FApplicationConfigParser.java;h=c69c39d4025d372ca8269f6258f6c8d480a36a41;hb=9013ed7ad46ce6927fbf69890487e8df61b7d7ee;hp=400a681e9e12caf3e78a296c8d4df536c8874e72;hpb=3e827b5c2bc00500577af25e9cb559b6243e1abd;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 400a681e..c69c39d4 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,45 +20,78 @@ 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.util.Vector; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Set; +import javax.validation.constraints.NotNull; + +import lombok.Getter; + +import org.onap.dmaap.mr.test.clients.ProtocolTypeConstants; import org.oransc.policyagent.exceptions.ServiceException; +import org.springframework.http.MediaType; -class ApplicationConfigParser { +public class ApplicationConfigParser { private static final String CONFIG = "config"; - private static Gson gson = new GsonBuilder() // - .serializeNulls() // - .create(); // - private Vector ricConfig; - - public ApplicationConfigParser() { - } + @Getter + private List ricConfigs; + @Getter + private Properties dmaapPublisherConfig = new Properties(); + @Getter + private Properties dmaapConsumerConfig = new Properties(); public void parse(JsonObject root) throws ServiceException { - JsonObject config = root.getAsJsonObject(CONFIG); - ricConfig = parseRics(config); - } + JsonObject agentConfigJson = root.getAsJsonObject(CONFIG); + ricConfigs = parseRics(agentConfigJson); + + JsonObject json = agentConfigJson.getAsJsonObject("streams_publishes"); + if (json != null) { + this.dmaapPublisherConfig = parseDmaapConfig(json); + } + + json = agentConfigJson.getAsJsonObject("streams_subscribes"); + if (json != null) { + this.dmaapConsumerConfig = parseDmaapConfig(json); + } - public Vector getRicConfigs() { - return this.ricConfig; } - private Vector parseRics(JsonObject config) throws ServiceException { - Vector result = new Vector(); + private List parseRics(JsonObject config) throws ServiceException { + List result = new ArrayList<>(); for (JsonElement ricElem : getAsJsonArray(config, "ric")) { - result.add(gson.fromJson(ricElem.getAsJsonObject(), ImmutableRicConfig.class)); + JsonObject ricAsJson = ricElem.getAsJsonObject(); + ImmutableRicConfig ricConfig = ImmutableRicConfig.builder() // + .name(ricAsJson.get("name").getAsString()) // + .baseUrl(ricAsJson.get("baseUrl").getAsString()) // + .managedElementIds(parseManagedElementIds(ricAsJson.get("managedElementIds").getAsJsonArray())) // + .build(); + result.add(ricConfig); } return result; } + private List parseManagedElementIds(JsonArray asJsonObject) { + Iterator iterator = asJsonObject.iterator(); + List managedElementIds = new ArrayList<>(); + while (iterator.hasNext()) { + managedElementIds.add(iterator.next().getAsString()); + + } + return managedElementIds; + } + private static JsonElement get(JsonObject obj, String memberName) throws ServiceException { JsonElement elem = obj.get(memberName); if (elem == null) { @@ -71,4 +104,80 @@ class ApplicationConfigParser { return get(obj, memberName).getAsJsonArray(); } + private Properties parseDmaapConfig(JsonObject streamCfg) throws ServiceException { + Set> streamConfigEntries = streamCfg.entrySet(); + if (streamConfigEntries.size() != 1) { + throw new ServiceException( + "Invalid configuration. Number of streams must be one, config: " + streamConfigEntries); + } + JsonObject streamConfigEntry = streamConfigEntries.iterator().next().getValue().getAsJsonObject(); + JsonObject dmaapInfo = get(streamConfigEntry, "dmaap_info").getAsJsonObject(); + String topicUrl = getAsString(dmaapInfo, "topic_url"); + + try { + Properties dmaapProps = new Properties(); + 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(); + DmaapUrlPath path = parseDmaapUrlPath(urlPath); + + dmaapProps.put("ServiceName", url.getHost() + ":" + url.getPort() + "/events"); + dmaapProps.put("topic", path.dmaapTopicName); + dmaapProps.put("host", url.getHost() + ":" + url.getPort()); + dmaapProps.put("contenttype", MediaType.APPLICATION_JSON.toString()); + dmaapProps.put("userName", userName); + dmaapProps.put("password", passwd); + dmaapProps.put("group", path.consumerGroup); + dmaapProps.put("id", path.consumerId); + dmaapProps.put("TransportType", ProtocolTypeConstants.HTTPNOAUTH.toString()); + dmaapProps.put("timeout", 15000); + dmaapProps.put("limit", 100); + dmaapProps.put("maxBatchSize", "10"); + dmaapProps.put("maxAgeMs", "10000"); + dmaapProps.put("compress", true); + dmaapProps.put("MessageSentThreadOccurance", "2"); + return dmaapProps; + } catch (MalformedURLException e) { + throw new ServiceException("Could not parse the URL", e); + } + + } + + private static @NotNull String getAsString(JsonObject obj, String memberName) throws ServiceException { + return get(obj, memberName).getAsString(); + } + + private class DmaapUrlPath { + final String dmaapTopicName; + final String consumerGroup; + final String consumerId; + + DmaapUrlPath(String dmaapTopicName, String consumerGroup, String consumerId) { + this.dmaapTopicName = dmaapTopicName; + this.consumerGroup = consumerGroup; + this.consumerId = consumerId; + } + } + + private DmaapUrlPath parseDmaapUrlPath(String urlPath) throws ServiceException { + String[] tokens = urlPath.split("/"); // /events/A1-P/users/sdnc1 + if (!(tokens.length == 3 ^ tokens.length == 5)) { + throw new ServiceException("The path has incorrect syntax: " + urlPath); + } + + final String dmaapTopicName = tokens[2]; // /events/A1-P + String consumerGroup = ""; // users + String consumerId = ""; // sdnc1 + if (tokens.length == 5) { + consumerGroup = tokens[3]; + consumerId = tokens[4]; + } + return new DmaapUrlPath(dmaapTopicName, consumerGroup, consumerId); + } }