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.dsl.PropertyDefinitionBuilder
22 import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceAssignment
23 import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceDefinition
25 /** Resource Definition DSL **/
26 fun BluePrintTypes.resourceDefinitions(block: ResourceDefinitionsBuilder.() -> Unit)
27 : MutableMap<String, ResourceDefinition> {
28 return ResourceDefinitionsBuilder().apply(block).build()
31 fun BluePrintTypes.resourceDefinition(name: String, description: String,
32 block: ResourceDefinitionBuilder.() -> Unit): ResourceDefinition {
33 return ResourceDefinitionBuilder(name, description).apply(block).build()
36 /** Resource Mapping DSL **/
37 fun BluePrintTypes.resourceAssignments(block: ResourceAssignmentsBuilder.() -> Unit)
38 : MutableMap<String, ResourceAssignment> {
39 return ResourceAssignmentsBuilder().apply(block).build()
42 fun BluePrintTypes.resourceAssignment(name: String, dictionaryName: String, dictionarySource: String,
43 block: ResourceAssignmentBuilder.() -> Unit): ResourceAssignment {
44 return ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
47 class ResourceDefinitionsBuilder() {
48 private val resourceDefinitions: MutableMap<String, ResourceDefinition> = hashMapOf()
50 fun resourceDefinition(name: String, description: String,
51 block: ResourceDefinitionBuilder.() -> Unit) {
52 val resourceDefinition = ResourceDefinitionBuilder(name, description).apply(block).build()
53 resourceDefinitions[resourceDefinition.name] = resourceDefinition
56 fun resourceDefinition(resourceDefinition: ResourceDefinition) {
57 resourceDefinitions[resourceDefinition.name] = resourceDefinition
60 fun build(): MutableMap<String, ResourceDefinition> {
61 return resourceDefinitions
65 class ResourceDefinitionBuilder(private val name: String, private val description: String) {
66 private val resourceDefinition = ResourceDefinition()
68 fun updatedBy(updatedBy: String) {
69 resourceDefinition.updatedBy = updatedBy
72 fun tags(tags: String) {
73 resourceDefinition.tags = tags
76 fun property(type: String, required: Boolean) {
77 resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).build()
80 fun property(type: String, required: Boolean,
81 block: PropertyDefinitionBuilder.() -> Unit) {
82 resourceDefinition.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
85 fun sources(block: ResourceDefinitionSourcesBuilder.() -> Unit) {
86 resourceDefinition.sources = ResourceDefinitionSourcesBuilder().apply(block).build()
89 fun sources(sources: MutableMap<String, NodeTemplate>) {
90 resourceDefinition.sources = sources
93 fun build(): ResourceDefinition {
94 resourceDefinition.name = name
95 return resourceDefinition
99 class ResourceDefinitionSourcesBuilder {
100 var sources: MutableMap<String, NodeTemplate> = hashMapOf()
102 fun source(source: NodeTemplate) {
103 sources[source.id!!] = source
106 fun sourceInput(id: String, description: String, block: SourceInputNodeTemplateBuilder.() -> Unit) {
107 sources[id] = SourceInputNodeTemplateBuilder(id, description).apply(block).build()
110 fun sourceDefault(id: String, description: String, block: SourceDefaultNodeTemplateBuilder.() -> Unit) {
111 sources[id] = SourceDefaultNodeTemplateBuilder(id, description).apply(block).build()
114 fun sourceDb(id: String, description: String, block: SourceDbNodeTemplateBuilder.() -> Unit) {
115 sources[id] = SourceDbNodeTemplateBuilder(id, description).apply(block).build()
118 fun sourceRest(id: String, description: String, block: SourceRestNodeTemplateBuilder.() -> Unit) {
119 sources[id] = SourceRestNodeTemplateBuilder(id, description).apply(block).build()
122 fun sourceCapability(id: String, description: String, block: SourceCapabilityNodeTemplateBuilder.() -> Unit) {
123 sources[id] = SourceCapabilityNodeTemplateBuilder(id, description).apply(block).build()
126 fun build(): MutableMap<String, NodeTemplate> {
131 class ResourceAssignmentsBuilder() {
132 private val resourceAssignments: MutableMap<String, ResourceAssignment> = hashMapOf()
134 fun resourceAssignment(name: String, dictionaryName: String, dictionarySource: String,
135 block: ResourceAssignmentBuilder.() -> Unit) {
136 val resourceAssignment = ResourceAssignmentBuilder(name, dictionaryName, dictionarySource).apply(block).build()
137 resourceAssignments[resourceAssignment.name] = resourceAssignment
140 fun resourceAssignment(resourceAssignment: ResourceAssignment) {
141 resourceAssignments[resourceAssignment.name] = resourceAssignment
144 fun build(): MutableMap<String, ResourceAssignment> {
145 return resourceAssignments
149 class ResourceAssignmentBuilder(private val name: String, private val dictionaryName: String,
150 private val dictionarySource: String) {
151 private val resourceAssignment = ResourceAssignment()
153 fun inputParameter(inputParameter: Boolean) {
154 resourceAssignment.inputParameter = inputParameter
157 fun property(type: String, required: Boolean, description: String? = "") {
158 resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).build()
161 fun property(type: String, required: Boolean, description: String? = "",
162 block: PropertyDefinitionBuilder.() -> Unit) {
163 resourceAssignment.property = PropertyDefinitionBuilder(name, type, required, description).apply(block).build()
166 fun dependencies(dependencies: MutableList<String>) {
167 resourceAssignment.dependencies = dependencies
170 fun build(): ResourceAssignment {
171 resourceAssignment.name = name
172 resourceAssignment.dictionaryName = dictionaryName
173 resourceAssignment.dictionarySource = dictionarySource
174 return resourceAssignment