85e701b41d6d7d6ee3e737ce4e0a10680434010b
[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 com.google.common.base.Preconditions;\r
21 import org.apache.commons.lang3.StringUtils;\r
22 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;\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         Preconditions.checkNotNull(resourceDictionary, "Resource Dictionary information is missing");\r
116         Preconditions.checkArgument(StringUtils.isNotBlank(resourceDictionary.getDefinition()),\r
117                 "Resource Dictionary definition information is missing");\r
118 \r
119         ResourceDefinition resourceDefinition =\r
120                 JacksonUtils.readValue(resourceDictionary.getDefinition(), ResourceDefinition.class);\r
121         Preconditions.checkNotNull(resourceDefinition, "failed to get resource definition from content");\r
122         // Validate the Resource Definitions\r
123         resourceDictionaryValidationService.validate(resourceDefinition);\r
124 \r
125         resourceDictionary.setResourceType(resourceDefinition.getResourceType());\r
126         resourceDictionary.setResourcePath(resourceDefinition.getResourcePath());\r
127         resourceDictionary.setTags(resourceDefinition.getTags());\r
128         resourceDefinition.setUpdatedBy(resourceDictionary.getUpdatedBy());\r
129         // Set the Property Definitions\r
130         PropertyDefinition propertyDefinition = resourceDefinition.getProperty();\r
131         resourceDictionary.setDescription(propertyDefinition.getDescription());\r
132         resourceDictionary.setDataType(propertyDefinition.getType());\r
133         if(propertyDefinition.getEntrySchema() != null){\r
134             resourceDictionary.setEntrySchema(propertyDefinition.getEntrySchema().getType());\r
135         }\r
136 \r
137         String definitionContent = JacksonUtils.getJson(resourceDefinition, true);\r
138         resourceDictionary.setDefinition(definitionContent);\r
139 \r
140         ResourceDictionaryValidator.validateResourceDictionary(resourceDictionary);\r
141 \r
142         Optional<ResourceDictionary> dbResourceDictionaryData =\r
143                 resourceDictionaryRepository.findByName(resourceDictionary.getName());\r
144         if (dbResourceDictionaryData.isPresent()) {\r
145             ResourceDictionary dbResourceDictionary = dbResourceDictionaryData.get();\r
146 \r
147             dbResourceDictionary.setName(resourceDictionary.getName());\r
148             dbResourceDictionary.setDefinition(resourceDictionary.getDefinition());\r
149             dbResourceDictionary.setDescription(resourceDictionary.getDescription());\r
150             dbResourceDictionary.setResourceType(resourceDictionary.getResourceType());\r
151             dbResourceDictionary.setResourcePath(resourceDictionary.getResourcePath());\r
152             dbResourceDictionary.setTags(resourceDictionary.getTags());\r
153             dbResourceDictionary.setUpdatedBy(resourceDictionary.getUpdatedBy());\r
154             dbResourceDictionary.setDataType(resourceDictionary.getDataType());\r
155             dbResourceDictionary.setEntrySchema(resourceDictionary.getEntrySchema());\r
156             resourceDictionary = resourceDictionaryRepository.save(dbResourceDictionary);\r
157         } else {\r
158             resourceDictionary = resourceDictionaryRepository.save(resourceDictionary);\r
159         }\r
160 \r
161         return resourceDictionary;\r
162     }\r
163 \r
164     /**\r
165      * This is a deleteResourceDictionary service\r
166      *\r
167      * @param name\r
168      * @throws BluePrintException\r
169      */\r
170     public void deleteResourceDictionary(String name) throws BluePrintException {\r
171         if (name != null) {\r
172             resourceDictionaryRepository.deleteByName(name);\r
173         } else {\r
174             throw new BluePrintException("Resource Mapping Id Information is missing.");\r
175         }\r
176 \r
177     }\r
178 }\r