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%2FApplicationConfig.java;h=3b4f8104b377b5dd31daa89b20e5ac37dc77b861;hb=3e8bccd59c63f424052fcef5930e94a6629a1a95;hp=1e8c6d472cf6f37b7c92c576388ba73395f7e0fe;hpb=10811110a23cf9fcf464575bba609b8c65d19aec;p=nonrtric.git diff --git a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java index 1e8c6d47..3b4f8104 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java @@ -20,11 +20,11 @@ package org.oransc.policyagent.configuration; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Properties; -import java.util.Vector; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @@ -32,9 +32,9 @@ import javax.validation.constraints.NotNull; import lombok.Getter; import org.oransc.policyagent.exceptions.ServiceException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import reactor.core.publisher.Flux; @EnableConfigurationProperties @ConfigurationProperties("app") @@ -51,30 +51,25 @@ public class ApplicationConfig { @NotEmpty private String a1ControllerPassword; - private Collection observers = new Vector<>(); private Map ricConfigs = new HashMap<>(); @Getter private Properties dmaapPublisherConfig; @Getter private Properties dmaapConsumerConfig; - @Autowired - public ApplicationConfig() { - } - public String getLocalConfigurationFilePath() { return this.filepath; } - public String getA1ControllerBaseUrl() { + public synchronized String getA1ControllerBaseUrl() { return this.a1ControllerBaseUrl; } - public String getA1ControllerUsername() { + public synchronized String getA1ControllerUsername() { return this.a1ControllerUsername; } - public String getA1ControllerPassword() { + public synchronized String getA1ControllerPassword() { return this.a1ControllerPassword; } @@ -110,63 +105,49 @@ public class ApplicationConfig { throw new ServiceException("Could not find ric: " + ricName); } - public static enum RicConfigUpdate { - ADDED, CHANGED, REMOVED - } - - public interface Observer { - void onRicConfigUpdate(RicConfig ric, RicConfigUpdate event); - } - - public void addObserver(Observer o) { - this.observers.add(o); - } + public static class RicConfigUpdate { + public enum Type { + ADDED, CHANGED, REMOVED + } - private class Notification { - final RicConfig ric; - final RicConfigUpdate event; + @Getter + private final RicConfig ricConfig; + @Getter + private final Type type; - Notification(RicConfig ric, RicConfigUpdate event) { - this.ric = ric; - this.event = event; + RicConfigUpdate(RicConfig ric, Type event) { + this.ricConfig = ric; + this.type = event; } } - public void setConfiguration(@NotNull Collection ricConfigs, Properties dmaapPublisherConfig, - Properties dmaapConsumerConfig) { - Collection notifications = new Vector<>(); - synchronized (this) { - Map newRicConfigs = new HashMap<>(); - for (RicConfig newConfig : ricConfigs) { - RicConfig oldConfig = this.ricConfigs.get(newConfig.name()); - if (oldConfig == null) { - newRicConfigs.put(newConfig.name(), newConfig); - notifications.add(new Notification(newConfig, RicConfigUpdate.ADDED)); - this.ricConfigs.remove(newConfig.name()); - } else if (!newConfig.equals(oldConfig)) { - notifications.add(new Notification(newConfig, RicConfigUpdate.CHANGED)); - newRicConfigs.put(newConfig.name(), newConfig); - this.ricConfigs.remove(newConfig.name()); - } else { - newRicConfigs.put(oldConfig.name(), oldConfig); - } - } - for (RicConfig deletedConfig : this.ricConfigs.values()) { - notifications.add(new Notification(deletedConfig, RicConfigUpdate.REMOVED)); - } - this.ricConfigs = newRicConfigs; - } - notifyObservers(notifications); + public synchronized Flux setConfiguration(@NotNull Collection ricConfigs, + Properties dmaapPublisherConfig, Properties dmaapConsumerConfig) { + Collection modifications = new ArrayList<>(); this.dmaapPublisherConfig = dmaapPublisherConfig; this.dmaapConsumerConfig = dmaapConsumerConfig; - } - private void notifyObservers(Collection notifications) { - for (Observer observer : this.observers) { - for (Notification notif : notifications) { - observer.onRicConfigUpdate(notif.ric, notif.event); + Map newRicConfigs = new HashMap<>(); + for (RicConfig newConfig : ricConfigs) { + RicConfig oldConfig = this.ricConfigs.get(newConfig.name()); + if (oldConfig == null) { + newRicConfigs.put(newConfig.name(), newConfig); + modifications.add(new RicConfigUpdate(newConfig, RicConfigUpdate.Type.ADDED)); + this.ricConfigs.remove(newConfig.name()); + } else if (!newConfig.equals(oldConfig)) { + modifications.add(new RicConfigUpdate(newConfig, RicConfigUpdate.Type.CHANGED)); + newRicConfigs.put(newConfig.name(), newConfig); + this.ricConfigs.remove(newConfig.name()); + } else { + newRicConfigs.put(oldConfig.name(), oldConfig); } } + for (RicConfig deletedConfig : this.ricConfigs.values()) { + modifications.add(new RicConfigUpdate(deletedConfig, RicConfigUpdate.Type.REMOVED)); + } + this.ricConfigs = newRicConfigs; + + return Flux.fromIterable(modifications); } }