97a4dd45e009ecfd8a448d3fdd1b48d944c5f2e5
[ccsdk/features.git] /
1 /*\r
2  * Copyright © 2017-2018 AT&T Intellectual Property.\r
3  * \r
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except\r
5  * in compliance with the License. You may obtain a copy of the License at\r
6  * \r
7  * http://www.apache.org/licenses/LICENSE-2.0\r
8  * \r
9  * Unless required by applicable law or agreed to in writing, software distributed under the License\r
10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\r
11  * or implied. See the License for the specific language governing permissions and limitations under\r
12  * the License.\r
13  */\r
14 \r
15 package org.onap.ccsdk.config.assignment.service;\r
16 \r
17 import java.util.ArrayList;\r
18 import java.util.HashMap;\r
19 import java.util.List;\r
20 import java.util.Map;\r
21 import org.apache.commons.lang3.StringUtils;\r
22 import org.onap.ccsdk.config.model.data.ResourceAssignment;\r
23 import org.onap.ccsdk.config.model.data.dict.ResourceDefinition;\r
24 import org.onap.ccsdk.config.model.domain.ResourceDictionary;\r
25 import org.onap.ccsdk.config.model.utils.TransformationUtils;\r
26 import org.onap.ccsdk.config.rest.adaptor.ConfigRestAdaptorConstants;\r
27 import org.onap.ccsdk.config.rest.adaptor.ConfigRestAdaptorException;\r
28 import org.onap.ccsdk.config.rest.adaptor.service.ConfigRestAdaptorService;\r
29 import org.onap.ccsdk.sli.core.sli.SvcLogicException;\r
30 import com.att.eelf.configuration.EELFLogger;\r
31 import com.att.eelf.configuration.EELFManager;\r
32 \r
33 public class ResourceDictionaryService {\r
34     \r
35     private static EELFLogger logger = EELFManager.getInstance().getLogger(ResourceDictionaryService.class);\r
36     private ConfigRestAdaptorService configRestAdaptorService;\r
37     \r
38     public ResourceDictionaryService(ConfigRestAdaptorService configRestAdaptorService) {\r
39         this.configRestAdaptorService = configRestAdaptorService;\r
40     }\r
41     \r
42     @SuppressWarnings("squid:S3776")\r
43     public Map<String, ResourceDefinition> getDataDictionaryDefinitions(List<ResourceAssignment> resourceAssignments)\r
44             throws SvcLogicException {\r
45         try {\r
46             Map<String, ResourceDefinition> dictionaries = new HashMap<>();\r
47             if (resourceAssignments != null) {\r
48                 List<String> names = new ArrayList<>();\r
49                 for (ResourceAssignment resourceAssignment : resourceAssignments) {\r
50                     if (resourceAssignment != null && StringUtils.isNotBlank(resourceAssignment.getDictionaryName())) {\r
51                         \r
52                         if (!names.contains(resourceAssignment.getDictionaryName())) {\r
53                             names.add(resourceAssignment.getDictionaryName());\r
54                         }\r
55                         \r
56                         if (resourceAssignment.getDependencies() != null\r
57                                 && !resourceAssignment.getDependencies().isEmpty()) {\r
58                             List<String> dependencieNames = resourceAssignment.getDependencies();\r
59                             for (String dependencieName : dependencieNames) {\r
60                                 if (StringUtils.isNotBlank(dependencieName) && !names.contains(dependencieName)) {\r
61                                     names.add(dependencieName);\r
62                                 }\r
63                             }\r
64                         }\r
65                     }\r
66                 }\r
67                 queryResourceDictionaryDefinitions(dictionaries, names);\r
68             }\r
69             return dictionaries;\r
70         } catch (Exception e) {\r
71             throw new SvcLogicException("Failed in getting resource data dictionary : " + e.getMessage());\r
72         }\r
73         \r
74     }\r
75     \r
76     @SuppressWarnings("squid:S3776")\r
77     private void queryResourceDictionaryDefinitions(Map<String, ResourceDefinition> dictionaries, List<String> names)\r
78             throws SvcLogicException, ConfigRestAdaptorException {\r
79         logger.info("Getting resource dictionary definition for the names ({})", names);\r
80         if (!names.isEmpty()) {\r
81             \r
82             String dictionaryContents = configRestAdaptorService.postResource(\r
83                     ConfigRestAdaptorConstants.SELECTOR_MODEL_SERVICE, "dictionarybynames", names, String.class);\r
84             \r
85             if (StringUtils.isNotBlank(dictionaryContents)) {\r
86                 List<ResourceDictionary> dataDictionaries =\r
87                         TransformationUtils.getListfromJson(dictionaryContents, ResourceDictionary.class);\r
88                 if (dataDictionaries != null) {\r
89                     for (ResourceDictionary dataDictionary : dataDictionaries) {\r
90                         if (dataDictionary != null && StringUtils.isNotBlank(dataDictionary.getName())\r
91                                 && StringUtils.isNotBlank(dataDictionary.getDefinition())) {\r
92                             ResourceDefinition resourceDefinition = TransformationUtils\r
93                                     .readValue(dataDictionary.getDefinition(), ResourceDefinition.class);\r
94                             if (resourceDefinition != null && StringUtils.isNotBlank(resourceDefinition.getName())) {\r
95                                 dictionaries.put(resourceDefinition.getName(), resourceDefinition);\r
96                             } else {\r
97                                 throw new SvcLogicException(\r
98                                         "Failed in getting resource data dictionary definition for : "\r
99                                                 + dataDictionary.getName());\r
100                             }\r
101                         }\r
102                     }\r
103                 }\r
104             } else {\r
105                 logger.warn("No resource dictionary definition found for the names ({})", names);\r
106             }\r
107         }\r
108     }\r
109 }\r