Blueprints Processor Microservice
[ccsdk/apps.git] / ms / blueprintsprocessor / functions / resource-resolution / src / main / kotlin / org / onap / ccsdk / apps / blueprintsprocessor / services / resolution / ResourceResolutionService.kt
1 /*\r
2  *  Copyright © 2017-2018 AT&T Intellectual Property.\r
3  *  Modifications Copyright © 2018 IBM.\r
4  *\r
5  *  Licensed under the Apache License, Version 2.0 (the "License");\r
6  *  you may not use this file except in compliance with the License.\r
7  *  You may obtain a copy of the License at\r
8  *\r
9  *      http://www.apache.org/licenses/LICENSE-2.0\r
10  *\r
11  *  Unless required by applicable law or agreed to in writing, software\r
12  *  distributed under the License is distributed on an "AS IS" BASIS,\r
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14  *  See the License for the specific language governing permissions and\r
15  *  limitations under the License.\r
16  */\r
17 \r
18 package org.onap.ccsdk.apps.blueprintsprocessor.services.resolution\r
19 \r
20 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ResourceResolutionInput\r
21 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.ResourceResolutionOutput\r
22 import org.onap.ccsdk.apps.blueprintsprocessor.core.api.data.Status\r
23 import org.onap.ccsdk.apps.blueprintsprocessor.core.factory.ResourceAssignmentProcessorFactory\r
24 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException\r
25 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment\r
26 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.utils.BulkResourceSequencingUtils\r
27 import org.springframework.stereotype.Service\r
28 \r
29 /**\r
30  * ResourceResolutionService\r
31  * @author Brinda Santh\r
32  * 8/14/2018\r
33  */\r
34 \r
35 @Service\r
36 class ResourceResolutionService(private val resourceAssignmentProcessorFactory: ResourceAssignmentProcessorFactory) {\r
37 \r
38     fun resolveResource(resourceResolutionInput: ResourceResolutionInput): ResourceResolutionOutput {\r
39         val resourceResolutionOutput = ResourceResolutionOutput()\r
40         resourceResolutionOutput.actionIdentifiers = resourceResolutionInput.actionIdentifiers\r
41         resourceResolutionOutput.commonHeader = resourceResolutionInput.commonHeader\r
42         resourceResolutionOutput.resourceAssignments = resourceResolutionInput.resourceAssignments\r
43 \r
44         val context = hashMapOf<String, Any>()\r
45 \r
46         process(resourceResolutionOutput.resourceAssignments, context)\r
47 \r
48         val status = Status()\r
49         status.code = 200\r
50         status.message = "Success"\r
51         resourceResolutionOutput.status = status\r
52 \r
53         return resourceResolutionOutput\r
54     }\r
55 \r
56     fun process(resourceAssignments: MutableList<ResourceAssignment>, context: MutableMap<String, Any>): Unit {\r
57 \r
58         val bulkSequenced = BulkResourceSequencingUtils.process(resourceAssignments)\r
59 \r
60         bulkSequenced.map { batchResourceAssignments ->\r
61             batchResourceAssignments.filter { it.name != "*" && it.name != "start" }\r
62                     .map { resourceAssignment ->\r
63                         val dictionarySource = resourceAssignment.dictionarySource\r
64                         val processorInstanceName = "resource-assignment-processor-".plus(dictionarySource)\r
65                         val resourceAssignmentProcessor = resourceAssignmentProcessorFactory.getInstance(processorInstanceName)\r
66                                 ?: throw BluePrintProcessorException("failed to get resource processor for instance name($processorInstanceName) " +\r
67                                         "for resource assignment(${resourceAssignment.name})")\r
68                         try {\r
69                             resourceAssignmentProcessor.validate(resourceAssignment, context)\r
70                             resourceAssignmentProcessor.process(resourceAssignment, context)\r
71                         } catch (e: Exception) {\r
72                             resourceAssignmentProcessor.errorHandle(resourceAssignment, context)\r
73                             throw BluePrintProcessorException(e)\r
74                         }\r
75 \r
76                     }\r
77         }\r
78     }\r
79 }\r