aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/main/java/org/onap/vid/dal/AsyncInstantiationRepository.kt
diff options
context:
space:
mode:
Diffstat (limited to 'vid-app-common/src/main/java/org/onap/vid/dal/AsyncInstantiationRepository.kt')
-rw-r--r--vid-app-common/src/main/java/org/onap/vid/dal/AsyncInstantiationRepository.kt147
1 files changed, 147 insertions, 0 deletions
diff --git a/vid-app-common/src/main/java/org/onap/vid/dal/AsyncInstantiationRepository.kt b/vid-app-common/src/main/java/org/onap/vid/dal/AsyncInstantiationRepository.kt
new file mode 100644
index 000000000..79c7297a3
--- /dev/null
+++ b/vid-app-common/src/main/java/org/onap/vid/dal/AsyncInstantiationRepository.kt
@@ -0,0 +1,147 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.vid.dal
+
+import org.onap.portalsdk.core.domain.support.DomainVo
+import org.onap.portalsdk.core.service.DataAccessService
+import org.onap.vid.dao.JobRequest
+import org.onap.vid.exceptions.GenericUncheckedException
+import org.onap.vid.exceptions.NotFoundException
+import org.onap.vid.job.Job
+import org.onap.vid.model.JobAuditStatus
+import org.onap.vid.model.ResourceInfo
+import org.onap.vid.model.ServiceInfo
+import org.onap.vid.model.serviceInstantiation.ServiceInstantiation
+import org.onap.vid.utils.DaoUtils
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Repository
+import java.sql.Timestamp
+import java.time.LocalDateTime
+import java.util.*
+import kotlin.collections.HashMap
+
+@Repository
+class AsyncInstantiationRepository @Autowired constructor(val dataAccessService:DataAccessService) {
+
+ fun addJobRequest(jobUuid: UUID, request:ServiceInstantiation) {
+ save(JobRequest(jobUuid, request))
+ }
+
+ fun getJobRequest(jobUuid: UUID):ServiceInstantiation? {
+ return getSingleItem(JobRequest::class.java, "JOB_ID", jobUuid).request
+ }
+
+ fun saveResourceInfo(resource:ResourceInfo) {
+ save(resource)
+ }
+
+ fun getResourceInfoByRootJobId(rootJobId: UUID): Map<String, ResourceInfo> {
+ val resourceInfoList:List<ResourceInfo> = getResultList(ResourceInfo::class.java, "ROOT_JOB_ID", rootJobId)
+
+ if (resourceInfoList.isEmpty()) {
+ throw GenericUncheckedException("Failed to retrieve resource info with rootJobId " + rootJobId + " from ResourceInfo table. no resource found")
+ }
+ return resourceInfoList.fold(HashMap(), { accumulator, item ->
+ accumulator.put(item.trackById, item); accumulator})
+ }
+
+ fun getResourceInfoByTrackId(trackById: String):ResourceInfo {
+ return getSingleItem(ResourceInfo::class.java, "TRACK_BY_ID", trackById)
+ }
+
+ fun saveServiceInfo(serviceInfo: ServiceInfo) {
+ save(serviceInfo)
+ }
+
+ fun getServiceInfoByJobId(jobUuid: UUID): ServiceInfo {
+ return getSingleItem(ServiceInfo::class.java, "jobId", jobUuid)
+ }
+
+ fun getServiceInfoByTemplateIdAndJobStatus(templateId: UUID, jobStatus: Job.JobStatus): List<ServiceInfo> {
+ return getResultList(ServiceInfo::class.java, mapOf("templateId" to templateId, "jobStatus" to jobStatus), "AND")
+ }
+
+ fun getAllServicesInfo(): List<ServiceInfo> {
+ return dataAccessService.getList(ServiceInfo::class.java, filterByCreationDateAndNotDeleted(), orderByCreatedDateAndStatus(), null) as List<ServiceInfo>
+ }
+
+ private fun filterByCreationDateAndNotDeleted(): String {
+ val minus3Months = LocalDateTime.now().minusMonths(3)
+ val filterDate = Timestamp.valueOf(minus3Months)
+ return " WHERE" +
+ " hidden = false" +
+ " and deleted_at is null" + // don't fetch deleted
+
+ " and created >= '" + filterDate + "' "
+ }
+
+ private fun orderByCreatedDateAndStatus(): String {
+ return " createdBulkDate DESC ,\n" +
+ " (CASE jobStatus\n" +
+ " WHEN 'COMPLETED' THEN 0\n" +
+ " WHEN 'FAILED' THEN 0\n" +
+ " WHEN 'COMPLETED_WITH_ERRORS' THEN 0\n" +
+ " WHEN 'IN_PROGRESS' THEN 1\n" +
+ " WHEN 'PAUSE' THEN 2\n" +
+ " WHEN 'PENDING' THEN 3\n" +
+ " WHEN 'STOPPED' THEN 3 END),\n" +
+ " statusModifiedDate "
+ }
+
+ fun getAuditStatuses(jobUUID: UUID, source: JobAuditStatus.SourceStatus): List<JobAuditStatus> {
+ // order by ORDINAL.
+ // CREATED_DATE is kept for backward compatibility: when all Ordinals are zero
+ return getResultList(JobAuditStatus::class.java, mapOf("SOURCE" to source, "JOB_ID" to jobUUID), "AND", " ORDINAL, CREATED_DATE ")
+ }
+
+ fun addJobAudiStatus(jobAuditStatus:JobAuditStatus) {
+ save(jobAuditStatus)
+ }
+
+ private fun <T: DomainVo> save(item:T) {
+ dataAccessService.saveDomainObject(item, DaoUtils.getPropsMap())
+ }
+
+ private fun <T> getSingleItem(className:Class<T>, filterKey:String, filterValue:Any): T {
+ val resultList:List<T> = getResultList(className, filterKey, filterValue)
+ if (resultList.size < 1) {
+ throw NotFoundException("Failed to retrieve $className with $filterKey $filterValue from table. no resource found")
+ }else if (resultList.size > 1) {
+ throw GenericUncheckedException("Failed to retrieve $className with $filterKey $filterValue from table. found more than 1 resources")
+ }
+ return resultList[0]
+ }
+
+ private fun <T> getResultList(className:Class<T>, filterKey:String, filterValue:Any): List<T> {
+ return getResultList(className, mapOf(filterKey to filterValue), "AND", null)
+ }
+
+ private fun <T> getResultList(className:Class<T>, filters: Map<String, Any>, conditionType: String): List<T> {
+ return getResultList(className, filters, conditionType, null)
+ }
+
+ private fun <T> getResultList(className:Class<T>, filters: Map<String, Any>, conditionType: String, orderBy: String?): List<T> {
+ var condition:String = filters
+ .map{f -> f.key + " = '" + f.value + "'"}
+ .joinToString(" $conditionType ")
+ return dataAccessService.getList(className, " WHERE $condition", orderBy, null) as List<T>
+ }
+}