package org.onap.so.bpmn.infrastructure.scripts
import com.fasterxml.jackson.databind.ObjectMapper
+import org.apache.commons.lang3.StringUtils
import org.camunda.bpm.engine.delegate.DelegateExecution
import org.onap.so.beans.nsmf.EsrInfo
+import org.onap.so.beans.nsmf.JobStatusResponse
import org.onap.so.beans.nsmf.NssiResponse
import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
import org.onap.so.beans.nsmf.ResponseDescriptor
import org.onap.so.beans.nsmf.ServiceInfo
import org.onap.so.beans.nsmf.SliceTaskInfo
+import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
+import org.onap.so.beans.nsmf.oof.SubnetType
import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
import org.onap.so.bpmn.common.scripts.ExceptionUtil
import org.onap.so.bpmn.common.scripts.NssmfAdapterUtils
-import org.onap.so.bpmn.core.domain.ModelInfo
-import org.onap.so.bpmn.core.domain.ServiceDecomposition
import org.onap.so.bpmn.core.json.JsonUtils
-import org.onap.aaiclient.client.aai.AAIObjectType
-import org.onap.aaiclient.client.aai.AAIResourcesClient
-import org.onap.aaiclient.client.aai.entities.AAIEdgeLabel
-import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
-import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
-import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
-import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types
import org.slf4j.Logger
import org.slf4j.LoggerFactory
-import org.springframework.http.ResponseEntity
-import static org.apache.commons.lang3.StringUtils.isBlank
class DoAllocateNSSI extends AbstractServiceTaskProcessor {
private static final NSSMF_ALLOCATE_URL = "/api/rest/provMns/v1/NSS/SliceProfiles"
- private static final NSSMF_QUERY_JOB_STATUS_URL = "/NSS/jobs/%s"
+ private static final NSSMF_QUERY_JOB_STATUS_URL = "/api/rest/provMns/v1/NSS/jobs/%s"
@Override
void preProcessRequest(DelegateExecution execution) {
NssmfAdapterNBIRequest nbiRequest = execution.getVariable("nbiRequest") as NssmfAdapterNBIRequest
- //SliceTaskInfo sliceTaskInfo = execution.getVariable("sliceTaskInfo") as SliceTaskInfo
+ execution.setVariable("currentCycle", 0)
boolean isNSIOptionAvailable = execution.getVariable("isNSIOptionAvailable") as Boolean
- if (isNSIOptionAvailable) {
- nbiRequest.serviceInfo.setActionType("modify")
- } else {
+ if (!isNSIOptionAvailable) {
+ nbiRequest.serviceInfo.setActionType("allocate")
+ } else if (StringUtils.isBlank(nbiRequest.serviceInfo.nssiId)){
nbiRequest.serviceInfo.setActionType("allocate")
+ } else {
+ nbiRequest.serviceInfo.setActionType("modify")
}
execution.setVariable("nbiRequest", nbiRequest)
logger.trace("Exit preProcessRequest")
*/
void sendCreateRequestNSSMF(DelegateExecution execution) {
NssmfAdapterNBIRequest nbiRequest = execution.getVariable("nbiRequest") as NssmfAdapterNBIRequest
- String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, NSSMF_ALLOCATE_URL,
- objectMapper.writeValueAsString(nbiRequest))
- ResponseEntity responseEntity = objectMapper.readValue(response, ResponseEntity.class)
- String respBody = responseEntity.getBody()
- NssiResponse result = objectMapper.readValue(respBody, NssiResponse.class)
- //todo: if success
- //todo:
+ String nssmfRequest = objectMapper.writeValueAsString(nbiRequest)
+ logger.debug("sendCreateRequestNSSMF: " + nssmfRequest)
+
+ String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, NSSMF_ALLOCATE_URL, nssmfRequest)
+
+ if (response != null) {
+ NssiResponse nssiResponse = objectMapper.readValue(response, NssiResponse.class)
+ execution.setVariable("nssiAllocateResult", nssiResponse)
+ }
+
execution.setVariable("serviceInfo", nbiRequest.getServiceInfo())
execution.setVariable("esrInfo", nbiRequest.getEsrInfo())
}
String response =
nssmfAdapterUtils.sendPostRequestNSSMF(execution, endpoint, objectMapper.writeValueAsString(nbiRequest))
- ResponseEntity responseEntity = objectMapper.readValue(response, ResponseEntity.class)
- String result = responseEntity.getBody()
- //todo;if success
- ResponseDescriptor responseDescriptor = objectMapper.readValue(result, ResponseDescriptor.class)
+ logger.debug("nssmf response nssiAllocateStatus:" + response)
+
+ if (response != null) {
+ JobStatusResponse jobStatusResponse = objectMapper.readValue(response, JobStatusResponse.class)
+ if (StringUtils.isBlank(nssiId)) {
+ nssiAllocateResult.setNssiId(jobStatusResponse.getResponseDescriptor().getNssiId())
+ execution.setVariable("nssiAllocateResult", nssiAllocateResult)
+ }
- //todo: handle status
- execution.setVariable("nssiAllocateResult", responseDescriptor)
+ execution.setVariable("nssiAllocateStatus", jobStatusResponse)
+ if (jobStatusResponse.getResponseDescriptor().getProgress() == 100) {
+ nssiAllocateResult.setNssiId(jobStatusResponse.getResponseDescriptor().getNssiId())
+ execution.setVariable("jobFinished", true)
+ }
+ }
}
void prepareUpdateOrchestrationTask(DelegateExecution execution) {
- //todo;update orchestration task
+ logger.debug("Start prepareUpdateOrchestrationTask progress")
+ String requestMethod = "PUT"
+
+ SliceTaskParamsAdapter sliceParams =
+ execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+ JobStatusResponse jobStatusResponse = execution.getVariable("nssiAllocateStatus") as JobStatusResponse
+ ResponseDescriptor response = jobStatusResponse.getResponseDescriptor()
+ SubnetType subnetType = execution.getVariable("subnetType") as SubnetType
+
+ SliceTaskInfo sliceTaskInfo = execution.getVariable("sliceTaskInfo") as SliceTaskInfo
+ sliceTaskInfo.progress = response.getProgress()
+ sliceTaskInfo.status = response.getStatus().toLowerCase()
+ sliceTaskInfo.statusDescription = response.getStatusDescription()
+ updateNssiResult(sliceParams, subnetType, sliceTaskInfo)
+
+ execution.setVariable("CSSOT_paramJson", objectMapper.writeValueAsString(sliceParams))
+ execution.setVariable("CSSOT_requestMethod", requestMethod)
+
+ execution.setVariable("sliceTaskParams", sliceParams)
+ execution.setVariable("sliceTaskInfo", sliceTaskInfo)
+
+ logger.debug("Finish prepareUpdateOrchestrationTask progress")
+ }
+
+ private void updateNssiResult(SliceTaskParamsAdapter sliceTaskParams, SubnetType subnetType,
+ SliceTaskInfo sliceTaskInfo) {
+ switch (subnetType) {
+ case SubnetType.CN:
+ sliceTaskParams.cnSliceTaskInfo = sliceTaskInfo
+ break
+ case SubnetType.AN:
+ sliceTaskParams.anSliceTaskInfo = sliceTaskInfo
+ break
+ case SubnetType.TN_BH:
+ sliceTaskParams.tnBHSliceTaskInfo = sliceTaskInfo
+ break
+ case SubnetType.TN_FH:
+ sliceTaskParams.tnFHSliceTaskInfo = sliceTaskInfo
+ break
+ case SubnetType.TN_MH:
+ sliceTaskParams.tnMHSliceTaskInfo = sliceTaskInfo
+ break
+ }
}
void timeDelay(DelegateExecution execution) {
- //todo: time delay
+ logger.trace("Enter timeDelay in DoAllocateNSSI()")
+ try {
+ Thread.sleep(60000)
+ int currentCycle = execution.getVariable("currentCycle") as Integer
+ currentCycle = currentCycle + 1
+ if(currentCycle > 60)
+ {
+ logger.trace("Completed all the retry times... but still nssmf havent completed the creation process...")
+ exceptionUtil.buildAndThrowWorkflowException(execution, 500, "NSSMF creation didnt complete by time...")
+ }
+ execution.setVariable("currentCycle", currentCycle)
+ } catch(InterruptedException e) {
+ logger.info("Time Delay exception" + e)
+ }
+ logger.trace("Exit timeDelay in DoAllocateNSSI()")
}
}