b07155a32e8fa3645a079718dd96a8e6cf1d0f84
[ccsdk/cds.git] / ms / blueprintsprocessor / functions / resource-resolution / src / main / kotlin / org / onap / ccsdk / apps / blueprintsprocessor / functions / resource / resolution / processor / ResourceAssignmentProcessor.kt
1 /*
2  *  Copyright © 2018 IBM.
3  *  Modifications Copyright © 2017-2018 AT&T Intellectual Property.
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17
18 package org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.processor
19
20 import org.onap.ccsdk.apps.blueprintsprocessor.functions.resource.resolution.ResourceAssignmentRuntimeService
21 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
22 import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BlueprintFunctionNode
23 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
24 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition
25 import org.slf4j.LoggerFactory
26
27 abstract class ResourceAssignmentProcessor : BlueprintFunctionNode<ResourceAssignment, ResourceAssignment> {
28
29     private val log = LoggerFactory.getLogger(ResourceAssignmentProcessor::class.java)
30
31     lateinit var raRuntimeService: ResourceAssignmentRuntimeService
32     lateinit var resourceDictionaries: MutableMap<String, ResourceDefinition>
33
34     var scriptPropertyInstances: Map<String, Any> = hashMapOf()
35
36     /**
37      * This will be called from the scripts to serve instance from runtime to scripts.
38      */
39     open fun <T> scriptPropertyInstanceType(name: String): T {
40         return scriptPropertyInstances as? T
41                 ?: throw BluePrintProcessorException("couldn't get script property instance ($name)")
42     }
43
44     open fun resourceDefinition(name: String): ResourceDefinition {
45         return resourceDictionaries[name]
46                 ?: throw BluePrintProcessorException("couldn't get resource definition for ($name)")
47     }
48
49     override fun prepareRequest(resourceAssignment: ResourceAssignment): ResourceAssignment {
50         log.info("prepareRequest for ${resourceAssignment.name}, dictionary(${resourceAssignment.dictionaryName})," +
51                 "source(${resourceAssignment.dictionarySource})")
52         return resourceAssignment
53     }
54
55     override fun prepareResponse(): ResourceAssignment {
56         log.info("Preparing Response...")
57         return ResourceAssignment()
58     }
59
60     override fun apply(executionServiceInput: ResourceAssignment): ResourceAssignment {
61         prepareRequest(executionServiceInput)
62         process(executionServiceInput)
63         return prepareResponse()
64     }
65
66 }