5420dd3909bb62572616efebdd50589e252d4ff7
[ccsdk/cds.git] /
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.controllerblueprints.service;\r
19 \r
20 import org.apache.commons.lang3.StringUtils;\r
21 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;\r
22 import org.onap.ccsdk.apps.controllerblueprints.core.data.EntrySchema;\r
23 import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition;\r
24 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;\r
25 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition;\r
26 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ResourceDictionary;\r
27 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ResourceDictionaryRepository;\r
28 import org.onap.ccsdk.apps.controllerblueprints.service.validator.ResourceDictionaryValidator;\r
29 import org.springframework.stereotype.Service;\r
30 \r
31 import java.util.List;\r
32 import java.util.Optional;\r
33 \r
34 /**\r
35  * ResourceDictionaryService.java Purpose: Provide DataDictionaryService Service\r
36  * DataDictionaryService\r
37  *\r
38  * @author Brinda Santh\r
39  * @version 1.0\r
40  */\r
41 @Service\r
42 public class ResourceDictionaryService {\r
43 \r
44     private ResourceDictionaryRepository resourceDictionaryRepository;\r
45 \r
46     private ResourceDictionaryValidationService resourceDictionaryValidationService;\r
47 \r
48     /**\r
49      * This is a DataDictionaryService, used to save and get the Resource Mapping stored in database\r
50      *\r
51      * @param dataDictionaryRepository\r
52      * @param resourceDictionaryValidationService\r
53      */\r
54     public ResourceDictionaryService(ResourceDictionaryRepository dataDictionaryRepository,\r
55                                      ResourceDictionaryValidationService resourceDictionaryValidationService) {\r
56         this.resourceDictionaryRepository = dataDictionaryRepository;\r
57         this.resourceDictionaryValidationService = resourceDictionaryValidationService;\r
58     }\r
59 \r
60     /**\r
61      * This is a getDataDictionaryByName service\r
62      *\r
63      * @param name\r
64      * @return DataDictionary\r
65      * @throws BluePrintException\r
66      */\r
67     public ResourceDictionary getResourceDictionaryByName(String name) throws BluePrintException {\r
68         if (StringUtils.isNotBlank(name)) {\r
69             return resourceDictionaryRepository.findByName(name).get();\r
70         } else {\r
71             throw new BluePrintException("Resource Mapping Name Information is missing.");\r
72         }\r
73     }\r
74 \r
75     /**\r
76      * This is a searchResourceDictionaryByNames service\r
77      *\r
78      * @param names\r
79      * @return List<ResourceDictionary>\r
80      * @throws BluePrintException\r
81      */\r
82     public List<ResourceDictionary> searchResourceDictionaryByNames(List<String> names)\r
83             throws BluePrintException {\r
84         if (names != null && !names.isEmpty()) {\r
85             return resourceDictionaryRepository.findByNameIn(names);\r
86         } else {\r
87             throw new BluePrintException("No Search Information provide");\r
88         }\r
89     }\r
90 \r
91     /**\r
92      * This is a searchResourceDictionaryByTags service\r
93      *\r
94      * @param tags\r
95      * @return List<ResourceDictionary>\r
96      * @throws BluePrintException\r
97      */\r
98     public List<ResourceDictionary> searchResourceDictionaryByTags(String tags) throws BluePrintException {\r
99         if (StringUtils.isNotBlank(tags)) {\r
100             return resourceDictionaryRepository.findByTagsContainingIgnoreCase(tags);\r
101         } else {\r
102             throw new BluePrintException("No Search Information provide");\r
103         }\r
104     }\r
105 \r
106     /**\r
107      * This is a saveDataDictionary service\r
108      *\r
109      * @param resourceDictionary\r
110      * @return DataDictionary\r
111      * @throws BluePrintException\r
112      */\r
113     public ResourceDictionary saveResourceDictionary(ResourceDictionary resourceDictionary)\r
114             throws BluePrintException {\r
115         if (resourceDictionary != null) {\r
116             ResourceDictionaryValidator.validateResourceDictionary(resourceDictionary);\r
117 \r
118             ResourceDefinition resourceDefinition =\r
119                     JacksonUtils.readValue(resourceDictionary.getDefinition(), ResourceDefinition.class);\r
120             // Check the Source already Present\r
121             resourceDictionaryValidationService.validate(resourceDefinition);\r
122 \r
123             if (resourceDefinition == null) {\r
124                 throw new BluePrintException(\r
125                         "Resource dictionary definition is not valid content " + resourceDictionary.getDefinition());\r
126             }\r
127 \r
128             resourceDefinition.setName(resourceDictionary.getName());\r
129             resourceDefinition.setResourcePath(resourceDictionary.getResourcePath());\r
130             resourceDefinition.setResourceType(resourceDictionary.getResourceType());\r
131 \r
132             PropertyDefinition propertyDefinition = new PropertyDefinition();\r
133             propertyDefinition.setType(resourceDictionary.getDataType());\r
134             propertyDefinition.setDescription(resourceDictionary.getDescription());\r
135             if (StringUtils.isNotBlank(resourceDictionary.getEntrySchema())) {\r
136                 EntrySchema entrySchema = new EntrySchema();\r
137                 entrySchema.setType(resourceDictionary.getEntrySchema());\r
138                 propertyDefinition.setEntrySchema(entrySchema);\r
139             } else {\r
140                 propertyDefinition.setEntrySchema(null);\r
141             }\r
142             resourceDefinition.setTags(resourceDictionary.getTags());\r
143             resourceDefinition.setUpdatedBy(resourceDictionary.getUpdatedBy());\r
144 \r
145             String definitionContent = JacksonUtils.getJson(resourceDefinition, true);\r
146             resourceDictionary.setDefinition(definitionContent);\r
147 \r
148             Optional<ResourceDictionary> dbResourceDictionaryData =\r
149                     resourceDictionaryRepository.findByName(resourceDictionary.getName());\r
150             if (dbResourceDictionaryData.isPresent()) {\r
151                 ResourceDictionary dbResourceDictionary = dbResourceDictionaryData.get();\r
152 \r
153                 dbResourceDictionary.setName(resourceDictionary.getName());\r
154                 dbResourceDictionary.setDefinition(resourceDictionary.getDefinition());\r
155                 dbResourceDictionary.setDescription(resourceDictionary.getDescription());\r
156                 dbResourceDictionary.setResourceType(resourceDictionary.getResourceType());\r
157                 dbResourceDictionary.setResourcePath(resourceDictionary.getResourcePath());\r
158                 dbResourceDictionary.setDataType(resourceDictionary.getDataType());\r
159                 dbResourceDictionary.setEntrySchema(resourceDictionary.getEntrySchema());\r
160                 dbResourceDictionary.setTags(resourceDictionary.getTags());\r
161                 dbResourceDictionary.setValidValues(resourceDictionary.getValidValues());\r
162                 resourceDictionary = resourceDictionaryRepository.save(dbResourceDictionary);\r
163             } else {\r
164                 resourceDictionary = resourceDictionaryRepository.save(resourceDictionary);\r
165             }\r
166         } else {\r
167             throw new BluePrintException("Resource Dictionary information is missing");\r
168         }\r
169         return resourceDictionary;\r
170     }\r
171 \r
172     /**\r
173      * This is a deleteResourceDictionary service\r
174      *\r
175      * @param name\r
176      * @throws BluePrintException\r
177      */\r
178     public void deleteResourceDictionary(String name) throws BluePrintException {\r
179         if (name != null) {\r
180             resourceDictionaryRepository.deleteByName(name);\r
181         } else {\r
182             throw new BluePrintException("Resource Mapping Id Information is missing.");\r
183         }\r
184 \r
185     }\r
186 }\r