Merge "Resource resolution should return a string"
[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.data.PropertyDefinition
22 import org.onap.ccsdk.cds.controllerblueprints.core.dsl.PropertyDefinitionBuilder
23 import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceAssignment
24 import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceDefinition
25
26 /** Resource Definition DSL **/
27 fun BluePrintTypes.resourceDefinitions(block: ResourceDefinitionsBuilder.() -> Unit)
28         : MutableMap<String, ResourceDefinition> {
29     return ResourceDefinitionsBuilder().apply(block).build()
30 }
31
32 fun BluePrintTypes.resourceDefinition(name: String, description: String,
33                                       block: ResourceDefinitionBuilder.() -> Unit): ResourceDefinition {
34     return ResourceDefinitionBuilder(name, description).apply(block).build()
35 }
36
37 /** Resource Mapping DSL **/
38 fun BluePrintTypes.resourceAssignments(block: ResourceAssignmentsBuilder.() -> Unit)
39         : MutableMap<String, ResourceAssignment> {
40     return ResourceAssignmentsBuilder().apply(block).build()
41 }
42
43 fun BluePrintTypes.resourceAssignment(name: String, dictionaryName: String, dictionarySource: String,
44                                       block: ResourceAssignmentBuilder.() -> Unit): ResourceAssignment {
45     return ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
46 }
47
48 class ResourceDefinitionsBuilder() {
49     private val resourceDefinitions: MutableMap<String, ResourceDefinition> = hashMapOf()
50
51     fun resourceDefinition(name: String, description: String,
52                            block: ResourceDefinitionBuilder.() -> Unit) {
53         val resourceDefinition = ResourceDefinitionBuilder(name, description).apply(block).build()
54         resourceDefinitions[resourceDefinition.name] = resourceDefinition
55     }
56
57     fun resourceDefinition(resourceDefinition: ResourceDefinition) {
58         resourceDefinitions[resourceDefinition.name] = resourceDefinition
59     }
60
61     fun build(): MutableMap<String, ResourceDefinition> {
62         return resourceDefinitions
63     }
64 }
65
66 class ResourceDefinitionBuilder(private val name: String, private val description: String) {
67     private val resourceDefinition = ResourceDefinition()
68
69     fun updatedBy(updatedBy: String) {
70         resourceDefinition.updatedBy = updatedBy
71     }
72
73     fun tags(tags: String) {
74         resourceDefinition.tags = tags
75     }
76
77     fun property(property: PropertyDefinition) {
78         resourceDefinition.property = property
79     }
80
81     fun property(type: String, required: Boolean) {
82         resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).build()
83     }
84
85     fun property(type: String, required: Boolean,
86                  block: PropertyDefinitionBuilder.() -> Unit) {
87         resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
88     }
89
90     fun sources(block: ResourceDefinitionSourcesBuilder.() -> Unit) {
91         resourceDefinition.sources = ResourceDefinitionSourcesBuilder().apply(block).build()
92     }
93
94     fun sources(sources: MutableMap<String, NodeTemplate>) {
95         resourceDefinition.sources = sources
96     }
97
98     fun build(): ResourceDefinition {
99         resourceDefinition.name = name
100         return resourceDefinition
101     }
102 }
103
104 class ResourceDefinitionSourcesBuilder {
105     var sources: MutableMap<String, NodeTemplate> = hashMapOf()
106
107     fun source(source: NodeTemplate) {
108         sources[source.id!!] = source
109     }
110
111     fun sourceInput(id: String, description: String, block: SourceInputNodeTemplateBuilder.() -> Unit) {
112         sources[id] = SourceInputNodeTemplateBuilder(id, description).apply(block).build()
113     }
114
115     fun sourceDefault(id: String, description: String, block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
116         sources[id] = SourceDefaultNodeTemplateBuilder(id, description).apply(block).build()
117     }
118
119     fun sourceDb(id: String, description: String, block: SourceDbNodeTemplateBuilder.() -> Unit) {
120         sources[id] = SourceDbNodeTemplateBuilder(id, description).apply(block).build()
121     }
122
123     fun sourceRest(id: String, description: String, block: SourceRestNodeTemplateBuilder.() -> Unit) {
124         sources[id] = SourceRestNodeTemplateBuilder(id, description).apply(block).build()
125     }
126
127     fun sourceCapability(id: String, description: String, block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
128         sources[id] = SourceCapabilityNodeTemplateBuilder(id, description).apply(block).build()
129     }
130
131     fun build(): MutableMap<String, NodeTemplate> {
132         return sources
133     }
134 }
135
136 class ResourceAssignmentsBuilder() {
137     private val resourceAssignments: MutableMap<String, ResourceAssignment> = hashMapOf()
138
139     fun resourceAssignment(name: String, dictionaryName: String, dictionarySource: String,
140                            block: ResourceAssignmentBuilder.() -> Unit) {
141         val resourceAssignment = ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
142         resourceAssignments[resourceAssignment.name] = resourceAssignment
143     }
144
145     fun resourceAssignment(resourceAssignment: ResourceAssignment) {
146         resourceAssignments[resourceAssignment.name] = resourceAssignment
147     }
148
149     fun build(): MutableMap<String, ResourceAssignment> {
150         return resourceAssignments
151     }
152 }
153
154 class ResourceAssignmentBuilder(private val name: String, private val dictionaryName: String,
155                                 private val dictionarySource: String) {
156     private val resourceAssignment = ResourceAssignment()
157
158     fun inputParameter(inputParameter: Boolean) {
159         resourceAssignment.inputParameter = inputParameter
160     }
161
162     fun property(type: String, required: Boolean, description: String? = "") {
163         resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).build()
164     }
165
166     fun property(type: String, required: Boolean, description: String? = "",
167                  block: PropertyDefinitionBuilder.() -> Unit) {
168         resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
169     }
170
171     fun source(source: NodeTemplate) {
172         resourceAssignment.dictionarySourceDefinition = source
173     }
174
175     fun sourceInput(block: SourceInputNodeTemplateBuilder.() -> Unit) {
176         resourceAssignment.dictionarySourceDefinition = SourceInputNodeTemplateBuilder(dictionarySource, "")
177                 .apply(block).build()
178     }
179
180     fun sourceDefault(block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
181         resourceAssignment.dictionarySourceDefinition = SourceDefaultNodeTemplateBuilder(dictionarySource, "")
182                 .apply(block).build()
183     }
184
185     fun sourceDb(block: SourceDbNodeTemplateBuilder.() -> Unit) {
186         resourceAssignment.dictionarySourceDefinition = SourceDbNodeTemplateBuilder(dictionarySource, "")
187                 .apply(block).build()
188     }
189
190     fun sourceRest(block: SourceRestNodeTemplateBuilder.() -> Unit) {
191         resourceAssignment.dictionarySourceDefinition = SourceRestNodeTemplateBuilder(dictionarySource, "")
192                 .apply(block).build()
193     }
194
195     fun sourceCapability(block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
196         resourceAssignment.dictionarySourceDefinition = SourceCapabilityNodeTemplateBuilder(dictionarySource, "")
197                 .apply(block).build()
198     }
199
200     fun dependencies(dependencies: MutableList<String>) {
201         resourceAssignment.dependencies = dependencies
202     }
203
204     fun build(): ResourceAssignment {
205         resourceAssignment.name = name
206         resourceAssignment.dictionaryName = dictionaryName
207         resourceAssignment.dictionarySource = dictionarySource
208         return resourceAssignment
209     }
210 }