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