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=dd35e5b3609048ad3ed8dc93efdb594212f5f8ac;hb=776c8156aae66f505ab234063923e66e7e610a01;hp=578ff12410d78bb6480313dc26ed51e5ce895233;hpb=1722366b9678eb50753db8c020c230afe25cd1f8;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 578ff124..dd35e5b3 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 @@ -23,43 +23,92 @@ package org.oransc.policyagent.configuration; 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.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.Set; + import javax.validation.constraints.NotNull; -import lombok.Getter; + +import org.immutables.gson.Gson; +import org.immutables.value.Value; import org.onap.dmaap.mr.test.clients.ProtocolTypeConstants; import org.oransc.policyagent.exceptions.ServiceException; import org.springframework.http.MediaType; +/** + * Parser for the Json representing of the component configuration. + */ public class ApplicationConfigParser { private static final String CONFIG = "config"; + private static final String CONTROLLER = "controller"; + + @Value.Immutable + @Gson.TypeAdapters + public interface ConfigParserResult { + List ricConfigs(); + + Properties dmaapPublisherConfig(); + + Properties dmaapConsumerConfig(); - @Getter - private List ricConfigs; - @Getter - private Properties dmaapPublisherConfig = new Properties(); - @Getter - private Properties dmaapConsumerConfig = new Properties(); + Map controllerConfigs(); + } + + public ConfigParserResult parse(JsonObject root) throws ServiceException { + + Properties dmaapPublisherConfig = new Properties(); + Properties dmaapConsumerConfig = new Properties(); - public void parse(JsonObject root) throws ServiceException { JsonObject agentConfigJson = root.getAsJsonObject(CONFIG); - ricConfigs = parseRics(agentConfigJson); + List ricConfigs = parseRics(agentConfigJson); + Map controllerConfigs = parseControllerConfigs(agentConfigJson); JsonObject json = agentConfigJson.getAsJsonObject("streams_publishes"); if (json != null) { - this.dmaapPublisherConfig = parseDmaapConfig(json); + dmaapPublisherConfig = parseDmaapConfig(json); } json = agentConfigJson.getAsJsonObject("streams_subscribes"); if (json != null) { - this.dmaapConsumerConfig = parseDmaapConfig(json); + dmaapConsumerConfig = parseDmaapConfig(json); + } + + checkConfigurationConsistency(ricConfigs, controllerConfigs); + + return ImmutableConfigParserResult.builder() // + .dmaapConsumerConfig(dmaapConsumerConfig) // + .dmaapPublisherConfig(dmaapPublisherConfig) // + .ricConfigs(ricConfigs) // + .controllerConfigs(controllerConfigs) // + .build(); + } + + private void checkConfigurationConsistency(List ricConfigs, + Map controllerConfigs) throws ServiceException { + Set ricUrls = new HashSet<>(); + Set ricNames = new HashSet<>(); + for (RicConfig ric : ricConfigs) { + if (!ricUrls.add(ric.baseUrl())) { + throw new ServiceException("Configuration error, more than one RIC URL: " + ric.baseUrl()); + } + if (!ricNames.add(ric.name())) { + throw new ServiceException("Configuration error, more than one RIC with name: " + ric.name()); + } + if (!ric.controllerName().isEmpty() && controllerConfigs.get(ric.controllerName()) == null) { + throw new ServiceException( + "Configuration error, controller configuration not found: " + ric.controllerName()); + } + } } @@ -68,16 +117,40 @@ public class ApplicationConfigParser { List result = new ArrayList<>(); for (JsonElement ricElem : getAsJsonArray(config, "ric")) { JsonObject ricAsJson = ricElem.getAsJsonObject(); + JsonElement controllerNameElement = ricAsJson.get(CONTROLLER); ImmutableRicConfig ricConfig = ImmutableRicConfig.builder() // .name(ricAsJson.get("name").getAsString()) // .baseUrl(ricAsJson.get("baseUrl").getAsString()) // .managedElementIds(parseManagedElementIds(ricAsJson.get("managedElementIds").getAsJsonArray())) // + .controllerName(controllerNameElement != null ? controllerNameElement.getAsString() : "") // .build(); result.add(ricConfig); } return result; } + Map parseControllerConfigs(JsonObject config) throws ServiceException { + if (config.get(CONTROLLER) == null) { + return new HashMap<>(); + } + Map result = new HashMap<>(); + for (JsonElement element : getAsJsonArray(config, CONTROLLER)) { + JsonObject controllerAsJson = element.getAsJsonObject(); + ImmutableControllerConfig controllerConfig = ImmutableControllerConfig.builder() // + .name(controllerAsJson.get("name").getAsString()) // + .baseUrl(controllerAsJson.get("baseUrl").getAsString()) // + .password(controllerAsJson.get("password").getAsString()) // + .userName(controllerAsJson.get("userName").getAsString()) // ) + .build(); + + if (result.put(controllerConfig.name(), controllerConfig) != null) { + throw new ServiceException( + "Configuration error, more than one controller with name: " + controllerConfig.name()); + } + } + return result; + } + private List parseManagedElementIds(JsonArray asJsonObject) { Iterator iterator = asJsonObject.iterator(); List managedElementIds = new ArrayList<>(); @@ -142,7 +215,6 @@ public class ApplicationConfigParser { } catch (MalformedURLException e) { throw new ServiceException("Could not parse the URL", e); } - } private static @NotNull String getAsString(JsonObject obj, String memberName) throws ServiceException {