package org.onap.sdnc.northbound.restadpter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
+import org.onap.sdnc.northbound.exceptions.NearRtRicNotFoundException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.web.util.UriComponentsBuilder;
/**
* This class provides Near-RIC api to invoke the A1 interface
- *
+ *
* @author lathishbabu.ganesan@est.tech
*
*/
public class NearRicUrlProvider {
- private String baseUrl;
+ // nearRicMap provides mapping from nearRtRicId to domainname:port of nearRTRics
+ private HashMap<String, String> nearRicMap = new HashMap<>();
+ private static final String NEAR_RIC_LIST_FILE = "NearRtRicList.properties";
+ private final Logger log = LoggerFactory.getLogger(NearRicUrlProvider.class);
public NearRicUrlProvider() {
- // Near ric ip is passed in payload
- baseUrl = "http://localhost:8080/a1-p/";
+ try {
+ readNearRtRicConfigFile();
+ } catch (IOException ex) {
+ log.error("Exception while reading nearRtRicConfigFile: {}", ex);
+ }
+ }
+
+ private void readNearRtRicConfigFile() throws IOException {
+ InputStream inputStream = NearRicUrlProvider.class.getClassLoader().getResourceAsStream(NEAR_RIC_LIST_FILE);
+ if (inputStream == null) {
+ log.error("The file {} not found in classpath", NEAR_RIC_LIST_FILE);
+ } else {
+ Properties properties = new Properties();
+ properties.load(inputStream);
+ Enumeration<?> keys = properties.propertyNames();
+ while (keys.hasMoreElements()) {
+ String key = (String) keys.nextElement();
+ nearRicMap.put(key, properties.getProperty(key));
+ }
+ inputStream.close();
+ }
+ }
+
+ /**
+ * Retrieve the list of Near-RICs
+ *
+ * @return the list of Near-RICs
+ */
+ public List<String> getNearRTRicIdsList () {
+ return new ArrayList<>(nearRicMap.keySet());
}
/**
* Retrieve the base url of the Near-RIC
- *
+ *
* @return the base url
*/
- public String getBaseUrl() {
+ public String getBaseUrl(final String nearRtRicId) {
+ if (!nearRicMap.containsKey(nearRtRicId)) {
+ throw new NearRtRicNotFoundException("NearRtRic with this ID is not known by the A1 controller");
+ }
+ String baseUrl = "http://" + nearRicMap.get(nearRtRicId) + "/a1-p/";
return UriComponentsBuilder.fromUriString(baseUrl).build().toString();
}
/**
* Retrieve the url of A1 healthcheck
- *
+ *
* @return the health check url
*/
- public String getHealthCheck() {
- return UriComponentsBuilder.fromUriString(getBaseUrl()).pathSegment("healthcheck").build()
+ public String getHealthCheck(final String nearRtRicId) {
+ return UriComponentsBuilder.fromUriString(getBaseUrl(nearRtRicId)).pathSegment("healthcheck").build()
.toString();
}
/**
* Retrieve the policy type url
- *
+ *
* @return the base url with the policytypes
*/
- public String getPolicyTypes() {
- return UriComponentsBuilder.fromUriString(getBaseUrl()).pathSegment("policytypes").build()
+ public String getPolicyTypes(final String nearRtRicId) {
+ return UriComponentsBuilder.fromUriString(getBaseUrl(nearRtRicId)).pathSegment("policytypes/").build()
.toString();
}
/**
* Retrieve the url of policy type id
- *
+ *
* @param policyTypeId Policy Type Id
* @return the policy type id url
*/
- public String getPolicyTypeId(final String policyTypeId) {
- return UriComponentsBuilder.fromUriString(getBaseUrl()).pathSegment("policytypes")
+ public String getPolicyTypeId(final String nearRtRicId,
+ final String policyTypeId) {
+ return UriComponentsBuilder.fromUriString(getBaseUrl(nearRtRicId)).pathSegment("policytypes")
.pathSegment(policyTypeId).build().toString();
}
/**
* Retrieve the url of the policy instances
- *
+ *
* @param policyTypeId Policy Type Id
* @return the policy instances for the given policy type
*/
- public String getPolicyInstances(final String policyTypeId) {
- return UriComponentsBuilder.fromUriString(getPolicyTypeId(policyTypeId)).pathSegment("policies")
+ public String getPolicyInstances(final String nearRtRicId,
+ final String policyTypeId) {
+ return UriComponentsBuilder.fromUriString(getPolicyTypeId(nearRtRicId, policyTypeId)).pathSegment("policies")
.build().toString();
}
/**
* Retrieve the url of the policy instance id
- *
+ *
* @param policyTypeId Policy Type Id
* @param policyInstanceId Policy Instance Id
* @return the policy instance id for the given policy type
*/
- public String getPolicyInstanceId(final String policyTypeId, final String policyInstanceId) {
- return UriComponentsBuilder.fromUriString(getPolicyTypeId(policyTypeId)).pathSegment("policies")
+ public String getPolicyInstanceId(final String nearRtRicId, final String policyTypeId,
+ final String policyInstanceId) {
+ return UriComponentsBuilder.fromUriString(getPolicyTypeId(nearRtRicId, policyTypeId)).pathSegment("policies")
.pathSegment(policyInstanceId).build().toString();
}
/**
* Retrieve the url of the policy instance id status
- *
+ *
* @param policyTypeId Policy Type Id
* @param policyInstanceId Policy Instance Id
* @return the policy instance id status for the given policy type
*/
- public String getPolicyInstanceIdStatus(final String policyTypeId,
+ public String getPolicyInstanceIdStatus(final String nearRtRicId, final String policyTypeId,
final String policyInstanceId) {
- return UriComponentsBuilder.fromUriString(getPolicyInstanceId(policyTypeId, policyInstanceId))
+ return UriComponentsBuilder.fromUriString(getPolicyInstanceId(nearRtRicId, policyTypeId, policyInstanceId))
.pathSegment("status").build().toString();
}
}