X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=policy-agent%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fpolicyagent%2Ftasks%2FStartupService.java;h=590b010789129220504aa0ffc3dd7ee9adde9a1b;hb=61d78df4c74f93d77bc56eaa51280a8cead66209;hp=1fa0aa8117dc59b6832c3387cf9c02346137db03;hpb=8831a02bce715562f3cacce1691bf4d9d3af206b;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 1fa0aa81..590b0107 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 @@ -20,32 +20,37 @@ package org.oransc.policyagent.tasks; -import java.util.Vector; - -import org.oransc.policyagent.clients.RicClient; +import org.oransc.policyagent.clients.A1ClientFactory; import org.oransc.policyagent.configuration.ApplicationConfig; +import org.oransc.policyagent.configuration.ApplicationConfig.RicConfigUpdate; import org.oransc.policyagent.configuration.RicConfig; -import org.oransc.policyagent.repository.PolicyType; +import org.oransc.policyagent.repository.Policies; import org.oransc.policyagent.repository.PolicyTypes; import org.oransc.policyagent.repository.Ric; -import org.oransc.policyagent.repository.Ric.RicState; 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; @@ -53,36 +58,59 @@ public class StartupService { PolicyTypes policyTypes; @Autowired - private RicClient ricClient; + private A1ClientFactory a1ClientFactory; + + @Autowired + private Policies policies; - StartupService(ApplicationConfig appConfig, Rics rics, PolicyTypes policyTypes, RicClient ricClient) { + @Autowired + private Services services; + + // Only for unit testing + StartupService(ApplicationConfig appConfig, RefreshConfigTask refreshTask, Rics rics, PolicyTypes policyTypes, + A1ClientFactory a1ClientFactory, Policies policies, Services services) { this.applicationConfig = appConfig; + this.refreshConfigTask = refreshTask; this.rics = rics; this.policyTypes = policyTypes; - this.ricClient = ricClient; + this.a1ClientFactory = a1ClientFactory; + this.policies = policies; + this.services = services; + } + + @Override + public void onRicConfigUpdate(RicConfig ricConfig, RicConfigUpdate event) { + synchronized (this.rics) { + switch (event) { + case ADDED: + case CHANGED: + Ric ric = new Ric(ricConfig); + rics.put(ric); + RicSynchronizationTask synchronizationTask = createSynchronizationTask(); + synchronizationTask.run(ric); + break; + + case REMOVED: + rics.remove(ricConfig.name()); + policies.removePoliciesForRic(ricConfig.name()); + break; + + default: + logger.error("Unhandled ric event: {}", event); + } + } } /** * Reads the configured Rics and performs the service discovery. The result is put into the repository. */ public void startup() { - applicationConfig.initialize(); - Vector ricConfigs = applicationConfig.getRicConfigs(); - for (RicConfig ricConfig : ricConfigs) { - Ric ric = new Ric(ricConfig); - String baseUrl = ricConfig.baseUrl(); - ricClient.deleteAllPolicies(baseUrl); - Vector types = ricClient.getPolicyTypes(baseUrl); - for (PolicyType policyType : types) { - if (!policyTypes.contains(policyType)) { - policyTypes.put(policyType); - } - } - ric.addSupportedPolicyTypes(types); - ric.setState(RicState.ACTIVE); - rics.put(ric); - } - + logger.debug("Starting up"); + applicationConfig.addObserver(this); + refreshConfigTask.start(); } + RicSynchronizationTask createSynchronizationTask() { + return new RicSynchronizationTask(a1ClientFactory, policyTypes, policies, services); + } }