Renaming Files having BluePrint to have Blueprint
[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(
33     name: String,
34     description: String,
35     block: ResourceDefinitionBuilder.() -> Unit
36 ): ResourceDefinition {
37     return ResourceDefinitionBuilder(name, description).apply(block).build()
38 }
39
40 /** Resource Mapping DSL **/
41 fun BlueprintTypes.resourceAssignments(block: ResourceAssignmentsBuilder.() -> Unit):
42     MutableMap<String, ResourceAssignment> {
43         return ResourceAssignmentsBuilder().apply(block).build()
44     }
45
46 fun BlueprintTypes.resourceAssignment(
47     name: String,
48     dictionaryName: String,
49     dictionarySource: String,
50     block: ResourceAssignmentBuilder.() -> Unit
51 ): ResourceAssignment {
52     return ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
53 }
54
55 class ResourceDefinitionsBuilder() {
56
57     private val resourceDefinitions: MutableMap<String, ResourceDefinition> = hashMapOf()
58
59     fun resourceDefinition(
60         name: String,
61         description: String,
62         block: ResourceDefinitionBuilder.() -> Unit
63     ) {
64         val resourceDefinition = ResourceDefinitionBuilder(name, description).apply(block).build()
65         resourceDefinitions[resourceDefinition.name] = resourceDefinition
66     }
67
68     fun resourceDefinition(resourceDefinition: ResourceDefinition) {
69         resourceDefinitions[resourceDefinition.name] = resourceDefinition
70     }
71
72     fun build(): MutableMap<String, ResourceDefinition> {
73         return resourceDefinitions
74     }
75 }
76
77 class ResourceDefinitionBuilder(private val name: String, private val description: String) {
78
79     private val resourceDefinition = ResourceDefinition()
80
81     fun updatedBy(updatedBy: String) {
82         resourceDefinition.updatedBy = updatedBy
83     }
84
85     fun tags(tags: String) {
86         resourceDefinition.tags = tags
87     }
88
89     fun property(property: PropertyDefinition) {
90         resourceDefinition.property = property
91     }
92
93     fun property(type: String, required: Boolean) {
94         resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).build()
95     }
96
97     fun property(
98         type: String,
99         required: Boolean,
100         block: PropertyDefinitionBuilder.() -> Unit
101     ) {
102         resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
103     }
104
105     fun sources(block: ResourceDefinitionSourcesBuilder.() -> Unit) {
106         resourceDefinition.sources = ResourceDefinitionSourcesBuilder().apply(block).build()
107     }
108
109     fun sources(sources: MutableMap<String, NodeTemplate>) {
110         resourceDefinition.sources = sources
111     }
112
113     fun build(): ResourceDefinition {
114         resourceDefinition.name = name
115         return resourceDefinition
116     }
117 }
118
119 class ResourceDefinitionSourcesBuilder {
120
121     var sources: MutableMap<String, NodeTemplate> = hashMapOf()
122
123     fun source(source: NodeTemplate) {
124         sources[source.id!!] = source
125     }
126
127     fun sourceInput(id: String, description: String, block: SourceInputNodeTemplateBuilder.() -> Unit) {
128         sources[id] = SourceInputNodeTemplateBuilder(id, description).apply(block).build()
129     }
130
131     fun sourceDefault(id: String, description: String, block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
132         sources[id] = SourceDefaultNodeTemplateBuilder(id, description).apply(block).build()
133     }
134
135     fun sourceDb(id: String, description: String, block: SourceDbNodeTemplateBuilder.() -> Unit) {
136         sources[id] = SourceDbNodeTemplateBuilder(id, description).apply(block).build()
137     }
138
139     fun sourceRest(id: String, description: String, block: SourceRestNodeTemplateBuilder.() -> Unit) {
140         sources[id] = SourceRestNodeTemplateBuilder(id, description).apply(block).build()
141     }
142
143     fun sourceCapability(id: String, description: String, block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
144         sources[id] = SourceCapabilityNodeTemplateBuilder(id, description).apply(block).build()
145     }
146
147     fun build(): MutableMap<String, NodeTemplate> {
148         return sources
149     }
150 }
151
152 class ResourceAssignmentsBuilder() {
153
154     private val resourceAssignments: MutableMap<String, ResourceAssignment> = hashMapOf()
155
156     fun resourceAssignment(
157         name: String,
158         dictionaryName: String,
159         dictionarySource: String,
160         block: ResourceAssignmentBuilder.() -> Unit
161     ) {
162         val resourceAssignment = ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
163         resourceAssignments[resourceAssignment.name] = resourceAssignment
164     }
165
166     fun resourceAssignment(resourceAssignment: ResourceAssignment) {
167         resourceAssignments[resourceAssignment.name] = resourceAssignment
168     }
169
170     fun build(): MutableMap<String, ResourceAssignment> {
171         return resourceAssignments
172     }
173 }
174
175 class ResourceAssignmentBuilder(
176     private val name: String,
177     private val dictionaryName: String,
178     private val dictionarySource: String
179 ) {
180
181     private val resourceAssignment = ResourceAssignment()
182
183     fun inputParameter(inputParameter: Boolean) {
184         resourceAssignment.inputParameter = inputParameter
185     }
186
187     fun property(type: String, required: Boolean, description: String? = "") {
188         resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).build()
189     }
190
191     fun property(
192         type: String,
193         required: Boolean,
194         description: String? = "",
195         block: PropertyDefinitionBuilder.() -> Unit
196     ) {
197         resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
198     }
199
200     fun source(source: NodeTemplate) {
201         resourceAssignment.dictionarySourceDefinition = source
202     }
203
204     fun sourceInput(block: SourceInputNodeTemplateBuilder.() -> Unit) {
205         resourceAssignment.dictionarySourceDefinition = SourceInputNodeTemplateBuilder(dictionarySource, "")
206             .apply(block).build()
207     }
208
209     fun sourceDefault(block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
210         resourceAssignment.dictionarySourceDefinition = SourceDefaultNodeTemplateBuilder(dictionarySource, "")
211             .apply(block).build()
212     }
213
214     fun sourceDb(block: SourceDbNodeTemplateBuilder.() -> Unit) {
215         resourceAssignment.dictionarySourceDefinition = SourceDbNodeTemplateBuilder(dictionarySource, "")
216             .apply(block).build()
217     }
218
219     fun sourceRest(block: SourceRestNodeTemplateBuilder.() -> Unit) {
220         resourceAssignment.dictionarySourceDefinition = SourceRestNodeTemplateBuilder(dictionarySource, "")
221             .apply(block).build()
222     }
223
224     fun sourceCapability(block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
225         resourceAssignment.dictionarySourceDefinition = SourceCapabilityNodeTemplateBuilder(dictionarySource, "")
226             .apply(block).build()
227     }
228
229     fun dependencies(dependencies: MutableList<String>) {
230         resourceAssignment.dependencies = dependencies
231     }
232
233     fun build(): ResourceAssignment {
234         resourceAssignment.name = name
235         resourceAssignment.dictionaryName = dictionaryName
236         resourceAssignment.dictionarySource = dictionarySource
237         return resourceAssignment
238     }
239 }