Aligned attributes of CDS components
[ccsdk/cds.git] / ms / blueprintsprocessor / functions / resource-resolution / src / main / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / functions / resource / resolution / ResourceResolutionComponentDSL.kt
1 /*
2  *  Copyright © 2019 IBM.
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution
18
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
33
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
39 }
40
41 fun BluePrintTypes.nodeTypeComponentResourceResolution(): NodeType {
42     return nodeType(
43         id = "component-resource-resolution", version = BluePrintConstants.DEFAULT_VERSION_NUMBER,
44         derivedFrom = BluePrintConstants.MODEL_TYPE_NODE_COMPONENT,
45         description = "Resource Assignment Component"
46     ) {
47
48         attribute(
49             ResourceResolutionComponent.ATTRIBUTE_ASSIGNMENT_PARAM, BluePrintConstants.DATA_TYPE_STRING,
50             true
51         )
52         attribute(
53             ResourceResolutionComponent.ATTRIBUTE_ASSIGNMENT_MAP, BluePrintConstants.DATA_TYPE_MAP,
54             true
55         )
56         attribute(
57             ResourceResolutionComponent.ATTRIBUTE_STATUS, BluePrintConstants.DATA_TYPE_STRING,
58             true
59         )
60
61         operation("ResourceResolutionComponent", "ResourceResolutionComponent Operation") {
62             inputs {
63                 property(
64                     ResourceResolutionComponent.INPUT_REQUEST_ID, BluePrintConstants.DATA_TYPE_STRING,
65                     true, "Request Id, Unique Id for the request."
66                 )
67
68                 property(
69                     ResourceResolutionComponent.INPUT_RESOURCE_ID, BluePrintConstants.DATA_TYPE_STRING,
70                     false, "Resource Id."
71                 )
72
73                 property(
74                     ResourceResolutionComponent.INPUT_ACTION_NAME, BluePrintConstants.DATA_TYPE_STRING,
75                     false, "Action Name of the process"
76                 )
77
78                 property(
79                     ResourceResolutionComponent.INPUT_DYNAMIC_PROPERTIES, BluePrintConstants.DATA_TYPE_JSON,
80                     false, "Dynamic Json Content or DSL Json reference."
81                 )
82
83                 property(
84                     ResourceResolutionComponent.INPUT_RESOLUTION_KEY, BluePrintConstants.DATA_TYPE_STRING,
85                     false, "Key for service instance related correlation."
86                 )
87
88                 property(
89                     ResourceResolutionComponent.INPUT_RESOLUTION_SUMMARY, BluePrintConstants.DATA_TYPE_BOOLEAN,
90                     false, "Enables ResolutionSummary output"
91                 )
92
93                 property(
94                     ResourceResolutionComponent.INPUT_OCCURRENCE, BluePrintConstants.DATA_TYPE_INTEGER,
95                     false, "Number of time to perform the resolution."
96                 ) {
97                     defaultValue(1)
98                 }
99
100                 property(
101                     ResourceResolutionComponent.INPUT_STORE_RESULT, BluePrintConstants.DATA_TYPE_BOOLEAN,
102                     false, "Whether or not to store the output."
103                 )
104
105                 property(
106                     ResourceResolutionComponent.INPUT_RESOURCE_TYPE, BluePrintConstants.DATA_TYPE_STRING,
107                     false, "Request type."
108                 )
109
110                 property(
111                     ResourceResolutionComponent.INPUT_ARTIFACT_PREFIX_NAMES, BluePrintConstants.DATA_TYPE_LIST,
112                     true, "Template , Resource Assignment Artifact Prefix names"
113                 ) {
114                     entrySchema(BluePrintConstants.DATA_TYPE_STRING)
115                 }
116             }
117             outputs {
118                 property(
119                     ResourceResolutionComponent.OUTPUT_RESOURCE_ASSIGNMENT_PARAMS, BluePrintConstants.DATA_TYPE_STRING,
120                     true, "Output Response"
121                 )
122                 property(
123                     ResourceResolutionComponent.OUTPUT_RESOURCE_ASSIGNMENT_MAP, BluePrintConstants.DATA_TYPE_MAP,
124                     true, "Output Resolved Values"
125                 )
126                 property(
127                     ResourceResolutionComponent.OUTPUT_STATUS, BluePrintConstants.DATA_TYPE_STRING,
128                     true, "Status of the Component Execution ( success or failure )"
129                 )
130             }
131         }
132     }
133 }
134
135 /** Component Builder */
136 fun TopologyTemplateBuilder.nodeTemplateComponentResourceResolution(
137     id: String,
138     description: String,
139     block: ComponentResourceResolutionNodeTemplateBuilder.() -> Unit
140 ) {
141     val nodeTemplate = BluePrintTypes.nodeTemplateComponentResourceResolution(
142         id, description,
143         block
144     )
145     if (nodeTemplates == null) nodeTemplates = hashMapOf()
146     nodeTemplates!![nodeTemplate.id!!] = nodeTemplate
147 }
148
149 fun BluePrintTypes.nodeTemplateComponentResourceResolution(
150     id: String,
151     description: String,
152     block: ComponentResourceResolutionNodeTemplateBuilder.() -> Unit
153 ): NodeTemplate {
154     return ComponentResourceResolutionNodeTemplateBuilder(id, description).apply(block).build()
155 }
156
157 class ComponentResourceResolutionNodeTemplateBuilder(id: String, description: String) :
158     AbstractNodeTemplateOperationImplBuilder<PropertiesAssignmentBuilder,
159         ComponentResourceResolutionNodeTemplateBuilder.InputsBuilder,
160         ComponentResourceResolutionNodeTemplateBuilder.OutputsBuilder>(
161         id, "component-script-executor",
162         "ComponentResourceResolution",
163         description
164     ) {
165
166     class InputsBuilder : PropertiesAssignmentBuilder() {
167
168         fun requestId(requestId: String) = requestId(requestId.asJsonPrimitive())
169
170         fun requestId(requestId: JsonNode) {
171             property(ResourceResolutionComponent.INPUT_REQUEST_ID, requestId)
172         }
173
174         fun resourceId(resourceId: String) = resourceId(resourceId.asJsonPrimitive())
175
176         fun resourceId(resourceId: JsonNode) {
177             property(ResourceResolutionComponent.INPUT_RESOURCE_ID, resourceId)
178         }
179
180         fun actionName(actionName: String) = actionName(actionName.asJsonPrimitive())
181
182         fun actionName(actionName: JsonNode) {
183             property(ResourceResolutionComponent.INPUT_ACTION_NAME, actionName)
184         }
185
186         fun resolutionKey(resolutionKey: String) = resolutionKey(resolutionKey.asJsonPrimitive())
187
188         fun resolutionKey(resolutionKey: JsonNode) {
189             property(ResourceResolutionComponent.INPUT_RESOLUTION_KEY, resolutionKey)
190         }
191
192         fun resolutionSummary(resolutionSummary: Boolean) = resolutionSummary(resolutionSummary.asJsonPrimitive())
193
194         fun resolutionSummary(resolutionSummary: JsonNode) {
195             property(ResourceResolutionComponent.INPUT_RESOLUTION_SUMMARY, resolutionSummary)
196         }
197
198         fun dynamicProperties(dynamicProperties: String) = dynamicProperties(dynamicProperties.asJsonType())
199
200         fun dynamicProperties(dynamicProperties: JsonNode) {
201             property(ResourceResolutionComponent.INPUT_DYNAMIC_PROPERTIES, dynamicProperties)
202         }
203
204         fun occurrence(occurrence: Int) = occurrence(occurrence.asJsonPrimitive())
205
206         fun occurrence(resolutionKey: JsonNode) {
207             property(ResourceResolutionComponent.INPUT_OCCURRENCE, resolutionKey)
208         }
209
210         fun storeResult(storeResult: Boolean) = storeResult(storeResult.asJsonPrimitive())
211
212         fun storeResult(storeResult: JsonNode) {
213             property(ResourceResolutionComponent.INPUT_STORE_RESULT, storeResult)
214         }
215
216         fun resourceType(resourceType: String) = resourceType(resourceType.asJsonPrimitive())
217
218         fun resourceType(resourceType: JsonNode) {
219             property(ResourceResolutionComponent.INPUT_RESOURCE_TYPE, resourceType)
220         }
221
222         fun artifactPrefixNames(artifactPrefixNames: String) = artifactPrefixNames(artifactPrefixNames.jsonAsJsonType())
223
224         fun artifactPrefixNames(artifactPrefixNameList: List<String>) =
225             artifactPrefixNames(artifactPrefixNameList.asJsonString())
226
227         fun artifactPrefixNames(artifactPrefixNames: JsonNode) {
228             property(ResourceResolutionComponent.INPUT_ARTIFACT_PREFIX_NAMES, artifactPrefixNames)
229         }
230     }
231
232     class OutputsBuilder : PropertiesAssignmentBuilder() {
233
234         fun status(status: String) = status(status.asJsonPrimitive())
235
236         fun status(status: JsonNode) {
237             property(ResourceResolutionComponent.OUTPUT_STATUS, status)
238         }
239
240         fun resourceAssignmentMap(resourceAssignmentMap: String) =
241             resourceAssignmentMap(resourceAssignmentMap.asJsonType())
242
243         fun resourceAssignmentMap(resourceAssignmentMap: JsonNode) {
244             property(ResourceResolutionComponent.OUTPUT_RESOURCE_ASSIGNMENT_MAP, resourceAssignmentMap)
245         }
246
247         fun resourceAssignmentParams(resourceAssignmentParams: String) =
248             resourceAssignmentParams(resourceAssignmentParams.asJsonType())
249
250         fun resourceAssignmentParams(resourceAssignmentParams: JsonNode) {
251             property(ResourceResolutionComponent.OUTPUT_RESOURCE_ASSIGNMENT_PARAMS, resourceAssignmentParams)
252         }
253     }
254 }