aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/main/java/org/onap/vid/job/command/WatchChildrenJobsBL.kt
blob: b31e7f92e91aa43a0d8f72669f6c7477a0259124 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package org.onap.vid.job.command

import org.apache.commons.lang3.StringUtils
import org.onap.portalsdk.core.service.DataAccessService
import org.onap.vid.job.Job
import org.onap.vid.job.Job.JobStatus.*
import org.onap.vid.job.impl.JobDaoImpl
import org.onap.vid.utils.DaoUtils
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import java.util.*
import java.util.stream.Collectors
import java.util.stream.Stream


@Service
class WatchChildrenJobsBL @Autowired
constructor(private val dataAccessService: DataAccessService) {

    fun retrieveChildrenJobsStatus(childrenJobsIds: List<String>): Job.JobStatus {
        val jobs = getAllChildrenJobs(childrenJobsIds)

        val jobsStatuses = childrenJobsIds.stream()
                .map<JobDaoImpl> { jobId -> jobs[UUID.fromString(jobId)] }
                .map {when {
                    (it == null || it.status == null) -> Job.JobStatus.FAILED
                    else -> it.status
                }}

        return cumulateJobStatus(jobsStatuses)

    }

    fun cumulateJobStatus(childrenComulatedStatus: Job.JobStatus, fatherJobStatus: Job.JobStatus): Job.JobStatus {
        return cumulateJobStatus(Stream.of(childrenComulatedStatus, fatherJobStatus))
    }

    private fun cumulateJobStatus(jobsStatuses: Stream<Job.JobStatus>): Job.JobStatus {

        return jobsStatuses.reduce{ a, b ->
            when {
                !a.isFinal || !b.isFinal -> IN_PROGRESS
                a == COMPLETED_WITH_ERRORS || b == COMPLETED_WITH_ERRORS-> COMPLETED_WITH_ERRORS
                a == COMPLETED && b.isFailure -> COMPLETED_WITH_ERRORS
                b == COMPLETED && a.isFailure -> COMPLETED_WITH_ERRORS
                a == COMPLETED || b == COMPLETED -> COMPLETED
                a.isFailure || b.isFailure -> FAILED
                else ->  COMPLETED_WITH_NO_ACTION
            }
        } .orElse(COMPLETED_WITH_NO_ACTION)
  }

    private fun getAllChildrenJobs(childrenJobsIds: List<String>): Map<UUID, JobDaoImpl> {
        val jobs:MutableList<JobDaoImpl> = dataAccessService.getList(JobDaoImpl::class.java, filterByJobIds(childrenJobsIds), null, DaoUtils.getPropsMap()) as MutableList<JobDaoImpl>
        return jobs.stream().collect(Collectors.toMap( { it.uuid }, { it }))
    }

    private fun filterByJobIds(childrenJobsIds: List<String>): String {
        return " WHERE JOB_ID IN('" + StringUtils.join(childrenJobsIds, "', '") + "')"
    }
}