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
35 val imports: List<ImportDefinition>? = serviceTemplate.imports
\r
37 val metadata: MutableMap<String, String>? = serviceTemplate.metadata
\r
39 val dataTypes: MutableMap<String, DataType>? = serviceTemplate.dataTypes
\r
41 val inputs: MutableMap<String, PropertyDefinition>? = serviceTemplate.topologyTemplate?.inputs
\r
43 fun blueprintJson(pretty: Boolean = false): String = print("json", pretty)
\r
45 private fun print(type: String? = "json", pretty: Boolean = false): String {
\r
46 return JacksonUtils.getJson(serviceTemplate, pretty)
\r
50 val workflows: MutableMap<String, Workflow>? = serviceTemplate.topologyTemplate?.workflows
\r
52 fun workflowByName(workFlowName: String): Workflow = workflows?.get(workFlowName)
\r
53 ?: throw BluePrintException("could't get workflow($workFlowName)")
\r
55 fun workflowStepByName(workFlowName: String, stepName: String): Step {
\r
56 return workflowByName(workFlowName).steps?.get(stepName)
\r
57 ?: throw BluePrintException("could't get step($stepName) for workflow($workFlowName)")
\r
60 fun workflowStepNodeTemplate(workFlowName: String, stepName: String): NodeTemplate {
\r
61 val nodeTemplateName = workflowStepByName(workFlowName, stepName).target
\r
62 ?: throw BluePrintException("could't get node template name for workflow($workFlowName)'s step($stepName)")
\r
63 return nodeTemplateByName(nodeTemplateName)
\r
66 fun workflowStepFirstCallOperation(workFlowName: String, stepName: String): String {
\r
67 return workflowStepByName(workFlowName, stepName).activities?.filter { it.callOperation != null }?.single()?.callOperation
\r
68 ?: throw BluePrintException("could't get first callOperation for WorkFlow($workFlowName) ")
\r
72 fun dataTypeByName(name: String): DataType? = dataTypes?.get(name)
\r
75 val artifactTypes: MutableMap<String, ArtifactType>? = serviceTemplate.artifactTypes
\r
78 val policyTypes: MutableMap<String, PolicyType>? = serviceTemplate.policyTypes
\r
80 fun policyTypeByName(policyName: String) = policyTypes?.get(policyName)
\r
81 ?: throw BluePrintException("could't get policy type for the name($policyName)")
\r
83 fun policyTypesDerivedFrom(name: String): MutableMap<String, PolicyType>? {
\r
84 return policyTypes?.filterValues { policyType -> policyType.derivedFrom == name }?.toMutableMap()
\r
87 fun policyTypesTarget(target: String): MutableMap<String, PolicyType>? {
\r
88 return policyTypes?.filterValues { it.targets.contains(target) }?.toMutableMap()
\r
91 fun policyTypesTargetNDerivedFrom(target: String, derivedFrom: String): MutableMap<String, PolicyType>? {
\r
92 return policyTypesDerivedFrom(derivedFrom)?.filterValues {
\r
93 it.targets.contains(target)
\r
97 // Node Type Methods
\r
98 val nodeTypes: MutableMap<String, NodeType>? = serviceTemplate.nodeTypes
\r
100 fun nodeTypeByName(name: String): NodeType =
\r
101 nodeTypes?.get(name)
\r
102 ?: throw BluePrintException("could't get node type for the name($name)")
\r
104 fun nodeTypeDerivedFrom(name: String): MutableMap<String, NodeType>? {
\r
105 return nodeTypes?.filterValues { nodeType -> nodeType.derivedFrom == name }?.toMutableMap()
\r
108 fun nodeTypeInterface(nodeTypeName: String, interfaceName: String): InterfaceDefinition {
\r
109 return nodeTypeByName(nodeTypeName).interfaces?.get(interfaceName)
\r
110 ?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName)")
\r
113 fun nodeTypeInterfaceOperation(nodeTypeName: String, interfaceName: String, operationName: String): OperationDefinition {
\r
114 return nodeTypeInterface(nodeTypeName, interfaceName).operations?.get(operationName)
\r
115 ?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName) operation definition($operationName)")
\r
118 fun interfaceNameForNodeType(nodeTypeName: String): String {
\r
119 return nodeTypeByName(nodeTypeName).interfaces?.keys?.first()
\r
120 ?: throw BluePrintException("could't get NodeType($nodeTypeName)'s first InterfaceDefinition name")
\r
123 fun nodeTypeInterfaceOperationInputs(nodeTypeName: String, interfaceName: String, operationName: String): MutableMap<String, PropertyDefinition>? {
\r
124 return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).inputs
\r
127 fun nodeTypeInterfaceOperationOutputs(nodeTypeName: String, interfaceName: String, operationName: String): MutableMap<String, PropertyDefinition>? {
\r
128 return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).outputs
\r
131 // Node Template Methods
\r
132 val nodeTemplates: MutableMap<String, NodeTemplate>? = serviceTemplate.topologyTemplate?.nodeTemplates
\r
134 fun nodeTemplateByName(name: String): NodeTemplate =
\r
135 nodeTemplates?.get(name) ?: throw BluePrintException("could't get node template for the name($name) ")
\r
137 fun nodeTemplateForNodeType(name: String): MutableMap<String, NodeTemplate>? {
\r
138 return nodeTemplates?.filterValues { nodeTemplate -> nodeTemplate.type == name }?.toMutableMap()
\r
141 fun nodeTemplateNodeType(nodeTemplateName: String): NodeType {
\r
142 val nodeTemplateType: String = nodeTemplateByName(nodeTemplateName).type
\r
143 return nodeTypeByName(nodeTemplateType)
\r
146 fun nodeTemplateProperty(nodeTemplateName: String, propertyName: String): Any? {
\r
147 return nodeTemplateByName(nodeTemplateName).properties?.get(propertyName)
\r
150 fun nodeTemplateArtifacts(nodeTemplateName: String): MutableMap<String, ArtifactDefinition>? {
\r
151 return nodeTemplateByName(nodeTemplateName).artifacts
\r
154 fun nodeTemplateArtifact(nodeTemplateName: String, artifactName: String): ArtifactDefinition {
\r
155 return nodeTemplateArtifacts(nodeTemplateName)?.get(artifactName)
\r
156 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s ArtifactDefinition($artifactName)")
\r
159 fun nodeTemplateFirstInterface(nodeTemplateName: String): InterfaceAssignment {
\r
160 return nodeTemplateByName(nodeTemplateName).interfaces?.values?.first()
\r
161 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment")
\r
164 fun nodeTemplateFirstInterfaceName(nodeTemplateName: String): String {
\r
165 return nodeTemplateByName(nodeTemplateName).interfaces?.keys?.first()
\r
166 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment name")
\r
169 fun nodeTemplateFirstInterfaceFirstOperationName(nodeTemplateName: String): String {
\r
170 return nodeTemplateFirstInterface(nodeTemplateName).operations?.keys?.first()
\r
171 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment's first OperationAssignment name")
\r
174 fun nodeTemplateInterfaceOperationInputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
\r
175 return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).inputs
\r
178 fun nodeTemplateInterfaceOperationOutputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
\r
179 return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).outputs
\r
182 fun nodeTemplateInterface(nodeTemplateName: String, interfaceName: String): InterfaceAssignment {
\r
183 return nodeTemplateByName(nodeTemplateName).interfaces?.get(interfaceName)
\r
184 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName)")
\r
187 fun nodeTemplateInterfaceOperation(nodeTemplateName: String, interfaceName: String, operationName: String): OperationAssignment {
\r
188 return nodeTemplateInterface(nodeTemplateName, interfaceName).operations?.get(operationName)
\r
189 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName) OperationAssignment($operationName)")
\r
192 fun nodeTemplateCapability(nodeTemplateName: String, capabilityName: String): CapabilityAssignment {
\r
193 return nodeTemplateByName(nodeTemplateName).capabilities?.get(capabilityName)
\r
194 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s CapabilityAssignment($capabilityName)")
\r
197 fun nodeTemplateRequirement(nodeTemplateName: String, requirementName: String): RequirementAssignment {
\r
198 return nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)
\r
199 ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first RequirementAssignment($requirementName)")
\r
202 fun nodeTemplateRequirementNode(nodeTemplateName: String, requirementName: String): NodeTemplate {
\r
203 val filteredNodeTemplateName: String = nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)?.node
\r
204 ?: throw BluePrintException("could't NodeTemplate for NodeTemplate's($nodeTemplateName) requirement's ($requirementName) ")
\r
205 return nodeTemplateByName(filteredNodeTemplateName)
\r
208 fun nodeTemplateCapabilityProperty(nodeTemplateName: String, capabilityName: String, propertyName: String): Any? {
\r
209 return nodeTemplateCapability(nodeTemplateName, capabilityName).properties?.get(propertyName)
\r
212 // Chained Functions
\r
214 fun nodeTypeChained(nodeTypeName: String): NodeType {
\r
215 return BluePrintChainedService(this).nodeTypeChained(nodeTypeName)
\r
218 fun nodeTypeChainedProperties(nodeTypeName: String): MutableMap<String, PropertyDefinition>? {
\r
219 return BluePrintChainedService(this).nodeTypeChainedProperties(nodeTypeName)
\r