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(name: String, description: String,
33 block: ResourceDefinitionBuilder.() -> Unit): ResourceDefinition {
34 return ResourceDefinitionBuilder(name, description).apply(block).build()
37 /** Resource Mapping DSL **/
38 fun BluePrintTypes.resourceAssignments(block: ResourceAssignmentsBuilder.() -> Unit)
39 : MutableMap<String, ResourceAssignment> {
40 return ResourceAssignmentsBuilder().apply(block).build()
43 fun BluePrintTypes.resourceAssignment(name: String, dictionaryName: String, dictionarySource: String,
44 block: ResourceAssignmentBuilder.() -> Unit): ResourceAssignment {
45 return ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
48 class ResourceDefinitionsBuilder() {
49 private val resourceDefinitions: MutableMap<String, ResourceDefinition> = hashMapOf()
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
57 fun resourceDefinition(resourceDefinition: ResourceDefinition) {
58 resourceDefinitions[resourceDefinition.name] = resourceDefinition
61 fun build(): MutableMap<String, ResourceDefinition> {
62 return resourceDefinitions
66 class ResourceDefinitionBuilder(private val name: String, private val description: String) {
67 private val resourceDefinition = ResourceDefinition()
69 fun updatedBy(updatedBy: String) {
70 resourceDefinition.updatedBy = updatedBy
73 fun tags(tags: String) {
74 resourceDefinition.tags = tags
77 fun property(property: PropertyDefinition) {
78 resourceDefinition.property = property
81 fun property(type: String, required: Boolean) {
82 resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).build()
85 fun property(type: String, required: Boolean,
86 block: PropertyDefinitionBuilder.() -> Unit) {
87 resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
90 fun sources(block: ResourceDefinitionSourcesBuilder.() -> Unit) {
91 resourceDefinition.sources = ResourceDefinitionSourcesBuilder().apply(block).build()
94 fun sources(sources: MutableMap<String, NodeTemplate>) {
95 resourceDefinition.sources = sources
98 fun build(): ResourceDefinition {
99 resourceDefinition.name = name
100 return resourceDefinition
104 class ResourceDefinitionSourcesBuilder {
105 var sources: MutableMap<String, NodeTemplate> = hashMapOf()
107 fun source(source: NodeTemplate) {
108 sources[source.id!!] = source
111 fun sourceInput(id: String, description: String, block: SourceInputNodeTemplateBuilder.() -> Unit) {
112 sources[id] = SourceInputNodeTemplateBuilder(id, description).apply(block).build()
115 fun sourceDefault(id: String, description: String, block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
116 sources[id] = SourceDefaultNodeTemplateBuilder(id, description).apply(block).build()
119 fun sourceDb(id: String, description: String, block: SourceDbNodeTemplateBuilder.() -> Unit) {
120 sources[id] = SourceDbNodeTemplateBuilder(id, description).apply(block).build()
123 fun sourceRest(id: String, description: String, block: SourceRestNodeTemplateBuilder.() -> Unit) {
124 sources[id] = SourceRestNodeTemplateBuilder(id, description).apply(block).build()
127 fun sourceCapability(id: String, description: String, block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
128 sources[id] = SourceCapabilityNodeTemplateBuilder(id, description).apply(block).build()
131 fun build(): MutableMap<String, NodeTemplate> {
136 class ResourceAssignmentsBuilder() {
137 private val resourceAssignments: MutableMap<String, ResourceAssignment> = hashMapOf()
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
145 fun resourceAssignment(resourceAssignment: ResourceAssignment) {
146 resourceAssignments[resourceAssignment.name] = resourceAssignment
149 fun build(): MutableMap<String, ResourceAssignment> {
150 return resourceAssignments
154 class ResourceAssignmentBuilder(private val name: String, private val dictionaryName: String,
155 private val dictionarySource: String) {
156 private val resourceAssignment = ResourceAssignment()
158 fun inputParameter(inputParameter: Boolean) {
159 resourceAssignment.inputParameter = inputParameter
162 fun property(type: String, required: Boolean, description: String? = "") {
163 resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).build()
166 fun property(type: String, required: Boolean, description: String? = "",
167 block: PropertyDefinitionBuilder.() -> Unit) {
168 resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
171 fun source(source: NodeTemplate) {
172 resourceAssignment.dictionarySourceDefinition = source
175 fun sourceInput(block: SourceInputNodeTemplateBuilder.() -> Unit) {
176 resourceAssignment.dictionarySourceDefinition = SourceInputNodeTemplateBuilder(dictionarySource, "")
177 .apply(block).build()
180 fun sourceDefault(block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
181 resourceAssignment.dictionarySourceDefinition = SourceDefaultNodeTemplateBuilder(dictionarySource, "")
182 .apply(block).build()
185 fun sourceDb(block: SourceDbNodeTemplateBuilder.() -> Unit) {
186 resourceAssignment.dictionarySourceDefinition = SourceDbNodeTemplateBuilder(dictionarySource, "")
187 .apply(block).build()
190 fun sourceRest(block: SourceRestNodeTemplateBuilder.() -> Unit) {
191 resourceAssignment.dictionarySourceDefinition = SourceRestNodeTemplateBuilder(dictionarySource, "")
192 .apply(block).build()
195 fun sourceCapability(block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
196 resourceAssignment.dictionarySourceDefinition = SourceCapabilityNodeTemplateBuilder(dictionarySource, "")
197 .apply(block).build()
200 fun dependencies(dependencies: MutableList<String>) {
201 resourceAssignment.dependencies = dependencies
204 fun build(): ResourceAssignment {
205 resourceAssignment.name = name
206 resourceAssignment.dictionaryName = dictionaryName
207 resourceAssignment.dictionarySource = dictionarySource
208 return resourceAssignment