Merge "Added STD sim 2.0.0 tests"
[nonrtric.git] / policy-agent / src / main / java / org / oransc / policyagent / clients / A1ClientFactory.java
index 55abe2c..0860f77 100644 (file)
@@ -20,6 +20,8 @@
 
 package org.oransc.policyagent.clients;
 
+import lombok.Getter;
+
 import org.oransc.policyagent.clients.A1Client.A1ProtocolType;
 import org.oransc.policyagent.configuration.ApplicationConfig;
 import org.oransc.policyagent.configuration.ControllerConfig;
@@ -38,6 +40,7 @@ public class A1ClientFactory {
 
     private static final Logger logger = LoggerFactory.getLogger(A1ClientFactory.class);
 
+    @Getter
     private final ApplicationConfig appConfig;
 
     @Autowired
@@ -69,14 +72,15 @@ public class A1ClientFactory {
     A1Client createClient(Ric ric, A1ProtocolType version) throws ServiceException {
         if (version == A1ProtocolType.STD_V1_1) {
             assertNoControllerConfig(ric, version);
-            return new StdA1ClientVersion1(ric.getConfig());
+            return new StdA1ClientVersion1(ric.getConfig(), this.appConfig.getWebClientConfig());
         } else if (version == A1ProtocolType.OSC_V1) {
             assertNoControllerConfig(ric, version);
-            return new OscA1Client(ric.getConfig());
+            return new OscA1Client(ric.getConfig(), this.appConfig.getWebClientConfig());
         } else if (version == A1ProtocolType.SDNC_OSC_STD_V1_1 || version == A1ProtocolType.SDNC_OSC_OSC_V1) {
-            return new SdncOscA1Client(version, ric.getConfig(), getControllerConfig(ric));
+            return new SdncOscA1Client(version, ric.getConfig(), getControllerConfig(ric),
+                this.appConfig.getWebClientConfig());
         } else if (version == A1ProtocolType.SDNC_ONAP) {
-            return new SdncOnapA1Client(ric.getConfig(), getControllerConfig(ric));
+            return new SdncOnapA1Client(ric.getConfig(), getControllerConfig(ric), this.appConfig.getWebClientConfig());
         } else {
             logger.error("Unhandled protocol: {}", version);
             throw new ServiceException("Unhandled protocol");
@@ -86,13 +90,20 @@ public class A1ClientFactory {
     private ControllerConfig getControllerConfig(Ric ric) throws ServiceException {
         String controllerName = ric.getConfig().controllerName();
         if (controllerName.isEmpty()) {
-            throw new ServiceException("NO controller configured for RIC: " + ric.name());
+            ric.setProtocolVersion(A1ProtocolType.UNKNOWN);
+            throw new ServiceException("No controller configured for RIC: " + ric.name());
+        }
+        try {
+            return this.appConfig.getControllerConfig(controllerName);
+        } catch (ServiceException e) {
+            ric.setProtocolVersion(A1ProtocolType.UNKNOWN);
+            throw e;
         }
-        return this.appConfig.getControllerConfig(controllerName);
     }
 
     private void assertNoControllerConfig(Ric ric, A1ProtocolType version) throws ServiceException {
         if (!ric.getConfig().controllerName().isEmpty()) {
+            ric.setProtocolVersion(A1ProtocolType.UNKNOWN);
             throw new ServiceException(
                 "Controller config should be empty, ric: " + ric.name() + " when using protocol version: " + version);
         }
@@ -114,7 +125,9 @@ public class A1ClientFactory {
                 .onErrorResume(notUsed -> fetchVersion(ric, A1ProtocolType.SDNC_ONAP)) //
                 .doOnNext(ric::setProtocolVersion)
                 .doOnNext(version -> logger.debug("Established protocol version:{} for Ric: {}", version, ric.name())) //
-                .doOnError(notUsed -> logger.warn("Could not get protocol version from RIC: {}", ric.name())); //
+                .doOnError(notUsed -> logger.warn("Could not get protocol version from RIC: {}", ric.name())) //
+                .onErrorResume(
+                    notUsed -> Mono.error(new ServiceException("Protocol negotiation failed for " + ric.name())));
         } else {
             return Mono.just(ric.getProtocolVersion());
         }