diff options
Diffstat (limited to 'vid-app-common/src/main/java/org/onap/vid/job/command/MacroServiceCommand.kt')
-rw-r--r-- | vid-app-common/src/main/java/org/onap/vid/job/command/MacroServiceCommand.kt | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/vid-app-common/src/main/java/org/onap/vid/job/command/MacroServiceCommand.kt b/vid-app-common/src/main/java/org/onap/vid/job/command/MacroServiceCommand.kt new file mode 100644 index 000000000..8ce73d713 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/job/command/MacroServiceCommand.kt @@ -0,0 +1,98 @@ +package org.onap.vid.job.command + +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate +import org.onap.vid.aai.ExceptionWithRequestInfo +import org.onap.vid.changeManagement.RequestDetailsWrapper +import org.onap.vid.exceptions.AbortingException +import org.onap.vid.exceptions.MaxRetriesException +import org.onap.vid.exceptions.TryAgainException +import org.onap.vid.job.Job +import org.onap.vid.job.JobAdapter +import org.onap.vid.job.JobCommand +import org.onap.vid.job.JobsBrokerService +import org.onap.vid.model.Action +import org.onap.vid.model.VidNotions.ModelCategory.* +import org.onap.vid.model.serviceInstantiation.ServiceInstantiation +import org.onap.vid.mso.RestMsoImplementation +import org.onap.vid.services.AsyncInstantiationBusinessLogic +import org.onap.vid.services.AuditService +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.beans.factory.config.ConfigurableBeanFactory +import org.springframework.context.annotation.Scope +import org.springframework.http.HttpMethod +import org.springframework.stereotype.Component +import java.util.* + +@Component +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +class MacroServiceCommand @Autowired constructor( + inProgressStatusService: InProgressStatusService, + watchChildrenJobsBL: WatchChildrenJobsBL, + private val asyncInstantiationBL: AsyncInstantiationBusinessLogic, + jobsBrokerService: JobsBrokerService, + private val msoRequestBuilder: MsoRequestBuilder, + msoResultHandlerService: MsoResultHandlerService, + jobAdapter: JobAdapter, + restMso: RestMsoImplementation, + auditService: AuditService +) : RootServiceCommand(restMso, inProgressStatusService, msoResultHandlerService, + watchChildrenJobsBL, jobsBrokerService, jobAdapter, asyncInstantiationBL, auditService, msoRequestBuilder), JobCommand { + + + companion object { + private val Logger = EELFLoggerDelegate.getLogger(MacroServiceCommand::class.java) + } + + override fun createChildren(): Job.JobStatus { + return Job.JobStatus.COMPLETED_WITH_NO_ACTION + } + + private val pre1806Models = setOf(Transport, INFRASTRUCTURE_VPN, SERVICE_WITH_COLLECTION_RESOURCE); + + override fun planCreateMyselfRestCall(commandParentData: CommandParentData, request: JobAdapter.AsyncJobRequest, userId: String, testApi: String?): MsoRestCallPlan { + try { + val instantiatePath = asyncInstantiationBL.getServiceInstantiationPath(request as ServiceInstantiation) + + val requestDetailsWrapper = generateRequest(sharedData.jobUuid, request, optimisticUniqueServiceInstanceName, userId) + + val actionDescription = "create macro service instance" + + return MsoRestCallPlan(HttpMethod.POST, instantiatePath, Optional.of(requestDetailsWrapper), Optional.empty(), actionDescription) + } + + //Aai return bad response while checking names uniqueness + catch (exception : ExceptionWithRequestInfo) { + Logger.error("Failed to check name uniqueness in AAI. VID will try again later", exception) + throw TryAgainException(exception); + } + + //Vid reached to max retries while trying to find unique name in AAI + catch (exception : MaxRetriesException) { + Logger.error("Failed to find unused name in AAI", exception) + throw AbortingException(exception); + } + } + + private fun generateRequest(jobUuid: UUID?, request: ServiceInstantiation, optimisticUniqueServiceInstanceName: String, userId: String): RequestDetailsWrapper<out Any> { + // for transport or for infrastructure VPN - send the pre 1806 request + if (shouldUsePre1806Request(request)){ + return msoRequestBuilder.generateMacroServicePre1806InstantiationRequest(request, userId) + } + return msoRequestBuilder.generateMacroServiceInstantiationRequest(jobUuid, request, optimisticUniqueServiceInstanceName, userId) + } + + protected fun shouldUsePre1806Request(request: ServiceInstantiation): Boolean { + return (request.vidNotions != null && pre1806Models.contains(request.vidNotions.modelCategory)) + } + + + override fun handleInProgressStatus(jobStatus: Job.JobStatus): Job.JobStatus { + asyncInstantiationBL.updateServiceInfoAndAuditStatus(sharedData.jobUuid, jobStatus) + return if (jobStatus==Job.JobStatus.PAUSE) Job.JobStatus.IN_PROGRESS else jobStatus + } + + override fun isDescendantHasAction(phase: Action): Boolean { + return false + } + +}
\ No newline at end of file |