Controller Blueprints Nitrogen to Oxygen Migration
[ccsdk/features.git] / blueprints-processor / plugin / assignment-provider / src / main / java / org / onap / ccsdk / features / assignment / service / ResourceDictionaryService.java
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.features.assignment.service;\r
19 \r
20 import java.util.ArrayList;\r
21 import java.util.HashMap;\r
22 import java.util.List;\r
23 import java.util.Map;\r
24 import org.apache.commons.lang3.StringUtils;\r
25 import org.onap.ccsdk.features.model.data.ResourceAssignment;\r
26 import org.onap.ccsdk.features.model.data.dict.ResourceDefinition;\r
27 import org.onap.ccsdk.features.model.domain.ResourceDictionary;\r
28 import org.onap.ccsdk.features.model.utils.TransformationUtils;\r
29 import org.onap.ccsdk.features.rest.adaptor.ConfigRestAdaptorConstants;\r
30 import org.onap.ccsdk.features.rest.adaptor.ConfigRestAdaptorException;\r
31 import org.onap.ccsdk.features.rest.adaptor.service.ConfigRestAdaptorService;\r
32 import org.onap.ccsdk.sli.core.sli.SvcLogicException;\r
33 import com.att.eelf.configuration.EELFLogger;\r
34 import com.att.eelf.configuration.EELFManager;\r
35 \r
36 public class ResourceDictionaryService {\r
37 \r
38     private static EELFLogger logger = EELFManager.getInstance().getLogger(ResourceDictionaryService.class);\r
39     private ConfigRestAdaptorService configRestAdaptorService;\r
40 \r
41     public ResourceDictionaryService(ConfigRestAdaptorService configRestAdaptorService) {\r
42         this.configRestAdaptorService = configRestAdaptorService;\r
43     }\r
44 \r
45     @SuppressWarnings("squid:S3776")\r
46     public Map<String, ResourceDefinition> getDataDictionaryDefinitions(List<ResourceAssignment> resourceAssignments)\r
47             throws SvcLogicException {\r
48         try {\r
49             Map<String, ResourceDefinition> dictionaries = new HashMap<>();\r
50             if (resourceAssignments != null) {\r
51                 List<String> names = new ArrayList<>();\r
52                 for (ResourceAssignment resourceAssignment : resourceAssignments) {\r
53                     if (resourceAssignment != null && StringUtils.isNotBlank(resourceAssignment.getDictionaryName())) {\r
54 \r
55                         if (!names.contains(resourceAssignment.getDictionaryName())) {\r
56                             names.add(resourceAssignment.getDictionaryName());\r
57                         }\r
58 \r
59                         if (resourceAssignment.getDependencies() != null\r
60                                 && !resourceAssignment.getDependencies().isEmpty()) {\r
61                             List<String> dependencieNames = resourceAssignment.getDependencies();\r
62                             for (String dependencieName : dependencieNames) {\r
63                                 if (StringUtils.isNotBlank(dependencieName) && !names.contains(dependencieName)) {\r
64                                     names.add(dependencieName);\r
65                                 }\r
66                             }\r
67                         }\r
68                     }\r
69                 }\r
70                 queryResourceDictionaryDefinitions(dictionaries, names);\r
71             }\r
72             return dictionaries;\r
73         } catch (Exception e) {\r
74             throw new SvcLogicException("Failed in getting resource data dictionary : " + e.getMessage());\r
75         }\r
76 \r
77     }\r
78 \r
79     @SuppressWarnings("squid:S3776")\r
80     private void queryResourceDictionaryDefinitions(Map<String, ResourceDefinition> dictionaries, List<String> names)\r
81             throws SvcLogicException, ConfigRestAdaptorException {\r
82         logger.info("Getting resource dictionary definition for the names ({})", names);\r
83         if (!names.isEmpty()) {\r
84 \r
85             String dictionaryContents = configRestAdaptorService.postResource(\r
86                     ConfigRestAdaptorConstants.SELECTOR_MODEL_SERVICE, "dictionarybynames", names, String.class);\r
87 \r
88             if (StringUtils.isNotBlank(dictionaryContents)) {\r
89                 List<ResourceDictionary> dataDictionaries =\r
90                         TransformationUtils.getListfromJson(dictionaryContents, ResourceDictionary.class);\r
91                 if (dataDictionaries != null) {\r
92                     for (ResourceDictionary dataDictionary : dataDictionaries) {\r
93                         if (dataDictionary != null && StringUtils.isNotBlank(dataDictionary.getName())\r
94                                 && StringUtils.isNotBlank(dataDictionary.getDefinition())) {\r
95                             ResourceDefinition resourceDefinition = TransformationUtils\r
96                                     .readValue(dataDictionary.getDefinition(), ResourceDefinition.class);\r
97                             if (resourceDefinition != null && StringUtils.isNotBlank(resourceDefinition.getName())) {\r
98                                 dictionaries.put(resourceDefinition.getName(), resourceDefinition);\r
99                             } else {\r
100                                 throw new SvcLogicException(\r
101                                         "Failed in getting resource data dictionary definition for : "\r
102                                                 + dataDictionary.getName());\r
103                             }\r
104                         }\r
105                     }\r
106                 }\r
107             } else {\r
108                 logger.warn("No resource dictionary definition found for the names ({})", names);\r
109             }\r
110         }\r
111     }\r
112 }\r