Renaming Files having BluePrint to have Blueprint
[ccsdk/cds.git] / ms / blueprintsprocessor / modules / inbounds / designer-api / src / main / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / designer / api / load / ResourceDictionaryLoadService.kt
1 /*
2  * Copyright © 2017-2018 AT&T Intellectual Property.
3  * Modifications Copyright © 2019 IBM.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 package org.onap.ccsdk.cds.blueprintsprocessor.designer.api.load
19
20 import kotlinx.coroutines.async
21 import kotlinx.coroutines.awaitAll
22 import kotlinx.coroutines.coroutineScope
23 import org.apache.commons.lang3.text.StrBuilder
24 import org.onap.ccsdk.cds.blueprintsprocessor.designer.api.handler.ResourceDictionaryHandler
25 import org.onap.ccsdk.cds.controllerblueprints.core.BlueprintException
26 import org.onap.ccsdk.cds.controllerblueprints.core.normalizedFile
27 import org.onap.ccsdk.cds.controllerblueprints.core.readNBText
28 import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
29 import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceDefinition
30 import org.slf4j.LoggerFactory
31 import org.springframework.stereotype.Service
32 import java.io.File
33
34 @Service
35 open class ResourceDictionaryLoadService(private val resourceDictionaryHandler: ResourceDictionaryHandler) {
36
37     private val log = LoggerFactory.getLogger(ResourceDictionaryLoadService::class.java)
38
39     open suspend fun loadPathsResourceDictionary(paths: List<String>) {
40         coroutineScope {
41             val deferred = paths.map {
42                 async {
43                     loadPathResourceDictionary(it)
44                 }
45             }
46             deferred.awaitAll()
47         }
48     }
49
50     open suspend fun loadPathResourceDictionary(path: String) {
51         log.info(" ******* loadResourceDictionary($path) ********")
52         val files = normalizedFile(path).listFiles()
53         val errorBuilder = StrBuilder()
54
55         coroutineScope() {
56             val deferred = files.map {
57                 async {
58                     loadResourceDictionary(errorBuilder, it)
59                 }
60             }
61             deferred.awaitAll()
62         }
63
64         if (!errorBuilder.isEmpty) {
65             log.error(errorBuilder.toString())
66         }
67     }
68
69     private suspend fun loadResourceDictionary(errorBuilder: StrBuilder, file: File) {
70         try {
71             log.trace("Loading Resource Dictionary(${file.name}}")
72             val definitionContent = file.readNBText()
73             val resourceDefinition = JacksonUtils.readValue(definitionContent, ResourceDefinition::class.java)
74             if (resourceDefinition != null) {
75                 resourceDictionaryHandler.saveResourceDefinition(resourceDefinition)
76                 log.trace("Resource dictionary(${file.name}) loaded successfully ")
77             } else {
78                 throw BlueprintException("couldn't get dictionary from content information")
79             }
80         } catch (e: Exception) {
81             errorBuilder.appendln("Couldn't load Resource dictionary (${file.name}: ${e.message})")
82         }
83     }
84 }