ccf4ffcc7edf6e91ba93bcdae1f0dddf1a2bb3a3
[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.collections.CollectionUtils;\r
22 import org.apache.commons.lang3.StringUtils;\r
23 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;\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 ResourceDefinitionValidationService 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            dataDictionaryRepository\r
53      * @param resourceDictionaryValidationService resourceDictionaryValidationService\r
54      */\r
55     public ResourceDictionaryService(ResourceDictionaryRepository dataDictionaryRepository,\r
56                                      ResourceDefinitionValidationService 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 name\r
65      * @return DataDictionary\r
66      * @throws BluePrintException BluePrintException\r
67      */\r
68     public ResourceDictionary getResourceDictionaryByName(String name) throws BluePrintException {\r
69         Preconditions.checkArgument(StringUtils.isNotBlank(name), "Resource dictionary Name Information is missing.");\r
70         Optional<ResourceDictionary> resourceDictionaryDb = resourceDictionaryRepository.findByName(name);\r
71         if (resourceDictionaryDb.isPresent()) {\r
72             return resourceDictionaryDb.get();\r
73         } else {\r
74             throw new BluePrintException(String.format("couldn't get resource dictionary for name (%s)", name));\r
75         }\r
76     }\r
77 \r
78     /**\r
79      * This is a searchResourceDictionaryByNames service\r
80      *\r
81      * @param names names\r
82      * @return List<ResourceDictionary>\r
83      */\r
84     public List<ResourceDictionary> searchResourceDictionaryByNames(List<String> names) {\r
85         Preconditions.checkArgument(CollectionUtils.isNotEmpty(names), "No Search Information provide");\r
86         return resourceDictionaryRepository.findByNameIn(names);\r
87     }\r
88 \r
89     /**\r
90      * This is a searchResourceDictionaryByTags service\r
91      *\r
92      * @param tags tags\r
93      * @return List<ResourceDictionary>\r
94      */\r
95     public List<ResourceDictionary> searchResourceDictionaryByTags(String tags) {\r
96         Preconditions.checkArgument(StringUtils.isNotBlank(tags), "No search tag information provide");\r
97         return resourceDictionaryRepository.findByTagsContainingIgnoreCase(tags);\r
98     }\r
99 \r
100     /**\r
101      * This is a saveDataDictionary service\r
102      *\r
103      * @param resourceDictionary resourceDictionary\r
104      * @return DataDictionary\r
105      */\r
106     public ResourceDictionary saveResourceDictionary(ResourceDictionary resourceDictionary) {\r
107         Preconditions.checkNotNull(resourceDictionary, "Resource Dictionary information is missing");\r
108         Preconditions.checkArgument(StringUtils.isNotBlank(resourceDictionary.getDefinition()),\r
109                 "Resource Dictionary definition information is missing");\r
110 \r
111         ResourceDefinition resourceDefinition =\r
112                 JacksonUtils.readValue(resourceDictionary.getDefinition(), ResourceDefinition.class);\r
113         Preconditions.checkNotNull(resourceDefinition, "failed to get resource definition from content");\r
114         // Validate the Resource Definitions\r
115         resourceDictionaryValidationService.validate(resourceDefinition);\r
116 \r
117         resourceDictionary.setResourceType(resourceDefinition.getResourceType());\r
118         resourceDictionary.setResourcePath(resourceDefinition.getResourcePath());\r
119         resourceDictionary.setTags(resourceDefinition.getTags());\r
120         resourceDefinition.setUpdatedBy(resourceDictionary.getUpdatedBy());\r
121         // Set the Property Definitions\r
122         PropertyDefinition propertyDefinition = resourceDefinition.getProperty();\r
123         resourceDictionary.setDescription(propertyDefinition.getDescription());\r
124         resourceDictionary.setDataType(propertyDefinition.getType());\r
125         if (propertyDefinition.getEntrySchema() != null) {\r
126             resourceDictionary.setEntrySchema(propertyDefinition.getEntrySchema().getType());\r
127         }\r
128 \r
129         String definitionContent = JacksonUtils.getJson(resourceDefinition, true);\r
130         resourceDictionary.setDefinition(definitionContent);\r
131 \r
132         ResourceDictionaryValidator.validateResourceDictionary(resourceDictionary);\r
133 \r
134         Optional<ResourceDictionary> dbResourceDictionaryData =\r
135                 resourceDictionaryRepository.findByName(resourceDictionary.getName());\r
136         if (dbResourceDictionaryData.isPresent()) {\r
137             ResourceDictionary dbResourceDictionary = dbResourceDictionaryData.get();\r
138 \r
139             dbResourceDictionary.setName(resourceDictionary.getName());\r
140             dbResourceDictionary.setDefinition(resourceDictionary.getDefinition());\r
141             dbResourceDictionary.setDescription(resourceDictionary.getDescription());\r
142             dbResourceDictionary.setResourceType(resourceDictionary.getResourceType());\r
143             dbResourceDictionary.setResourcePath(resourceDictionary.getResourcePath());\r
144             dbResourceDictionary.setTags(resourceDictionary.getTags());\r
145             dbResourceDictionary.setUpdatedBy(resourceDictionary.getUpdatedBy());\r
146             dbResourceDictionary.setDataType(resourceDictionary.getDataType());\r
147             dbResourceDictionary.setEntrySchema(resourceDictionary.getEntrySchema());\r
148             resourceDictionary = resourceDictionaryRepository.save(dbResourceDictionary);\r
149         } else {\r
150             resourceDictionary = resourceDictionaryRepository.save(resourceDictionary);\r
151         }\r
152 \r
153         return resourceDictionary;\r
154     }\r
155 \r
156     /**\r
157      * This is a deleteResourceDictionary service\r
158      *\r
159      * @param name name\r
160      */\r
161     public void deleteResourceDictionary(String name) {\r
162         Preconditions.checkArgument(StringUtils.isNotBlank(name), "Resource dictionary Name Information is missing.");\r
163         resourceDictionaryRepository.deleteByName(name);\r
164     }\r
165 }\r