2 * Copyright © 2017-2018 AT&T Intellectual Property.
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
17 package org.onap.ccsdk.apps.controllerblueprints.core.service
\r
19 import com.att.eelf.configuration.EELFLogger
\r
20 import com.att.eelf.configuration.EELFManager
\r
21 import com.fasterxml.jackson.databind.JsonNode
\r
22 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
\r
23 import org.onap.ccsdk.apps.controllerblueprints.core.data.*
\r
24 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
\r
29 * @author Brinda Santh
\r
31 class BluePrintContext(val serviceTemplate: ServiceTemplate) {
\r
33 private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
\r
36 * Blueprint CBA extracted file location
\r
40 * Root Definition file path
\r
42 var entryDefinition = ""
\r
44 val imports: List<ImportDefinition>? = serviceTemplate.imports
\r
46 val metadata: MutableMap<String, String>? = serviceTemplate.metadata
\r
48 val dataTypes: MutableMap<String, DataType>? = serviceTemplate.dataTypes
\r
50 val inputs: MutableMap<String, PropertyDefinition>? = serviceTemplate.topologyTemplate?.inputs
\r
52 fun blueprintJson(pretty: Boolean = false): String = print("json", pretty)
\r
54 private fun print(type: String? = "json", pretty: Boolean = false): String {
\r
55 return JacksonUtils.getJson(serviceTemplate, pretty)
\r
59 val workflows: MutableMap<String, Workflow>? = serviceTemplate.topologyTemplate?.workflows
\r
61 fun workflowByName(workFlowName: String): Workflow = workflows?.get(workFlowName)
\r
62 ?: throw BluePrintException("could't get workflow($workFlowName)")
\r
64 fun workflowInputs(workFlowName: String) = workflowByName(workFlowName).inputs
\r
66 fun workflowStepByName(workFlowName: String, stepName: String): Step {
\r
67 return workflowByName(workFlowName).steps?.get(stepName)
\r
68 ?: throw BluePrintException("could't get step($stepName) for workflow($workFlowName)")
\r
71 fun workflowStepNodeTemplate(workFlowName: String, stepName: String): String {
\r
72 return workflowStepByName(workFlowName, stepName).target
\r
73 ?: throw BluePrintException("could't get node template name for workflow($workFlowName)'s step($stepName)")
\r
76 fun workflowFirstStepNodeTemplate(workFlowName: String): String {
\r
77 val firstStepName = workflowByName(workFlowName).steps?.keys?.first()
\r
78 ?: throw BluePrintException("could't get first step for workflow($workFlowName)")
\r
79 return workflowStepNodeTemplate(workFlowName, firstStepName)
\r
82 fun workflowStepFirstCallOperation(workFlowName: String, stepName: String): String {
\r
83 return workflowStepByName(workFlowName, stepName).activities?.filter { it.callOperation != null }?.single()?.callOperation
\r
84 ?: throw BluePrintException("could't get first callOperation for WorkFlow($workFlowName) ")
\r
88 fun dataTypeByName(name: String): DataType? = dataTypes?.get(name)
\r
91 val artifactTypes: MutableMap<String, ArtifactType>? = serviceTemplate.artifactTypes
\r
94 val policyTypes: MutableMap<String, PolicyType>? = serviceTemplate.policyTypes
\r
96 fun policyTypeByName(policyName: String) = policyTypes?.get(policyName)
\r
97 ?: throw BluePrintException("could't get policy type for the name($policyName)")
\r
99 fun policyTypesDerivedFrom(name: String): MutableMap<String, PolicyType>? {
\r
100 return policyTypes?.filterValues { policyType -> policyType.derivedFrom == name }?.toMutableMap()
\r
103 fun policyTypesTarget(target: String): MutableMap<String, PolicyType>? {
\r
104 return policyTypes?.filterValues { it.targets.contains(target) }?.toMutableMap()
\r
107 fun policyTypesTargetNDerivedFrom(target: String, derivedFrom: String): MutableMap<String, PolicyType>? {
\r
108 return policyTypesDerivedFrom(derivedFrom)?.filterValues {
\r
109 it.targets.contains(target)
\r
113 // Node Type Methods
\r
114 val nodeTypes: MutableMap<String, NodeType>? = serviceTemplate.nodeTypes
\r
116 fun nodeTypeByName(name: String): NodeType =
\r
117 nodeTypes?.get(name)
\r
118 ?: throw BluePrintException("could't get node type for the name($name)")
\r
120 fun nodeTypeDerivedFrom(name: String): MutableMap<String, NodeType>? {
\r
121 return nodeTypes?.filterValues { nodeType -> nodeType.derivedFrom == name }?.toMutableMap()
\r
124 fun nodeTypeInterface(nodeTypeName: String, interfaceName: String): InterfaceDefinition {
\r
125 return nodeTypeByName(nodeTypeName).interfaces?.get(interfaceName)
\r
126 ?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName)")
\r
129 fun nodeTypeInterfaceOperation(nodeTypeName: String, interfaceName: String, operationName: String): OperationDefinition {
\r
130 return nodeTypeInterface(nodeTypeName, interfaceName).operations?.get(operationName)
\r
131 ?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName) operation definition($operationName)")
\r
134 fun interfaceNameForNodeType(nodeTypeName: String): String {
\r
135 return nodeTypeByName(nodeTypeName).interfaces?.keys?.first()
\r
136 ?: throw BluePrintException("could't get NodeType($nodeTypeName)'s first InterfaceDefinition name")
\r
139 fun nodeTypeInterfaceOperationInputs(nodeTypeName: String, interfaceName: String, operationName: String): MutableMap<String, PropertyDefinition>? {
\r
140 return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).inputs
\r
143 fun nodeTypeInterfaceOperationOutputs(nodeTypeName: String, interfaceName: String, operationName: String): MutableMap<String, PropertyDefinition>? {
\r
144 return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).outputs
\r
147 // Node Template Methods
\r
148 val nodeTemplates: MutableMap<String, NodeTemplate>? = serviceTemplate.topologyTemplate?.nodeTemplates
\r
150 fun nodeTemplateByName(name: String): NodeTemplate =
\r
151 nodeTemplates?.get(name) ?: throw BluePrintException("could't get node template for the name($name) ")
\r
153 fun nodeTemplateForNodeType(name: String): MutableMap<String, NodeTemplate>? {
\r
154 return nodeTemplates?.filterValues { nodeTemplate -> nodeTemplate.type == name }?.toMutableMap()
\r
157 fun nodeTemplateNodeType(nodeTemplateName: String): NodeType {
\r
158 val nodeTemplateType: String = nodeTemplateByName(nodeTemplateName).type
\r
159 return nodeTypeByName(nodeTemplateType)
\r
162 fun nodeTemplateProperty(nodeTemplateName: String, propertyName: String): Any? {
\r
163 return nodeTemplateByName(nodeTemplateName).properties?.get(propertyName)
\r
166 fun nodeTemplateArtifacts(nodeTemplateName: String): MutableMap<String, ArtifactDefinition>? {
\r
167 return nodeTemplateByName(nodeTemplateName).artifacts
\r
170 fun nodeTemplateArtifact(nodeTemplateName: String, artifactName: String): ArtifactDefinition {
\r
171 return nodeTemplateArtifacts(nodeTemplateName)?.get(artifactName)
\r
172 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s ArtifactDefinition($artifactName)")
\r
175 fun nodeTemplateArtifactForArtifactType(nodeTemplateName: String, artifactType: String): ArtifactDefinition {
\r
176 return nodeTemplateArtifacts(nodeTemplateName)?.filter { it.value.type == artifactType }?.map { it.value }?.get(0)
\r
177 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s Artifact Type($artifactType)")
\r
180 fun nodeTemplateFirstInterface(nodeTemplateName: String): InterfaceAssignment {
\r
181 return nodeTemplateByName(nodeTemplateName).interfaces?.values?.first()
\r
182 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment")
\r
185 fun nodeTemplateFirstInterfaceName(nodeTemplateName: String): String {
\r
186 return nodeTemplateByName(nodeTemplateName).interfaces?.keys?.first()
\r
187 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment name")
\r
190 fun nodeTemplateFirstInterfaceFirstOperationName(nodeTemplateName: String): String {
\r
191 return nodeTemplateFirstInterface(nodeTemplateName).operations?.keys?.first()
\r
192 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment's first OperationAssignment name")
\r
195 fun nodeTemplateInterfaceOperationInputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
\r
196 return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).inputs
\r
199 fun nodeTemplateInterfaceOperationOutputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
\r
200 return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).outputs
\r
203 fun nodeTemplateInterface(nodeTemplateName: String, interfaceName: String): InterfaceAssignment {
\r
204 return nodeTemplateByName(nodeTemplateName).interfaces?.get(interfaceName)
\r
205 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName)")
\r
208 fun nodeTemplateInterfaceOperation(nodeTemplateName: String, interfaceName: String, operationName: String): OperationAssignment {
\r
209 return nodeTemplateInterface(nodeTemplateName, interfaceName).operations?.get(operationName)
\r
210 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName) OperationAssignment($operationName)")
\r
213 fun nodeTemplateCapability(nodeTemplateName: String, capabilityName: String): CapabilityAssignment {
\r
214 return nodeTemplateByName(nodeTemplateName).capabilities?.get(capabilityName)
\r
215 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s CapabilityAssignment($capabilityName)")
\r
218 fun nodeTemplateRequirement(nodeTemplateName: String, requirementName: String): RequirementAssignment {
\r
219 return nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)
\r
220 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first RequirementAssignment($requirementName)")
\r
223 fun nodeTemplateRequirementNode(nodeTemplateName: String, requirementName: String): NodeTemplate {
\r
224 val filteredNodeTemplateName: String = nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)?.node
\r
225 ?: throw BluePrintException("could't NodeTemplate for NodeTemplate's($nodeTemplateName) requirement's ($requirementName) ")
\r
226 return nodeTemplateByName(filteredNodeTemplateName)
\r
229 fun nodeTemplateCapabilityProperty(nodeTemplateName: String, capabilityName: String, propertyName: String): Any? {
\r
230 return nodeTemplateCapability(nodeTemplateName, capabilityName).properties?.get(propertyName)
\r
233 // Chained Functions
\r
235 fun nodeTypeChained(nodeTypeName: String): NodeType {
\r
236 return BluePrintChainedService(this).nodeTypeChained(nodeTypeName)
\r
239 fun nodeTypeChainedProperties(nodeTypeName: String): MutableMap<String, PropertyDefinition>? {
\r
240 return BluePrintChainedService(this).nodeTypeChainedProperties(nodeTypeName)
\r