Controller Blueprints Microservice
[ccsdk/apps.git] / ms / controllerblueprints / modules / service / src / main / java / org / onap / ccsdk / apps / controllerblueprints / 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.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.EntrySchema;\r
24 import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition;\r
25 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;\r
26 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition;\r
27 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ResourceDictionary;\r
28 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ResourceDictionaryRepository;\r
29 import org.onap.ccsdk.apps.controllerblueprints.service.validator.ResourceDictionaryValidator;\r
30 import org.springframework.stereotype.Service;\r
31 \r
32 import java.util.List;\r
33 import java.util.Optional;\r
34 \r
35 /**\r
36  * ResourceDictionaryService.java Purpose: Provide DataDictionaryService Service\r
37  * DataDictionaryService\r
38  *\r
39  * @author Brinda Santh\r
40  * @version 1.0\r
41  */\r
42 @Service\r
43 public class ResourceDictionaryService {\r
44 \r
45     private ResourceDictionaryRepository resourceDictionaryRepository;\r
46 \r
47     private ResourceDictionaryValidationService resourceDictionaryValidationService;\r
48 \r
49     /**\r
50      * This is a DataDictionaryService, used to save and get the Resource Mapping stored in database\r
51      *\r
52      * @param dataDictionaryRepository\r
53      * @param resourceDictionaryValidationService\r
54      */\r
55     public ResourceDictionaryService(ResourceDictionaryRepository dataDictionaryRepository,\r
56                                      ResourceDictionaryValidationService resourceDictionaryValidationService) {\r
57         this.resourceDictionaryRepository = dataDictionaryRepository;\r
58         this.resourceDictionaryValidationService = resourceDictionaryValidationService;\r
59     }\r
60 \r
61     /**\r
62      * This is a getDataDictionaryByName service\r
63      *\r
64      * @param name\r
65      * @return DataDictionary\r
66      * @throws BluePrintException\r
67      */\r
68     public ResourceDictionary getResourceDictionaryByName(String name) throws BluePrintException {\r
69         if (StringUtils.isNotBlank(name)) {\r
70             return resourceDictionaryRepository.findByName(name).get();\r
71         } else {\r
72             throw new BluePrintException("Resource Mapping Name Information is missing.");\r
73         }\r
74     }\r
75 \r
76     /**\r
77      * This is a searchResourceDictionaryByNames service\r
78      *\r
79      * @param names\r
80      * @return List<ResourceDictionary>\r
81      * @throws BluePrintException\r
82      */\r
83     public List<ResourceDictionary> searchResourceDictionaryByNames(List<String> names)\r
84             throws BluePrintException {\r
85         if (names != null && !names.isEmpty()) {\r
86             return resourceDictionaryRepository.findByNameIn(names);\r
87         } else {\r
88             throw new BluePrintException("No Search Information provide");\r
89         }\r
90     }\r
91 \r
92     /**\r
93      * This is a searchResourceDictionaryByTags service\r
94      *\r
95      * @param tags\r
96      * @return List<ResourceDictionary>\r
97      * @throws BluePrintException\r
98      */\r
99     public List<ResourceDictionary> searchResourceDictionaryByTags(String tags) throws BluePrintException {\r
100         if (StringUtils.isNotBlank(tags)) {\r
101             return resourceDictionaryRepository.findByTagsContainingIgnoreCase(tags);\r
102         } else {\r
103             throw new BluePrintException("No Search Information provide");\r
104         }\r
105     }\r
106 \r
107     /**\r
108      * This is a saveDataDictionary service\r
109      *\r
110      * @param resourceDictionary\r
111      * @return DataDictionary\r
112      * @throws BluePrintException\r
113      */\r
114     public ResourceDictionary saveResourceDictionary(ResourceDictionary resourceDictionary)\r
115             throws BluePrintException {\r
116         Preconditions.checkNotNull(resourceDictionary, "Resource Dictionary information is missing");\r
117         Preconditions.checkArgument(StringUtils.isNotBlank(resourceDictionary.getDefinition()),\r
118                 "Resource Dictionary definition information is missing");\r
119 \r
120         ResourceDefinition resourceDefinition =\r
121                 JacksonUtils.readValue(resourceDictionary.getDefinition(), ResourceDefinition.class);\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