2 * Copyright © 2019 IBM.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution
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
26 /** Resource Definition DSL **/
27 fun BluePrintTypes.resourceDefinitions(block: ResourceDefinitionsBuilder.() -> Unit):
28 MutableMap<String, ResourceDefinition> {
29 return ResourceDefinitionsBuilder().apply(block).build()
32 fun BluePrintTypes.resourceDefinition(
35 block: ResourceDefinitionBuilder.() -> Unit
36 ): ResourceDefinition {
37 return ResourceDefinitionBuilder(name, description).apply(block).build()
40 /** Resource Mapping DSL **/
41 fun BluePrintTypes.resourceAssignments(block: ResourceAssignmentsBuilder.() -> Unit):
42 MutableMap<String, ResourceAssignment> {
43 return ResourceAssignmentsBuilder().apply(block).build()
46 fun BluePrintTypes.resourceAssignment(
48 dictionaryName: String,
49 dictionarySource: String,
50 block: ResourceAssignmentBuilder.() -> Unit
51 ): ResourceAssignment {
52 return ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
55 class ResourceDefinitionsBuilder() {
56 private val resourceDefinitions: MutableMap<String, ResourceDefinition> = hashMapOf()
58 fun resourceDefinition(
61 block: ResourceDefinitionBuilder.() -> Unit
63 val resourceDefinition = ResourceDefinitionBuilder(name, description).apply(block).build()
64 resourceDefinitions[resourceDefinition.name] = resourceDefinition
67 fun resourceDefinition(resourceDefinition: ResourceDefinition) {
68 resourceDefinitions[resourceDefinition.name] = resourceDefinition
71 fun build(): MutableMap<String, ResourceDefinition> {
72 return resourceDefinitions
76 class ResourceDefinitionBuilder(private val name: String, private val description: String) {
77 private val resourceDefinition = ResourceDefinition()
79 fun updatedBy(updatedBy: String) {
80 resourceDefinition.updatedBy = updatedBy
83 fun tags(tags: String) {
84 resourceDefinition.tags = tags
87 fun property(property: PropertyDefinition) {
88 resourceDefinition.property = property
91 fun property(type: String, required: Boolean) {
92 resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).build()
98 block: PropertyDefinitionBuilder.() -> Unit
100 resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
103 fun sources(block: ResourceDefinitionSourcesBuilder.() -> Unit) {
104 resourceDefinition.sources = ResourceDefinitionSourcesBuilder().apply(block).build()
107 fun sources(sources: MutableMap<String, NodeTemplate>) {
108 resourceDefinition.sources = sources
111 fun build(): ResourceDefinition {
112 resourceDefinition.name = name
113 return resourceDefinition
117 class ResourceDefinitionSourcesBuilder {
118 var sources: MutableMap<String, NodeTemplate> = hashMapOf()
120 fun source(source: NodeTemplate) {
121 sources[source.id!!] = source
124 fun sourceInput(id: String, description: String, block: SourceInputNodeTemplateBuilder.() -> Unit) {
125 sources[id] = SourceInputNodeTemplateBuilder(id, description).apply(block).build()
128 fun sourceDefault(id: String, description: String, block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
129 sources[id] = SourceDefaultNodeTemplateBuilder(id, description).apply(block).build()
132 fun sourceDb(id: String, description: String, block: SourceDbNodeTemplateBuilder.() -> Unit) {
133 sources[id] = SourceDbNodeTemplateBuilder(id, description).apply(block).build()
136 fun sourceRest(id: String, description: String, block: SourceRestNodeTemplateBuilder.() -> Unit) {
137 sources[id] = SourceRestNodeTemplateBuilder(id, description).apply(block).build()
140 fun sourceCapability(id: String, description: String, block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
141 sources[id] = SourceCapabilityNodeTemplateBuilder(id, description).apply(block).build()
144 fun build(): MutableMap<String, NodeTemplate> {
149 class ResourceAssignmentsBuilder() {
150 private val resourceAssignments: MutableMap<String, ResourceAssignment> = hashMapOf()
152 fun resourceAssignment(
154 dictionaryName: String,
155 dictionarySource: String,
156 block: ResourceAssignmentBuilder.() -> Unit
158 val resourceAssignment = ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
159 resourceAssignments[resourceAssignment.name] = resourceAssignment
162 fun resourceAssignment(resourceAssignment: ResourceAssignment) {
163 resourceAssignments[resourceAssignment.name] = resourceAssignment
166 fun build(): MutableMap<String, ResourceAssignment> {
167 return resourceAssignments
171 class ResourceAssignmentBuilder(
172 private val name: String,
173 private val dictionaryName: String,
174 private val dictionarySource: String
177 private val resourceAssignment = ResourceAssignment()
179 fun inputParameter(inputParameter: Boolean) {
180 resourceAssignment.inputParameter = inputParameter
183 fun property(type: String, required: Boolean, description: String? = "") {
184 resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).build()
190 description: String? = "",
191 block: PropertyDefinitionBuilder.() -> Unit
193 resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
196 fun source(source: NodeTemplate) {
197 resourceAssignment.dictionarySourceDefinition = source
200 fun sourceInput(block: SourceInputNodeTemplateBuilder.() -> Unit) {
201 resourceAssignment.dictionarySourceDefinition = SourceInputNodeTemplateBuilder(dictionarySource, "")
202 .apply(block).build()
205 fun sourceDefault(block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
206 resourceAssignment.dictionarySourceDefinition = SourceDefaultNodeTemplateBuilder(dictionarySource, "")
207 .apply(block).build()
210 fun sourceDb(block: SourceDbNodeTemplateBuilder.() -> Unit) {
211 resourceAssignment.dictionarySourceDefinition = SourceDbNodeTemplateBuilder(dictionarySource, "")
212 .apply(block).build()
215 fun sourceRest(block: SourceRestNodeTemplateBuilder.() -> Unit) {
216 resourceAssignment.dictionarySourceDefinition = SourceRestNodeTemplateBuilder(dictionarySource, "")
217 .apply(block).build()
220 fun sourceCapability(block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
221 resourceAssignment.dictionarySourceDefinition = SourceCapabilityNodeTemplateBuilder(dictionarySource, "")
222 .apply(block).build()
225 fun dependencies(dependencies: MutableList<String>) {
226 resourceAssignment.dependencies = dependencies
229 fun build(): ResourceAssignment {
230 resourceAssignment.name = name
231 resourceAssignment.dictionaryName = dictionaryName
232 resourceAssignment.dictionarySource = dictionarySource
233 return resourceAssignment