9903b57f150eef10b78edf852a00deefbec74b42
[ccsdk/cds.git] / ms / blueprintsprocessor / modules / blueprints / 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(
40         parentServiceTemplate: ServiceTemplate,
41         toMerge: ServiceTemplate,
42         removeImports: Boolean? = true
43     ): ServiceTemplate {
44         if (removeImports!!) {
45             parentServiceTemplate.imports = null
46             toMerge.imports = null
47         }
48
49         toMerge.metadata?.let {
50             parentServiceTemplate.metadata = parentServiceTemplate.metadata ?: hashMapOf()
51             parentServiceTemplate.metadata?.putAll(toMerge.metadata as MutableMap)
52         }
53
54         toMerge.dslDefinitions?.let {
55             parentServiceTemplate.dslDefinitions = parentServiceTemplate.dslDefinitions ?: hashMapOf()
56             parentServiceTemplate.dslDefinitions?.putAll(toMerge.dslDefinitions as MutableMap)
57         }
58
59         toMerge.dataTypes?.let {
60             parentServiceTemplate.dataTypes = parentServiceTemplate.dataTypes ?: hashMapOf()
61             parentServiceTemplate.dataTypes?.putAll(toMerge.dataTypes as MutableMap)
62         }
63
64         toMerge.nodeTypes?.let {
65             parentServiceTemplate.nodeTypes = parentServiceTemplate.nodeTypes ?: hashMapOf()
66             parentServiceTemplate.nodeTypes?.putAll(toMerge.nodeTypes as MutableMap)
67         }
68
69         toMerge.relationshipTypes?.let {
70             parentServiceTemplate.relationshipTypes = parentServiceTemplate.relationshipTypes ?: hashMapOf()
71             parentServiceTemplate.relationshipTypes?.putAll(toMerge.relationshipTypes as MutableMap)
72         }
73
74         toMerge.artifactTypes?.let {
75             parentServiceTemplate.artifactTypes = parentServiceTemplate.artifactTypes ?: hashMapOf()
76             parentServiceTemplate.artifactTypes?.putAll(toMerge.artifactTypes as MutableMap)
77         }
78
79         toMerge.repositories?.let {
80             parentServiceTemplate.repositories = parentServiceTemplate.repositories ?: hashMapOf()
81             parentServiceTemplate.repositories?.putAll(toMerge.repositories as MutableMap)
82         }
83
84         parentServiceTemplate.topologyTemplate = parentServiceTemplate.topologyTemplate ?: TopologyTemplate()
85
86         toMerge.topologyTemplate?.inputs?.let {
87             parentServiceTemplate.topologyTemplate?.inputs = parentServiceTemplate.topologyTemplate?.inputs
88                 ?: hashMapOf()
89             parentServiceTemplate.topologyTemplate?.inputs?.putAll(parentServiceTemplate.topologyTemplate?.inputs as MutableMap)
90         }
91
92         toMerge.topologyTemplate?.nodeTemplates?.let {
93             parentServiceTemplate.topologyTemplate?.nodeTemplates =
94                 parentServiceTemplate.topologyTemplate?.nodeTemplates
95                     ?: hashMapOf()
96             parentServiceTemplate.topologyTemplate?.nodeTemplates?.putAll(parentServiceTemplate.topologyTemplate?.nodeTemplates as MutableMap)
97         }
98
99         toMerge.topologyTemplate?.relationshipTemplates?.let {
100             parentServiceTemplate.topologyTemplate?.relationshipTemplates =
101                 parentServiceTemplate.topologyTemplate?.relationshipTemplates
102                     ?: hashMapOf()
103             parentServiceTemplate.topologyTemplate?.relationshipTemplates?.putAll(parentServiceTemplate.topologyTemplate?.relationshipTemplates as MutableMap)
104         }
105
106         toMerge.topologyTemplate?.policies?.let {
107             parentServiceTemplate.topologyTemplate?.policies = parentServiceTemplate.topologyTemplate?.policies
108                 ?: hashMapOf()
109             parentServiceTemplate.topologyTemplate?.policies?.putAll(parentServiceTemplate.topologyTemplate?.policies as MutableMap)
110         }
111
112         toMerge.topologyTemplate?.workflows?.let {
113             parentServiceTemplate.topologyTemplate?.workflows = parentServiceTemplate.topologyTemplate?.workflows
114                 ?: hashMapOf()
115             parentServiceTemplate.topologyTemplate?.workflows?.putAll(parentServiceTemplate.topologyTemplate?.workflows as MutableMap)
116         }
117         return parentServiceTemplate
118     }
119 }