2 * Copyright © 2017-2018 AT&T Intellectual Property.
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.
16 @file:Suppress("unused")
18 package org.onap.ccsdk.apps.controllerblueprints.core.service
20 import com.att.eelf.configuration.EELFLogger
21 import com.att.eelf.configuration.EELFManager
22 import com.fasterxml.jackson.databind.JsonNode
23 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
24 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
25 import org.onap.ccsdk.apps.controllerblueprints.core.data.*
26 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
31 * @author Brinda Santh
33 class BluePrintContext(val serviceTemplate: ServiceTemplate) {
35 private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
38 * Blueprint CBA extracted file location
42 * Root Definition file path
44 var entryDefinition = ""
46 val imports: List<ImportDefinition>? = serviceTemplate.imports
48 val metadata: MutableMap<String, String>? = serviceTemplate.metadata
50 val dataTypes: MutableMap<String, DataType>? = serviceTemplate.dataTypes
52 val inputs: MutableMap<String, PropertyDefinition>? = serviceTemplate.topologyTemplate?.inputs
54 fun blueprintJson(pretty: Boolean = false): String = print("json", pretty)
56 private fun print(type: String? = "json", pretty: Boolean = false): String {
57 return JacksonUtils.getJson(serviceTemplate, pretty)
60 fun name(): String = metadata?.get(BluePrintConstants.METADATA_TEMPLATE_NAME)
61 ?: throw BluePrintException("could't get template name from meta data")
63 fun version(): String = metadata?.get(BluePrintConstants.METADATA_TEMPLATE_VERSION)
64 ?: throw BluePrintException("could't get template version from meta data")
66 fun author(): String = metadata?.get(BluePrintConstants.METADATA_TEMPLATE_AUTHOR)
67 ?: throw BluePrintException("could't get template author from meta data")
70 val workflows: MutableMap<String, Workflow>? = serviceTemplate.topologyTemplate?.workflows
72 fun workflowByName(workFlowName: String): Workflow = workflows?.get(workFlowName)
73 ?: throw BluePrintException("could't get workflow($workFlowName)")
75 fun workflowInputs(workFlowName: String) = workflowByName(workFlowName).inputs
77 fun workflowStepByName(workFlowName: String, stepName: String): Step {
78 return workflowByName(workFlowName).steps?.get(stepName)
79 ?: throw BluePrintException("could't get step($stepName) for workflow($workFlowName)")
82 fun workflowStepNodeTemplate(workFlowName: String, stepName: String): String {
83 return workflowStepByName(workFlowName, stepName).target
84 ?: throw BluePrintException("could't get node template name for workflow($workFlowName)'s step($stepName)")
87 fun workflowFirstStepNodeTemplate(workFlowName: String): String {
88 val firstStepName = workflowByName(workFlowName).steps?.keys?.first()
89 ?: throw BluePrintException("could't get first step for workflow($workFlowName)")
90 return workflowStepNodeTemplate(workFlowName, firstStepName)
93 fun workflowStepFirstCallOperation(workFlowName: String, stepName: String): String {
94 return workflowStepByName(workFlowName, stepName).activities?.filter { it.callOperation != null }?.single()?.callOperation
95 ?: throw BluePrintException("could't get first callOperation for WorkFlow($workFlowName) ")
99 fun dataTypeByName(name: String): DataType? = dataTypes?.get(name)
102 val artifactTypes: MutableMap<String, ArtifactType>? = serviceTemplate.artifactTypes
105 val policyTypes: MutableMap<String, PolicyType>? = serviceTemplate.policyTypes
107 fun policyTypeByName(policyName: String) = policyTypes?.get(policyName)
108 ?: throw BluePrintException("could't get policy type for the name($policyName)")
110 fun policyTypesDerivedFrom(name: String): MutableMap<String, PolicyType>? {
111 return policyTypes?.filterValues { policyType -> policyType.derivedFrom == name }?.toMutableMap()
114 fun policyTypesTarget(target: String): MutableMap<String, PolicyType>? {
115 return policyTypes?.filterValues { it.targets.contains(target) }?.toMutableMap()
118 fun policyTypesTargetNDerivedFrom(target: String, derivedFrom: String): MutableMap<String, PolicyType>? {
119 return policyTypesDerivedFrom(derivedFrom)?.filterValues {
120 it.targets.contains(target)
125 val nodeTypes: MutableMap<String, NodeType>? = serviceTemplate.nodeTypes
127 fun nodeTypeByName(name: String): NodeType =
129 ?: throw BluePrintException("could't get node type for the name($name)")
131 fun nodeTypeDerivedFrom(name: String): MutableMap<String, NodeType>? {
132 return nodeTypes?.filterValues { nodeType -> nodeType.derivedFrom == name }?.toMutableMap()
135 fun nodeTypeInterface(nodeTypeName: String, interfaceName: String): InterfaceDefinition {
136 return nodeTypeByName(nodeTypeName).interfaces?.get(interfaceName)
137 ?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName)")
140 fun nodeTypeInterfaceOperation(nodeTypeName: String, interfaceName: String, operationName: String): OperationDefinition {
141 return nodeTypeInterface(nodeTypeName, interfaceName).operations?.get(operationName)
142 ?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName) operation definition($operationName)")
145 fun interfaceNameForNodeType(nodeTypeName: String): String {
146 return nodeTypeByName(nodeTypeName).interfaces?.keys?.first()
147 ?: throw BluePrintException("could't get NodeType($nodeTypeName)'s first InterfaceDefinition name")
150 fun nodeTypeInterfaceOperationInputs(nodeTypeName: String, interfaceName: String, operationName: String): MutableMap<String, PropertyDefinition>? {
151 return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).inputs
154 fun nodeTypeInterfaceOperationOutputs(nodeTypeName: String, interfaceName: String, operationName: String): MutableMap<String, PropertyDefinition>? {
155 return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).outputs
158 // Node Template Methods
159 val nodeTemplates: MutableMap<String, NodeTemplate>? = serviceTemplate.topologyTemplate?.nodeTemplates
161 fun nodeTemplateByName(name: String): NodeTemplate =
162 nodeTemplates?.get(name) ?: throw BluePrintException("could't get node template for the name($name)")
164 fun nodeTemplateForNodeType(name: String): MutableMap<String, NodeTemplate>? {
165 return nodeTemplates?.filterValues { nodeTemplate -> nodeTemplate.type == name }?.toMutableMap()
168 fun nodeTemplateNodeType(nodeTemplateName: String): NodeType {
169 val nodeTemplateType: String = nodeTemplateByName(nodeTemplateName).type
170 return nodeTypeByName(nodeTemplateType)
173 fun nodeTemplateProperty(nodeTemplateName: String, propertyName: String): Any? {
174 return nodeTemplateByName(nodeTemplateName).properties?.get(propertyName)
177 fun nodeTemplateArtifacts(nodeTemplateName: String): MutableMap<String, ArtifactDefinition>? {
178 return nodeTemplateByName(nodeTemplateName).artifacts
181 fun nodeTemplateArtifact(nodeTemplateName: String, artifactName: String): ArtifactDefinition {
182 return nodeTemplateArtifacts(nodeTemplateName)?.get(artifactName)
183 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s ArtifactDefinition($artifactName)")
186 fun nodeTemplateArtifactForArtifactType(nodeTemplateName: String, artifactType: String): ArtifactDefinition {
187 return nodeTemplateArtifacts(nodeTemplateName)?.filter { it.value.type == artifactType }?.map { it.value }?.get(0)
188 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s Artifact Type($artifactType)")
191 fun nodeTemplateFirstInterface(nodeTemplateName: String): InterfaceAssignment {
192 return nodeTemplateByName(nodeTemplateName).interfaces?.values?.first()
193 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment")
196 fun nodeTemplateFirstInterfaceName(nodeTemplateName: String): String {
197 return nodeTemplateByName(nodeTemplateName).interfaces?.keys?.first()
198 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment name")
201 fun nodeTemplateFirstInterfaceFirstOperationName(nodeTemplateName: String): String {
202 return nodeTemplateFirstInterface(nodeTemplateName).operations?.keys?.first()
203 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment's first OperationAssignment name")
206 fun nodeTemplateInterfaceOperationInputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
207 return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).inputs
210 fun nodeTemplateInterfaceOperationOutputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
211 return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).outputs
214 fun nodeTemplateInterface(nodeTemplateName: String, interfaceName: String): InterfaceAssignment {
215 return nodeTemplateByName(nodeTemplateName).interfaces?.get(interfaceName)
216 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName)")
219 fun nodeTemplateInterfaceOperation(nodeTemplateName: String, interfaceName: String, operationName: String): OperationAssignment {
220 return nodeTemplateInterface(nodeTemplateName, interfaceName).operations?.get(operationName)
221 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName) OperationAssignment($operationName)")
224 fun nodeTemplateCapability(nodeTemplateName: String, capabilityName: String): CapabilityAssignment {
225 return nodeTemplateByName(nodeTemplateName).capabilities?.get(capabilityName)
226 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s CapabilityAssignment($capabilityName)")
229 fun nodeTemplateRequirement(nodeTemplateName: String, requirementName: String): RequirementAssignment {
230 return nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)
231 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first RequirementAssignment($requirementName)")
234 fun nodeTemplateRequirementNode(nodeTemplateName: String, requirementName: String): NodeTemplate {
235 val filteredNodeTemplateName: String = nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)?.node
236 ?: throw BluePrintException("could't NodeTemplate for NodeTemplate's($nodeTemplateName) requirement's ($requirementName) ")
237 return nodeTemplateByName(filteredNodeTemplateName)
240 fun nodeTemplateCapabilityProperty(nodeTemplateName: String, capabilityName: String, propertyName: String): Any? {
241 return nodeTemplateCapability(nodeTemplateName, capabilityName).properties?.get(propertyName)
246 fun nodeTypeChained(nodeTypeName: String): NodeType {
247 return BluePrintChainedService(this).nodeTypeChained(nodeTypeName)
250 fun nodeTypeChainedProperties(nodeTypeName: String): MutableMap<String, PropertyDefinition>? {
251 return BluePrintChainedService(this).nodeTypeChainedProperties(nodeTypeName)