1 package org.onap.vid.job.command;
3 import org.apache.commons.collections.MapUtils;
4 import org.onap.vid.job.Job;
5 import org.onap.vid.job.Job.JobStatus;
6 import org.onap.vid.job.JobCommand;
7 import org.onap.vid.job.JobType;
8 import org.onap.vid.job.NextCommand;
9 import org.onap.vid.job.command.CommandParentData.CommandDataKey;
10 import org.onap.vid.job.impl.JobSharedData;
11 import org.onap.vid.model.serviceInstantiation.ServiceInstantiation;
12 import org.onap.vid.properties.Features;
13 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
14 import org.springframework.context.annotation.Scope;
15 import org.springframework.stereotype.Component;
17 import java.util.List;
19 import java.util.stream.Collectors;
20 import java.util.stream.Stream;
23 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
24 public class ServiceInProgressStatusCommand extends BaseInProgressStatusCommand {
26 public ServiceInProgressStatusCommand() {
29 ServiceInProgressStatusCommand(JobSharedData sharedData, MsoResourceIds msoResourceIds) {
30 init(sharedData, msoResourceIds.getRequestId(), msoResourceIds.getInstanceId());
34 protected ExpiryChecker getExpiryChecker() {
35 return new ServiceExpiryChecker();
38 protected NextCommand processJobStatus(Job.JobStatus jobStatus) {
39 JobCommand jobCommand = this;
40 Job.JobStatus nextJobStatus = jobStatus;
43 asyncInstantiationBL.handleFailedInstantiation(getSharedData().getJobUuid());
44 return new NextCommand(nextJobStatus, jobCommand);
46 nextJobStatus = Job.JobStatus.IN_PROGRESS;
49 ServiceInstantiation request = (ServiceInstantiation) getSharedData().getRequest();
50 if (isNeedToCreateChildJobs(request)) {
51 List<String> childrenJobs = getChildJobs(request);
52 nextJobStatus = Job.JobStatus.IN_PROGRESS;
53 jobCommand = new WatchingCommand(getSharedData(), childrenJobs, true);
54 return new NextCommand(nextJobStatus, jobCommand);
59 asyncInstantiationBL.updateServiceInfoAndAuditStatus(getSharedData().getJobUuid(), jobStatus);
60 return new NextCommand(nextJobStatus, jobCommand);
63 private List<String> getChildJobs(ServiceInstantiation request) {
64 Map<String, Object> dataForChild = buildDataForChild(request);
66 Stream<String> vnfJobs = request.getVnfs().values().stream().map(
67 vnf -> jobsBrokerService.add(
68 jobAdapter.createChildJob(JobType.VnfInstantiation, JobStatus.CREATING , vnf, getSharedData(), dataForChild)).toString()
71 Stream<String> networkJobs = request.getNetworks().values().stream().map(
72 network -> jobsBrokerService.add(
73 jobAdapter.createChildJob(JobType.NetworkInstantiation, JobStatus.CREATING , network, getSharedData(), dataForChild)).toString()
76 Stream<String> instanceGroupJobs = request.getVnfGroups().values().stream().map(
77 instanceGroup -> jobsBrokerService.add(
78 jobAdapter.createChildJob(JobType.InstanceGroupInstantiation, JobStatus.CREATING , instanceGroup, getSharedData(), dataForChild)).toString()
81 return Stream.of(vnfJobs, networkJobs, instanceGroupJobs)
82 .reduce(Stream::concat)
83 .orElseGet(Stream::empty)
84 .collect(Collectors.toList());
87 public boolean isNeedToCreateChildJobs(ServiceInstantiation request) {
88 return featureManager.isActive(Features.FLAG_ASYNC_ALACARTE_VNF) && request.isALaCarte() &&
90 MapUtils.isNotEmpty(request.getVnfs()) || MapUtils.isNotEmpty(request.getNetworks()) ||
91 (featureManager.isActive(Features.FLAG_1902_VNF_GROUPING) && MapUtils.isNotEmpty(request.getVnfGroups()))
95 protected Map<String, Object> buildDataForChild(ServiceInstantiation request) {
96 commandParentData.addInstanceId(CommandDataKey.SERVICE_INSTANCE_ID, this.instanceId);
97 commandParentData.addModelInfo(CommandDataKey.SERVICE_MODEL_INFO, request.getModelInfo());
98 return commandParentData.getParentData();