diff options
author | Dan Timoney <dtimoney@att.com> | 2019-08-09 21:47:42 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2019-08-09 21:47:42 +0000 |
commit | b80a4b9a4b33dbf560a980425cfa4cd36b41a76e (patch) | |
tree | 0504daa52a5243296532367f4ef43b09221b0b76 | |
parent | 9b1a8f7a95a6e80df01d77b7b094e624fbb9147f (diff) | |
parent | 6972452ec5f9cab7a8031d670843dd54c0c0a708 (diff) |
Merge "Add resource definition DSL."
2 files changed, 172 insertions, 0 deletions
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceDefinitionDSL.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceDefinitionDSL.kt new file mode 100644 index 000000000..340894f1b --- /dev/null +++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceDefinitionDSL.kt @@ -0,0 +1,94 @@ +/* + * Copyright © 2019 IBM. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution + +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeTemplate +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.PropertyDefinitionBuilder +import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceDefinition + +/** Resource Definition DSL **/ +fun BluePrintTypes.resourceDefinition(name: String, + block: ResourceDefinitionBuilder.() -> Unit): ResourceDefinition { + return ResourceDefinitionBuilder(name).apply(block).build() +} + +class ResourceDefinitionBuilder(private val name: String) { + private val resourceDefinition = ResourceDefinition() + + fun updatedBy(updatedBy: String) { + resourceDefinition.updatedBy = updatedBy + } + + fun tags(tags: String) { + resourceDefinition.tags = tags + } + + fun property(id: String, type: String, required: Boolean, description: String? = "") { + resourceDefinition.property = PropertyDefinitionBuilder(id, type, required, description).build() + } + + fun property(id: String, type: String, required: Boolean, description: String? = "", + block: PropertyDefinitionBuilder.() -> Unit) { + resourceDefinition.property = PropertyDefinitionBuilder(id, type, required, description).apply(block).build() + } + + fun sources(block: ResourceDefinitionSourcesBuilder.() -> Unit) { + resourceDefinition.sources = ResourceDefinitionSourcesBuilder().apply(block).build() + } + + fun sources(sources: MutableMap<String, NodeTemplate>) { + resourceDefinition.sources = sources + } + + fun build(): ResourceDefinition { + resourceDefinition.name = name + return resourceDefinition + } +} + +class ResourceDefinitionSourcesBuilder { + var sources: MutableMap<String, NodeTemplate> = hashMapOf() + + fun source(source: NodeTemplate) { + sources[source.id!!] = source + } + + fun sourceInput(id: String, description: String, block: SourceInputNodeTemplateBuilder.() -> Unit) { + sources[id] = SourceInputNodeTemplateBuilder(id, description).apply(block).build() + } + + fun sourceDefault(id: String, description: String, block: SourceDefaultNodeTemplateBuilder.() -> Unit) { + sources[id] = SourceDefaultNodeTemplateBuilder(id, description).apply(block).build() + } + + fun sourceDb(id: String, description: String, block: SourceDbNodeTemplateBuilder.() -> Unit) { + sources[id] = SourceDbNodeTemplateBuilder(id, description).apply(block).build() + } + + fun sourceRest(id: String, description: String, block: SourceRestNodeTemplateBuilder.() -> Unit) { + sources[id] = SourceRestNodeTemplateBuilder(id, description).apply(block).build() + } + + fun sourceCapability(id: String, description: String, block: SourceCapabilityNodeTemplateBuilder.() -> Unit) { + sources[id] = SourceCapabilityNodeTemplateBuilder(id, description).apply(block).build() + } + + fun build(): MutableMap<String, NodeTemplate> { + return sources + } +}
\ No newline at end of file diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceDefinitionSDLTest.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceDefinitionSDLTest.kt new file mode 100644 index 000000000..340b2b324 --- /dev/null +++ b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceDefinitionSDLTest.kt @@ -0,0 +1,78 @@ +/* + * Copyright © 2019 IBM. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution + +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import kotlin.test.Test +import kotlin.test.assertNotNull + +class ResourceDefinitionSDLTest { + + @Test + fun testResourceDefinitionDSL() { + val resourceDefinition = BluePrintTypes.resourceDefinition("service-instance-id") { + tags("service-instance-name, vfw, resources") + updatedBy("brindasanth@onap.com") + property("service-instance-name", "string", true, "VFW Service Instance Name") + sources { + sourceInput("input", "") {} + sourceDefault("default", "") {} + sourceDb("sdnctl", "") { + definedProperties { + type("SQL") + query("SELECT name FROM SERVICE_INSTANCE WHERE id = \$id") + endpointSelector("db-source-endpoint") + inputKeyMapping { + map("id", "\$service-instance-id") + } + outputKeyMapping { + map("service-instance-name", "\$name") + } + keyDependencies(arrayListOf("service-instance-id")) + } + } + sourceRest("odl-mdsal", "") { + definedProperties { + type("JSON") + endpointSelector("rest-source-endpoint") + expressionType("JSON_PATH") + urlPath("/service-instance/\$id") + path(".\$name") + verb("GET") + payload("sample payload") + inputKeyMapping { + map("id", "\$service-instance-id") + } + outputKeyMapping { + map("service-instance-name", "\$name") + } + keyDependencies(arrayListOf("service-instance-id")) + } + } + sourceCapability("custom-component", "") { + definedProperties { + type("kotlin") + scriptClassReference("Scripts/ServiceInstance.kt") + keyDependencies(arrayListOf("service-instance-id")) + } + } + } + } + //println(resourceDefinition.asJsonString(true)) + assertNotNull(resourceDefinition, "failed to generate resourceDefinition") + } +}
\ No newline at end of file |