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%2Ftasks%2FStartupService.java;h=46587a20b9b044f745d17834c749d1e6d2df3245;hb=636b5946ed5f9475d13cf4c942a2d9d35d1a5cbd;hp=d2356ea985f44e522729e76ec6ff9c644dd753a7;hpb=b47a7130c10bef2bf812366ca971e4eaa938b152;p=nonrtric.git diff --git a/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java b/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java index d2356ea9..46587a20 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java @@ -27,22 +27,29 @@ import org.oransc.policyagent.repository.Policies; import org.oransc.policyagent.repository.PolicyTypes; import org.oransc.policyagent.repository.Ric; import org.oransc.policyagent.repository.Rics; +import org.oransc.policyagent.repository.Services; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; /** * Loads information about RealTime-RICs at startup. */ @Service("startupService") -public class StartupService { +@Order(Ordered.HIGHEST_PRECEDENCE) +public class StartupService implements ApplicationConfig.Observer { private static final Logger logger = LoggerFactory.getLogger(StartupService.class); @Autowired ApplicationConfig applicationConfig; + @Autowired + RefreshConfigTask refreshConfigTask; + @Autowired private Rics rics; @@ -55,13 +62,36 @@ public class StartupService { @Autowired private Policies policies; - StartupService(ApplicationConfig appConfig, Rics rics, PolicyTypes policyTypes, A1Client a1Client, - Policies policies) { + @Autowired + private Services services; + + // Only for unittesting + StartupService(ApplicationConfig appConfig, RefreshConfigTask refreshTask, Rics rics, PolicyTypes policyTypes, + A1Client a1Client, Policies policies, Services services) { this.applicationConfig = appConfig; + this.refreshConfigTask = refreshTask; this.rics = rics; this.policyTypes = policyTypes; this.a1Client = a1Client; this.policies = policies; + this.services = services; + } + + @Override + public void onRicConfigUpdate(RicConfig ricConfig, ApplicationConfig.RicConfigUpdate event) { + synchronized (this.rics) { + if (event.equals(ApplicationConfig.RicConfigUpdate.ADDED) + || event.equals(ApplicationConfig.RicConfigUpdate.CHANGED)) { + Ric ric = new Ric(ricConfig); + rics.put(ric); + RicRecoveryTask recoveryTask = new RicRecoveryTask(a1Client, policyTypes, policies, services); + recoveryTask.run(ric); + } else if (event.equals(ApplicationConfig.RicConfigUpdate.REMOVED)) { + rics.remove(ricConfig.name()); + } else { + logger.debug("Unhandled event :" + event); + } + } } /** @@ -69,12 +99,8 @@ public class StartupService { */ public void startup() { logger.debug("Starting up"); - applicationConfig.initialize(); - for (RicConfig ricConfig : applicationConfig.getRicConfigs()) { - rics.put(new Ric(ricConfig)); - } - RicRecoveryTask recoveryTask = new RicRecoveryTask(a1Client, policyTypes, policies); - recoveryTask.run(rics.getRics()); // recover all Rics + applicationConfig.addObserver(this); + refreshConfigTask.start(); } }