Merge "Set resource data value when fetch from database"
[ccsdk/cds.git] / ms / blueprintsprocessor / functions / resource-resolution / src / main / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / functions / resource / resolution / ResourceDefinitionDSL.kt
1 /*
2  *  Copyright © 2019 IBM.
3  *
4  *  Licensed under the Apache License, Version 2.0 (the "License");
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  */
16
17 package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution
18
19 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes
20 import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeTemplate
21 import org.onap.ccsdk.cds.controllerblueprints.core.dsl.PropertyDefinitionBuilder
22 import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceAssignment
23 import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceDefinition
24
25 /** Resource Definition DSL **/
26 fun BluePrintTypes.resourceDefinitions(block: ResourceDefinitionsBuilder.() -> Unit)
27         : MutableMap<String, ResourceDefinition> {
28     return ResourceDefinitionsBuilder().apply(block).build()
29 }
30
31 fun BluePrintTypes.resourceDefinition(name: String, description: String,
32                                       block: ResourceDefinitionBuilder.() -> Unit): ResourceDefinition {
33     return ResourceDefinitionBuilder(name, description).apply(block).build()
34 }
35
36 /** Resource Mapping DSL **/
37 fun BluePrintTypes.resourceAssignments(block: ResourceAssignmentsBuilder.() -> Unit)
38         : MutableMap<String, ResourceAssignment> {
39     return ResourceAssignmentsBuilder().apply(block).build()
40 }
41
42 fun BluePrintTypes.resourceAssignment(name: String, dictionaryName: String, dictionarySource: String,
43                                       block: ResourceAssignmentBuilder.() -> Unit): ResourceAssignment {
44     return ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
45 }
46
47 class ResourceDefinitionsBuilder() {
48     private val resourceDefinitions: MutableMap<String, ResourceDefinition> = hashMapOf()
49
50     fun resourceDefinition(name: String, description: String,
51                            block: ResourceDefinitionBuilder.() -> Unit) {
52         val resourceDefinition = ResourceDefinitionBuilder(name, description).apply(block).build()
53         resourceDefinitions[resourceDefinition.name] = resourceDefinition
54     }
55
56     fun resourceDefinition(resourceDefinition: ResourceDefinition) {
57         resourceDefinitions[resourceDefinition.name] = resourceDefinition
58     }
59
60     fun build(): MutableMap<String, ResourceDefinition> {
61         return resourceDefinitions
62     }
63 }
64
65 class ResourceDefinitionBuilder(private val name: String, private val description: String) {
66     private val resourceDefinition = ResourceDefinition()
67
68     fun updatedBy(updatedBy: String) {
69         resourceDefinition.updatedBy = updatedBy
70     }
71
72     fun tags(tags: String) {
73         resourceDefinition.tags = tags
74     }
75
76     fun property(type: String, required: Boolean) {
77         resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).build()
78     }
79
80     fun property(type: String, required: Boolean,
81                  block: PropertyDefinitionBuilder.() -> Unit) {
82         resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
83     }
84
85     fun sources(block: ResourceDefinitionSourcesBuilder.() -> Unit) {
86         resourceDefinition.sources = ResourceDefinitionSourcesBuilder().apply(block).build()
87     }
88
89     fun sources(sources: MutableMap<String, NodeTemplate>) {
90         resourceDefinition.sources = sources
91     }
92
93     fun build(): ResourceDefinition {
94         resourceDefinition.name = name
95         return resourceDefinition
96     }
97 }
98
99 class ResourceDefinitionSourcesBuilder {
100     var sources: MutableMap<String, NodeTemplate> = hashMapOf()
101
102     fun source(source: NodeTemplate) {
103         sources[source.id!!] = source
104     }
105
106     fun sourceInput(id: String, description: String, block: SourceInputNodeTemplateBuilder.() -> Unit) {
107         sources[id] = SourceInputNodeTemplateBuilder(id, description).apply(block).build()
108     }
109
110     fun sourceDefault(id: String, description: String, block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
111         sources[id] = SourceDefaultNodeTemplateBuilder(id, description).apply(block).build()
112     }
113
114     fun sourceDb(id: String, description: String, block: SourceDbNodeTemplateBuilder.() -> Unit) {
115         sources[id] = SourceDbNodeTemplateBuilder(id, description).apply(block).build()
116     }
117
118     fun sourceRest(id: String, description: String, block: SourceRestNodeTemplateBuilder.() -> Unit) {
119         sources[id] = SourceRestNodeTemplateBuilder(id, description).apply(block).build()
120     }
121
122     fun sourceCapability(id: String, description: String, block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
123         sources[id] = SourceCapabilityNodeTemplateBuilder(id, description).apply(block).build()
124     }
125
126     fun build(): MutableMap<String, NodeTemplate> {
127         return sources
128     }
129 }
130
131 class ResourceAssignmentsBuilder() {
132     private val resourceAssignments: MutableMap<String, ResourceAssignment> = hashMapOf()
133
134     fun resourceAssignment(name: String, dictionaryName: String, dictionarySource: String,
135                            block: ResourceAssignmentBuilder.() -> Unit) {
136         val resourceAssignment = ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
137         resourceAssignments[resourceAssignment.name] = resourceAssignment
138     }
139
140     fun resourceAssignment(resourceAssignment: ResourceAssignment) {
141         resourceAssignments[resourceAssignment.name] = resourceAssignment
142     }
143
144     fun build(): MutableMap<String, ResourceAssignment> {
145         return resourceAssignments
146     }
147 }
148
149 class ResourceAssignmentBuilder(private val name: String, private val dictionaryName: String,
150                                 private val dictionarySource: String) {
151     private val resourceAssignment = ResourceAssignment()
152
153     fun inputParameter(inputParameter: Boolean) {
154         resourceAssignment.inputParameter = inputParameter
155     }
156
157     fun property(type: String, required: Boolean, description: String? = "") {
158         resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).build()
159     }
160
161     fun property(type: String, required: Boolean, description: String? = "",
162                  block: PropertyDefinitionBuilder.() -> Unit) {
163         resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
164     }
165
166     fun dependencies(dependencies: MutableList<String>) {
167         resourceAssignment.dependencies = dependencies
168     }
169
170     fun build(): ResourceAssignment {
171         resourceAssignment.name = name
172         resourceAssignment.dictionaryName = dictionaryName
173         resourceAssignment.dictionarySource = dictionarySource
174         return resourceAssignment
175     }
176 }