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 com.fasterxml.jackson.databind.JsonNode
20 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants
21 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes
22 import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive
23 import org.onap.ccsdk.cds.controllerblueprints.core.asJsonString
24 import org.onap.ccsdk.cds.controllerblueprints.core.asJsonType
25 import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeTemplate
26 import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeType
27 import org.onap.ccsdk.cds.controllerblueprints.core.dsl.AbstractNodeTemplateOperationImplBuilder
28 import org.onap.ccsdk.cds.controllerblueprints.core.dsl.PropertiesAssignmentBuilder
29 import org.onap.ccsdk.cds.controllerblueprints.core.dsl.ServiceTemplateBuilder
30 import org.onap.ccsdk.cds.controllerblueprints.core.dsl.TopologyTemplateBuilder
31 import org.onap.ccsdk.cds.controllerblueprints.core.dsl.nodeType
32 import org.onap.ccsdk.cds.controllerblueprints.core.jsonAsJsonType
34 /** Component Extensions **/
35 fun ServiceTemplateBuilder.nodeTypeComponentResourceResolution() {
36 val nodeType = BluePrintTypes.nodeTypeComponentResourceResolution()
37 if (this.nodeTypes == null) this.nodeTypes = hashMapOf()
38 this.nodeTypes!![nodeType.id!!] = nodeType
41 fun BluePrintTypes.nodeTypeComponentResourceResolution(): NodeType {
43 id = "component-resource-resolution", version = BluePrintConstants.DEFAULT_VERSION_NUMBER,
44 derivedFrom = BluePrintConstants.MODEL_TYPE_NODE_COMPONENT,
45 description = "Resource Assignment Component"
49 ResourceResolutionComponent.ATTRIBUTE_ASSIGNMENT_PARAM, BluePrintConstants.DATA_TYPE_STRING,
53 ResourceResolutionComponent.ATTRIBUTE_ASSIGNMENT_MAP, BluePrintConstants.DATA_TYPE_MAP,
57 ResourceResolutionComponent.ATTRIBUTE_STATUS, BluePrintConstants.DATA_TYPE_STRING,
61 operation("ResourceResolutionComponent", "ResourceResolutionComponent Operation") {
64 ResourceResolutionComponent.INPUT_REQUEST_ID, BluePrintConstants.DATA_TYPE_STRING,
65 true, "Request Id, Unique Id for the request."
69 ResourceResolutionComponent.INPUT_RESOURCE_ID, BluePrintConstants.DATA_TYPE_STRING,
74 ResourceResolutionComponent.INPUT_ACTION_NAME, BluePrintConstants.DATA_TYPE_STRING,
75 false, "Action Name of the process"
79 ResourceResolutionComponent.INPUT_DYNAMIC_PROPERTIES, BluePrintConstants.DATA_TYPE_JSON,
80 false, "Dynamic Json Content or DSL Json reference."
84 ResourceResolutionComponent.INPUT_RESOLUTION_KEY, BluePrintConstants.DATA_TYPE_STRING,
85 false, "Key for service instance related correlation."
89 ResourceResolutionComponent.INPUT_RESOLUTION_SUMMARY, BluePrintConstants.DATA_TYPE_BOOLEAN,
90 false, "Enables ResolutionSummary output"
94 ResourceResolutionComponent.INPUT_OCCURRENCE, BluePrintConstants.DATA_TYPE_INTEGER,
95 false, "Number of time to perform the resolution."
101 ResourceResolutionComponent.INPUT_STORE_RESULT, BluePrintConstants.DATA_TYPE_BOOLEAN,
102 false, "Whether or not to store the output."
106 ResourceResolutionComponent.INPUT_RESOURCE_TYPE, BluePrintConstants.DATA_TYPE_STRING,
107 false, "Request type."
111 ResourceResolutionComponent.INPUT_ARTIFACT_PREFIX_NAMES, BluePrintConstants.DATA_TYPE_LIST,
112 true, "Template , Resource Assignment Artifact Prefix names"
114 entrySchema(BluePrintConstants.DATA_TYPE_STRING)
119 ResourceResolutionComponent.OUTPUT_RESOURCE_ASSIGNMENT_PARAMS, BluePrintConstants.DATA_TYPE_STRING,
120 true, "Output Response"
123 ResourceResolutionComponent.OUTPUT_RESOURCE_ASSIGNMENT_MAP, BluePrintConstants.DATA_TYPE_MAP,
124 true, "Output Resolved Values"
127 ResourceResolutionComponent.OUTPUT_STATUS, BluePrintConstants.DATA_TYPE_STRING,
128 true, "Status of the Component Execution ( success or failure )"
135 /** Component Builder */
136 fun TopologyTemplateBuilder.nodeTemplateComponentResourceResolution(
139 block: ComponentResourceResolutionNodeTemplateBuilder.() -> Unit
141 val nodeTemplate = BluePrintTypes.nodeTemplateComponentResourceResolution(
145 if (nodeTemplates == null) nodeTemplates = hashMapOf()
146 nodeTemplates!![nodeTemplate.id!!] = nodeTemplate
149 fun BluePrintTypes.nodeTemplateComponentResourceResolution(
152 block: ComponentResourceResolutionNodeTemplateBuilder.() -> Unit
154 return ComponentResourceResolutionNodeTemplateBuilder(id, description).apply(block).build()
157 class ComponentResourceResolutionNodeTemplateBuilder(id: String, description: String) :
158 AbstractNodeTemplateOperationImplBuilder<PropertiesAssignmentBuilder,
159 ComponentResourceResolutionNodeTemplateBuilder.InputsBuilder,
160 ComponentResourceResolutionNodeTemplateBuilder.OutputsBuilder>(
161 id, "component-script-executor",
162 "ComponentResourceResolution",
166 class InputsBuilder : PropertiesAssignmentBuilder() {
168 fun requestId(requestId: String) = requestId(requestId.asJsonPrimitive())
170 fun requestId(requestId: JsonNode) {
171 property(ResourceResolutionComponent.INPUT_REQUEST_ID, requestId)
174 fun resourceId(resourceId: String) = resourceId(resourceId.asJsonPrimitive())
176 fun resourceId(resourceId: JsonNode) {
177 property(ResourceResolutionComponent.INPUT_RESOURCE_ID, resourceId)
180 fun actionName(actionName: String) = actionName(actionName.asJsonPrimitive())
182 fun actionName(actionName: JsonNode) {
183 property(ResourceResolutionComponent.INPUT_ACTION_NAME, actionName)
186 fun resolutionKey(resolutionKey: String) = resolutionKey(resolutionKey.asJsonPrimitive())
188 fun resolutionKey(resolutionKey: JsonNode) {
189 property(ResourceResolutionComponent.INPUT_RESOLUTION_KEY, resolutionKey)
192 fun resolutionSummary(resolutionSummary: Boolean) = resolutionSummary(resolutionSummary.asJsonPrimitive())
194 fun resolutionSummary(resolutionSummary: JsonNode) {
195 property(ResourceResolutionComponent.INPUT_RESOLUTION_SUMMARY, resolutionSummary)
198 fun dynamicProperties(dynamicProperties: String) = dynamicProperties(dynamicProperties.asJsonType())
200 fun dynamicProperties(dynamicProperties: JsonNode) {
201 property(ResourceResolutionComponent.INPUT_DYNAMIC_PROPERTIES, dynamicProperties)
204 fun occurrence(occurrence: Int) = occurrence(occurrence.asJsonPrimitive())
206 fun occurrence(resolutionKey: JsonNode) {
207 property(ResourceResolutionComponent.INPUT_OCCURRENCE, resolutionKey)
210 fun storeResult(storeResult: Boolean) = storeResult(storeResult.asJsonPrimitive())
212 fun storeResult(storeResult: JsonNode) {
213 property(ResourceResolutionComponent.INPUT_STORE_RESULT, storeResult)
216 fun resourceType(resourceType: String) = resourceType(resourceType.asJsonPrimitive())
218 fun resourceType(resourceType: JsonNode) {
219 property(ResourceResolutionComponent.INPUT_RESOURCE_TYPE, resourceType)
222 fun artifactPrefixNames(artifactPrefixNames: String) = artifactPrefixNames(artifactPrefixNames.jsonAsJsonType())
224 fun artifactPrefixNames(artifactPrefixNameList: List<String>) =
225 artifactPrefixNames(artifactPrefixNameList.asJsonString())
227 fun artifactPrefixNames(artifactPrefixNames: JsonNode) {
228 property(ResourceResolutionComponent.INPUT_ARTIFACT_PREFIX_NAMES, artifactPrefixNames)
232 class OutputsBuilder : PropertiesAssignmentBuilder() {
234 fun status(status: String) = status(status.asJsonPrimitive())
236 fun status(status: JsonNode) {
237 property(ResourceResolutionComponent.OUTPUT_STATUS, status)
240 fun resourceAssignmentMap(resourceAssignmentMap: String) =
241 resourceAssignmentMap(resourceAssignmentMap.asJsonType())
243 fun resourceAssignmentMap(resourceAssignmentMap: JsonNode) {
244 property(ResourceResolutionComponent.OUTPUT_RESOURCE_ASSIGNMENT_MAP, resourceAssignmentMap)
247 fun resourceAssignmentParams(resourceAssignmentParams: String) =
248 resourceAssignmentParams(resourceAssignmentParams.asJsonType())
250 fun resourceAssignmentParams(resourceAssignmentParams: JsonNode) {
251 property(ResourceResolutionComponent.OUTPUT_RESOURCE_ASSIGNMENT_PARAMS, resourceAssignmentParams)