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() {
57 private val resourceDefinitions: MutableMap<String, ResourceDefinition> = hashMapOf()
59 fun resourceDefinition(
62 block: ResourceDefinitionBuilder.() -> Unit
64 val resourceDefinition = ResourceDefinitionBuilder(name, description).apply(block).build()
65 resourceDefinitions[resourceDefinition.name] = resourceDefinition
68 fun resourceDefinition(resourceDefinition: ResourceDefinition) {
69 resourceDefinitions[resourceDefinition.name] = resourceDefinition
72 fun build(): MutableMap<String, ResourceDefinition> {
73 return resourceDefinitions
77 class ResourceDefinitionBuilder(private val name: String, private val description: String) {
79 private val resourceDefinition = ResourceDefinition()
81 fun updatedBy(updatedBy: String) {
82 resourceDefinition.updatedBy = updatedBy
85 fun tags(tags: String) {
86 resourceDefinition.tags = tags
89 fun property(property: PropertyDefinition) {
90 resourceDefinition.property = property
93 fun property(type: String, required: Boolean) {
94 resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).build()
100 block: PropertyDefinitionBuilder.() -> Unit
102 resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
105 fun sources(block: ResourceDefinitionSourcesBuilder.() -> Unit) {
106 resourceDefinition.sources = ResourceDefinitionSourcesBuilder().apply(block).build()
109 fun sources(sources: MutableMap<String, NodeTemplate>) {
110 resourceDefinition.sources = sources
113 fun build(): ResourceDefinition {
114 resourceDefinition.name = name
115 return resourceDefinition
119 class ResourceDefinitionSourcesBuilder {
121 var sources: MutableMap<String, NodeTemplate> = hashMapOf()
123 fun source(source: NodeTemplate) {
124 sources[source.id!!] = source
127 fun sourceInput(id: String, description: String, block: SourceInputNodeTemplateBuilder.() -> Unit) {
128 sources[id] = SourceInputNodeTemplateBuilder(id, description).apply(block).build()
131 fun sourceDefault(id: String, description: String, block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
132 sources[id] = SourceDefaultNodeTemplateBuilder(id, description).apply(block).build()
135 fun sourceDb(id: String, description: String, block: SourceDbNodeTemplateBuilder.() -> Unit) {
136 sources[id] = SourceDbNodeTemplateBuilder(id, description).apply(block).build()
139 fun sourceRest(id: String, description: String, block: SourceRestNodeTemplateBuilder.() -> Unit) {
140 sources[id] = SourceRestNodeTemplateBuilder(id, description).apply(block).build()
143 fun sourceCapability(id: String, description: String, block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
144 sources[id] = SourceCapabilityNodeTemplateBuilder(id, description).apply(block).build()
147 fun build(): MutableMap<String, NodeTemplate> {
152 class ResourceAssignmentsBuilder() {
154 private val resourceAssignments: MutableMap<String, ResourceAssignment> = hashMapOf()
156 fun resourceAssignment(
158 dictionaryName: String,
159 dictionarySource: String,
160 block: ResourceAssignmentBuilder.() -> Unit
162 val resourceAssignment = ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
163 resourceAssignments[resourceAssignment.name] = resourceAssignment
166 fun resourceAssignment(resourceAssignment: ResourceAssignment) {
167 resourceAssignments[resourceAssignment.name] = resourceAssignment
170 fun build(): MutableMap<String, ResourceAssignment> {
171 return resourceAssignments
175 class ResourceAssignmentBuilder(
176 private val name: String,
177 private val dictionaryName: String,
178 private val dictionarySource: String
181 private val resourceAssignment = ResourceAssignment()
183 fun inputParameter(inputParameter: Boolean) {
184 resourceAssignment.inputParameter = inputParameter
187 fun property(type: String, required: Boolean, description: String? = "") {
188 resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).build()
194 description: String? = "",
195 block: PropertyDefinitionBuilder.() -> Unit
197 resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
200 fun source(source: NodeTemplate) {
201 resourceAssignment.dictionarySourceDefinition = source
204 fun sourceInput(block: SourceInputNodeTemplateBuilder.() -> Unit) {
205 resourceAssignment.dictionarySourceDefinition = SourceInputNodeTemplateBuilder(dictionarySource, "")
206 .apply(block).build()
209 fun sourceDefault(block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
210 resourceAssignment.dictionarySourceDefinition = SourceDefaultNodeTemplateBuilder(dictionarySource, "")
211 .apply(block).build()
214 fun sourceDb(block: SourceDbNodeTemplateBuilder.() -> Unit) {
215 resourceAssignment.dictionarySourceDefinition = SourceDbNodeTemplateBuilder(dictionarySource, "")
216 .apply(block).build()
219 fun sourceRest(block: SourceRestNodeTemplateBuilder.() -> Unit) {
220 resourceAssignment.dictionarySourceDefinition = SourceRestNodeTemplateBuilder(dictionarySource, "")
221 .apply(block).build()
224 fun sourceCapability(block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
225 resourceAssignment.dictionarySourceDefinition = SourceCapabilityNodeTemplateBuilder(dictionarySource, "")
226 .apply(block).build()
229 fun dependencies(dependencies: MutableList<String>) {
230 resourceAssignment.dependencies = dependencies
233 fun build(): ResourceAssignment {
234 resourceAssignment.name = name
235 resourceAssignment.dictionaryName = dictionaryName
236 resourceAssignment.dictionarySource = dictionarySource
237 return resourceAssignment