/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2023 Nordix Foundation
+ * Copyright (C) 2023-2024 Nordix Foundation
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.onap.cps.ncmp.events.async1_0_0.Response;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
+import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@Value("${app.ncmp.async-m2m.topic}")
private String ncmpAsyncM2mTopic;
+ @Value("${delay.module-references-delay-ms}")
+ private long moduleReferencesDelayMs;
+
+ @Value("${delay.module-resources-delay-ms}")
+ private long moduleResourcesDelayMs;
+
+ @Value("${delay.data-for-cm-handle-delay-ms}")
+ private long dataForCmHandleDelayMs;
+
private String dataOperationEventType = "org.onap.cps.ncmp.events.async1_0_0.DataOperationEvent";
/**
* Get all modules for given cm handle.
*
- * @param cmHandle The identifier for a network function, network element, subnetwork,
+ * @param cmHandleId The identifier for a network function, network element, subnetwork,
* or any other cm object by managed Network CM Proxy
* @param moduleReferencesRequest module references request body
* @return ResponseEntity response entity having module response as json string.
*/
- @PostMapping("/v1/ch/{cmHandle}/modules")
- public ResponseEntity<String> getModuleReferences(@PathVariable final String cmHandle,
+ @PostMapping("/v1/ch/{cmHandleId}/modules")
+ public ResponseEntity<String> getModuleReferences(@PathVariable final String cmHandleId,
@RequestBody final Object moduleReferencesRequest) {
- final String moduleResponseContent = ResourceFileReaderUtil
- .getResourceFileContent(applicationContext.getResource(
- ResourceLoader.CLASSPATH_URL_PREFIX + "module/moduleResponse.json"));
- log.info("cm handle: {} requested for modules", cmHandle);
+ delay(moduleReferencesDelayMs);
+ final String moduleResponseContent = getModuleResourceResponse(cmHandleId,
+ "ModuleResponse.json");
+ log.info("cm handle: {} requested for modules", cmHandleId);
return ResponseEntity.ok(moduleResponseContent);
}
/**
- * Get all module resources for given cm handle.
+ * Retrieves module resources for a given cmHandleId.
*
- * @param cmHandle The identifier for a network function, network element, subnetwork,
+ * @param cmHandleId The identifier for a network function, network element, subnetwork,
* or any other cm object by managed Network CM Proxy
* @param moduleResourcesReadRequest module resources read request body
* @return ResponseEntity response entity having module resources response as json string.
*/
- @PostMapping("/v1/ch/{cmHandle}/moduleResources")
+ @PostMapping("/v1/ch/{cmHandleId}/moduleResources")
public ResponseEntity<String> retrieveModuleResources(
- @PathVariable final String cmHandle,
+ @PathVariable final String cmHandleId,
@RequestBody final Object moduleResourcesReadRequest) {
- final String moduleResourcesResponseContent = ResourceFileReaderUtil
- .getResourceFileContent(applicationContext.getResource(
- ResourceLoader.CLASSPATH_URL_PREFIX + "module/moduleResourcesResponse.json"));
- log.info("cm handle: {} requested for module resources", cmHandle);
+ delay(moduleResourcesDelayMs);
+ final String moduleResourcesResponseContent = getModuleResourceResponse(cmHandleId,
+ "ModuleResourcesResponse.json");
+ log.info("cm handle: {} requested for modules resources", cmHandleId);
return ResponseEntity.ok(moduleResourcesResponseContent);
}
+ /**
+ * Get resource data from passthrough operational or running for a cm handle.
+ *
+ * @param cmHandleId The identifier for a network function, network element, subnetwork,
+ * or any other cm object by managed Network CM Proxy
+ * @param datastoreName datastore name
+ * @param resourceIdentifier resource identifier
+ * @param options options
+ * @param topic client given topic name
+ * @return (@ code ResponseEntity) response entity
+ */
+ @PostMapping("/v1/ch/{cmHandleId}/data/ds/{datastoreName}")
+ public ResponseEntity<String> getResourceDataForCmHandle(
+ @PathVariable("cmHandleId") final String cmHandleId,
+ @PathVariable("datastoreName") final String datastoreName,
+ @RequestParam(value = "resourceIdentifier") final String resourceIdentifier,
+ @RequestParam(value = "options", required = false) final String options,
+ @RequestParam(value = "topic", required = false) final String topic) {
+ delay(dataForCmHandleDelayMs);
+ final String sampleJson = ResourceFileReaderUtil.getResourceFileContent(applicationContext.getResource(
+ ResourceLoader.CLASSPATH_URL_PREFIX + "data/operational/ietf-network-topology-sample-rfc8345.json"));
+ return ResponseEntity.ok(sampleJson);
+ }
+
/**
* This method is not implemented for ONAP DMI plugin.
*
* @return (@ code ResponseEntity) response entity
*/
@PostMapping("/v1/data")
- public ResponseEntity<Void> getResourceDataForCmHandleDataOperation(@RequestParam(value = "topic")
- final String topic,
- @RequestParam(value = "requestId")
- final String requestId,
- @RequestBody final DmiDataOperationRequest
- dmiDataOperationRequest) {
+ public ResponseEntity<Void> getResourceDataForCmHandleDataOperation(
+ @RequestParam(value = "topic") final String topic,
+ @RequestParam(value = "requestId") final String requestId,
+ @RequestBody final DmiDataOperationRequest dmiDataOperationRequest) {
+ delay(dataForCmHandleDelayMs);
try {
log.info("Request received from the NCMP to DMI Plugin: {}",
objectMapper.writeValueAsString(dmiDataOperationRequest));
dataOperationEvent.setData(data);
return dataOperationEvent;
}
+
+ private String getModuleResourceResponse(final String cmHandleId, final String moduleResponseType) {
+ final String nodeType = cmHandleId.split("-")[0];
+ final String moduleResponseFilePath = String.format("module/%s%s", nodeType, moduleResponseType);
+ final Resource moduleResponseResource = applicationContext.getResource(
+ ResourceLoader.CLASSPATH_URL_PREFIX + moduleResponseFilePath);
+ if (moduleResponseResource.exists()) {
+ log.info("Using requested node type: {}", nodeType);
+ return ResourceFileReaderUtil.getResourceFileContent(moduleResponseResource);
+ }
+ log.info("Using default node type: ietfYang");
+ return ResourceFileReaderUtil.getResourceFileContent(applicationContext.getResource(
+ ResourceLoader.CLASSPATH_URL_PREFIX + "module/ietfYang" + moduleResponseType));
+ }
+
+ private void delay(final long milliseconds) {
+ try {
+ Thread.sleep(milliseconds);
+ } catch (final InterruptedException e) {
+ log.error("Thread sleep interrupted: {}", e.getMessage());
+ Thread.currentThread().interrupt();
+ }
+ }
}