Migrate ccsdk/apps to ccsdk/cds
[ccsdk/cds.git] / ms / controllerblueprints / modules / blueprint-core / src / main / kotlin / org / onap / ccsdk / cds / controllerblueprints / core / utils / ServiceTemplateUtils.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.controllerblueprints.core.utils
19
20 import org.onap.ccsdk.cds.controllerblueprints.core.data.ServiceTemplate
21 import org.onap.ccsdk.cds.controllerblueprints.core.data.TopologyTemplate
22
23 /**
24  *
25  *
26  * @author Brinda Santh
27  */
28 object ServiceTemplateUtils {
29
30     suspend fun getServiceTemplate(fileName: String): ServiceTemplate {
31         val content: String = JacksonReactorUtils.getContent(fileName)
32         return getServiceTemplateFromContent(content)
33     }
34
35     fun getServiceTemplateFromContent(content: String): ServiceTemplate {
36         return JacksonUtils.readValue(content)
37     }
38
39     fun merge(parentServiceTemplate: ServiceTemplate, toMerge: ServiceTemplate, removeImports: Boolean? = true): ServiceTemplate {
40         if (removeImports!!) {
41             parentServiceTemplate.imports = null
42             toMerge.imports = null
43         }
44
45         toMerge.metadata?.let {
46             parentServiceTemplate.metadata = parentServiceTemplate.metadata ?: hashMapOf()
47             parentServiceTemplate.metadata?.putAll(toMerge.metadata as MutableMap)
48         }
49
50         toMerge.dslDefinitions?.let {
51             parentServiceTemplate.dslDefinitions = parentServiceTemplate.dslDefinitions ?: hashMapOf()
52             parentServiceTemplate.dslDefinitions?.putAll(toMerge.dslDefinitions as MutableMap)
53         }
54
55         toMerge.dataTypes?.let {
56             parentServiceTemplate.dataTypes = parentServiceTemplate.dataTypes ?: hashMapOf()
57             parentServiceTemplate.dataTypes?.putAll(toMerge.dataTypes as MutableMap)
58         }
59
60         toMerge.nodeTypes?.let {
61             parentServiceTemplate.nodeTypes = parentServiceTemplate.nodeTypes ?: hashMapOf()
62             parentServiceTemplate.nodeTypes?.putAll(toMerge.nodeTypes as MutableMap)
63         }
64
65         toMerge.artifactTypes?.let {
66             parentServiceTemplate.artifactTypes = parentServiceTemplate.artifactTypes ?: hashMapOf()
67             parentServiceTemplate.artifactTypes?.putAll(toMerge.artifactTypes as MutableMap)
68         }
69
70         toMerge.repositories?.let {
71             parentServiceTemplate.repositories = parentServiceTemplate.repositories ?: hashMapOf()
72             parentServiceTemplate.repositories?.putAll(toMerge.repositories as MutableMap)
73         }
74
75         parentServiceTemplate.topologyTemplate = parentServiceTemplate.topologyTemplate ?: TopologyTemplate()
76
77         toMerge.topologyTemplate?.inputs?.let {
78             parentServiceTemplate.topologyTemplate?.inputs = parentServiceTemplate.topologyTemplate?.inputs
79                     ?: hashMapOf()
80             parentServiceTemplate.topologyTemplate?.inputs?.putAll(parentServiceTemplate.topologyTemplate?.inputs as MutableMap)
81         }
82
83         toMerge.topologyTemplate?.nodeTemplates?.let {
84             parentServiceTemplate.topologyTemplate?.nodeTemplates = parentServiceTemplate.topologyTemplate?.nodeTemplates
85                     ?: hashMapOf()
86             parentServiceTemplate.topologyTemplate?.nodeTemplates?.putAll(parentServiceTemplate.topologyTemplate?.nodeTemplates as MutableMap)
87         }
88
89         toMerge.topologyTemplate?.relationshipTemplates?.let {
90             parentServiceTemplate.topologyTemplate?.relationshipTemplates = parentServiceTemplate.topologyTemplate?.relationshipTemplates
91                     ?: hashMapOf()
92             parentServiceTemplate.topologyTemplate?.relationshipTemplates?.putAll(parentServiceTemplate.topologyTemplate?.relationshipTemplates as MutableMap)
93         }
94
95         toMerge.topologyTemplate?.policies?.let {
96             parentServiceTemplate.topologyTemplate?.policies = parentServiceTemplate.topologyTemplate?.policies
97                     ?: hashMapOf()
98             parentServiceTemplate.topologyTemplate?.policies?.putAll(parentServiceTemplate.topologyTemplate?.policies as MutableMap)
99         }
100
101         toMerge.topologyTemplate?.workflows?.let {
102             parentServiceTemplate.topologyTemplate?.workflows = parentServiceTemplate.topologyTemplate?.workflows
103                     ?: hashMapOf()
104             parentServiceTemplate.topologyTemplate?.workflows?.putAll(parentServiceTemplate.topologyTemplate?.workflows as MutableMap)
105         }
106         return parentServiceTemplate
107     }
108 }