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 val imports: List<ImportDefinition>? = serviceTemplate.imports
\r
42 val metadata: MutableMap<String, String>? = serviceTemplate.metadata
\r
44 val dataTypes: MutableMap<String, DataType>? = serviceTemplate.dataTypes
\r
46 val inputs: MutableMap<String, PropertyDefinition>? = serviceTemplate.topologyTemplate?.inputs
\r
48 fun blueprintJson(pretty: Boolean = false): String = print("json", pretty)
\r
50 private fun print(type: String? = "json", pretty: Boolean = false): String {
\r
51 return JacksonUtils.getJson(serviceTemplate, pretty)
\r
55 val workflows: MutableMap<String, Workflow>? = serviceTemplate.topologyTemplate?.workflows
\r
57 fun workflowByName(workFlowName: String): Workflow = workflows?.get(workFlowName)
\r
58 ?: throw BluePrintException("could't get workflow($workFlowName)")
\r
60 fun workflowInputs(workFlowName: String) = workflowByName(workFlowName).inputs
\r
62 fun workflowStepByName(workFlowName: String, stepName: String): Step {
\r
63 return workflowByName(workFlowName).steps?.get(stepName)
\r
64 ?: throw BluePrintException("could't get step($stepName) for workflow($workFlowName)")
\r
67 fun workflowStepNodeTemplate(workFlowName: String, stepName: String): String {
\r
68 return workflowStepByName(workFlowName, stepName).target
\r
69 ?: throw BluePrintException("could't get node template name for workflow($workFlowName)'s step($stepName)")
\r
72 fun workflowFirstStepNodeTemplate(workFlowName: String): String {
\r
73 val firstStepName = workflowByName(workFlowName).steps?.keys?.first()
\r
74 ?: throw BluePrintException("could't get first step for workflow($workFlowName)")
\r
75 return workflowStepNodeTemplate(workFlowName, firstStepName)
\r
78 fun workflowStepFirstCallOperation(workFlowName: String, stepName: String): String {
\r
79 return workflowStepByName(workFlowName, stepName).activities?.filter { it.callOperation != null }?.single()?.callOperation
\r
80 ?: throw BluePrintException("could't get first callOperation for WorkFlow($workFlowName) ")
\r
84 fun dataTypeByName(name: String): DataType? = dataTypes?.get(name)
\r
87 val artifactTypes: MutableMap<String, ArtifactType>? = serviceTemplate.artifactTypes
\r
90 val policyTypes: MutableMap<String, PolicyType>? = serviceTemplate.policyTypes
\r
92 fun policyTypeByName(policyName: String) = policyTypes?.get(policyName)
\r
93 ?: throw BluePrintException("could't get policy type for the name($policyName)")
\r
95 fun policyTypesDerivedFrom(name: String): MutableMap<String, PolicyType>? {
\r
96 return policyTypes?.filterValues { policyType -> policyType.derivedFrom == name }?.toMutableMap()
\r
99 fun policyTypesTarget(target: String): MutableMap<String, PolicyType>? {
\r
100 return policyTypes?.filterValues { it.targets.contains(target) }?.toMutableMap()
\r
103 fun policyTypesTargetNDerivedFrom(target: String, derivedFrom: String): MutableMap<String, PolicyType>? {
\r
104 return policyTypesDerivedFrom(derivedFrom)?.filterValues {
\r
105 it.targets.contains(target)
\r
109 // Node Type Methods
\r
110 val nodeTypes: MutableMap<String, NodeType>? = serviceTemplate.nodeTypes
\r
112 fun nodeTypeByName(name: String): NodeType =
\r
113 nodeTypes?.get(name)
\r
114 ?: throw BluePrintException("could't get node type for the name($name)")
\r
116 fun nodeTypeDerivedFrom(name: String): MutableMap<String, NodeType>? {
\r
117 return nodeTypes?.filterValues { nodeType -> nodeType.derivedFrom == name }?.toMutableMap()
\r
120 fun nodeTypeInterface(nodeTypeName: String, interfaceName: String): InterfaceDefinition {
\r
121 return nodeTypeByName(nodeTypeName).interfaces?.get(interfaceName)
\r
122 ?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName)")
\r
125 fun nodeTypeInterfaceOperation(nodeTypeName: String, interfaceName: String, operationName: String): OperationDefinition {
\r
126 return nodeTypeInterface(nodeTypeName, interfaceName).operations?.get(operationName)
\r
127 ?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName) operation definition($operationName)")
\r
130 fun interfaceNameForNodeType(nodeTypeName: String): String {
\r
131 return nodeTypeByName(nodeTypeName).interfaces?.keys?.first()
\r
132 ?: throw BluePrintException("could't get NodeType($nodeTypeName)'s first InterfaceDefinition name")
\r
135 fun nodeTypeInterfaceOperationInputs(nodeTypeName: String, interfaceName: String, operationName: String): MutableMap<String, PropertyDefinition>? {
\r
136 return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).inputs
\r
139 fun nodeTypeInterfaceOperationOutputs(nodeTypeName: String, interfaceName: String, operationName: String): MutableMap<String, PropertyDefinition>? {
\r
140 return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).outputs
\r
143 // Node Template Methods
\r
144 val nodeTemplates: MutableMap<String, NodeTemplate>? = serviceTemplate.topologyTemplate?.nodeTemplates
\r
146 fun nodeTemplateByName(name: String): NodeTemplate =
\r
147 nodeTemplates?.get(name) ?: throw BluePrintException("could't get node template for the name($name) ")
\r
149 fun nodeTemplateForNodeType(name: String): MutableMap<String, NodeTemplate>? {
\r
150 return nodeTemplates?.filterValues { nodeTemplate -> nodeTemplate.type == name }?.toMutableMap()
\r
153 fun nodeTemplateNodeType(nodeTemplateName: String): NodeType {
\r
154 val nodeTemplateType: String = nodeTemplateByName(nodeTemplateName).type
\r
155 return nodeTypeByName(nodeTemplateType)
\r
158 fun nodeTemplateProperty(nodeTemplateName: String, propertyName: String): Any? {
\r
159 return nodeTemplateByName(nodeTemplateName).properties?.get(propertyName)
\r
162 fun nodeTemplateArtifacts(nodeTemplateName: String): MutableMap<String, ArtifactDefinition>? {
\r
163 return nodeTemplateByName(nodeTemplateName).artifacts
\r
166 fun nodeTemplateArtifact(nodeTemplateName: String, artifactName: String): ArtifactDefinition {
\r
167 return nodeTemplateArtifacts(nodeTemplateName)?.get(artifactName)
\r
168 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s ArtifactDefinition($artifactName)")
\r
171 fun nodeTemplateArtifactForArtifactType(nodeTemplateName: String, artifactType: String): ArtifactDefinition {
\r
172 return nodeTemplateArtifacts(nodeTemplateName)?.filter { it.value.type == artifactType }?.map { it.value }?.get(0)
\r
173 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s Artifact Type($artifactType)")
\r
176 fun nodeTemplateFirstInterface(nodeTemplateName: String): InterfaceAssignment {
\r
177 return nodeTemplateByName(nodeTemplateName).interfaces?.values?.first()
\r
178 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment")
\r
181 fun nodeTemplateFirstInterfaceName(nodeTemplateName: String): String {
\r
182 return nodeTemplateByName(nodeTemplateName).interfaces?.keys?.first()
\r
183 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment name")
\r
186 fun nodeTemplateFirstInterfaceFirstOperationName(nodeTemplateName: String): String {
\r
187 return nodeTemplateFirstInterface(nodeTemplateName).operations?.keys?.first()
\r
188 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment's first OperationAssignment name")
\r
191 fun nodeTemplateInterfaceOperationInputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
\r
192 return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).inputs
\r
195 fun nodeTemplateInterfaceOperationOutputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
\r
196 return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).outputs
\r
199 fun nodeTemplateInterface(nodeTemplateName: String, interfaceName: String): InterfaceAssignment {
\r
200 return nodeTemplateByName(nodeTemplateName).interfaces?.get(interfaceName)
\r
201 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName)")
\r
204 fun nodeTemplateInterfaceOperation(nodeTemplateName: String, interfaceName: String, operationName: String): OperationAssignment {
\r
205 return nodeTemplateInterface(nodeTemplateName, interfaceName).operations?.get(operationName)
\r
206 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName) OperationAssignment($operationName)")
\r
209 fun nodeTemplateCapability(nodeTemplateName: String, capabilityName: String): CapabilityAssignment {
\r
210 return nodeTemplateByName(nodeTemplateName).capabilities?.get(capabilityName)
\r
211 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s CapabilityAssignment($capabilityName)")
\r
214 fun nodeTemplateRequirement(nodeTemplateName: String, requirementName: String): RequirementAssignment {
\r
215 return nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)
\r
216 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first RequirementAssignment($requirementName)")
\r
219 fun nodeTemplateRequirementNode(nodeTemplateName: String, requirementName: String): NodeTemplate {
\r
220 val filteredNodeTemplateName: String = nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)?.node
\r
221 ?: throw BluePrintException("could't NodeTemplate for NodeTemplate's($nodeTemplateName) requirement's ($requirementName) ")
\r
222 return nodeTemplateByName(filteredNodeTemplateName)
\r
225 fun nodeTemplateCapabilityProperty(nodeTemplateName: String, capabilityName: String, propertyName: String): Any? {
\r
226 return nodeTemplateCapability(nodeTemplateName, capabilityName).properties?.get(propertyName)
\r
229 // Chained Functions
\r
231 fun nodeTypeChained(nodeTypeName: String): NodeType {
\r
232 return BluePrintChainedService(this).nodeTypeChained(nodeTypeName)
\r
235 fun nodeTypeChainedProperties(nodeTypeName: String): MutableMap<String, PropertyDefinition>? {
\r
236 return BluePrintChainedService(this).nodeTypeChainedProperties(nodeTypeName)
\r