eacc90251a4661009943bcb9d9d7ac5335ebd0fc
[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.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.resource.dict.ResourceDefinition;\r
26 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceSourceMapping;\r
27 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.factory.ResourceSourceMappingFactory;\r
28 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.service.ResourceDefinitionValidationService;\r
29 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ResourceDictionary;\r
30 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ResourceDictionaryRepository;\r
31 import org.onap.ccsdk.apps.controllerblueprints.service.validator.ResourceDictionaryValidator;\r
32 import org.springframework.stereotype.Service;\r
33 \r
34 import java.util.List;\r
35 import java.util.Optional;\r
36 \r
37 /**\r
38  * ResourceDictionaryService.java Purpose: Provide DataDictionaryService Service\r
39  * DataDictionaryService\r
40  *\r
41  * @author Brinda Santh\r
42  * @version 1.0\r
43  */\r
44 @Service\r
45 public class ResourceDictionaryService {\r
46 \r
47     private ResourceDictionaryRepository resourceDictionaryRepository;\r
48 \r
49     private ResourceDefinitionValidationService resourceDictionaryValidationService;\r
50 \r
51     /**\r
52      * This is a DataDictionaryService, used to save and get the Resource Mapping stored in database\r
53      *\r
54      * @param dataDictionaryRepository            dataDictionaryRepository\r
55      * @param resourceDictionaryValidationService resourceDictionaryValidationService\r
56      */\r
57     public ResourceDictionaryService(ResourceDictionaryRepository dataDictionaryRepository,\r
58                                      ResourceDefinitionValidationService resourceDictionaryValidationService) {\r
59         this.resourceDictionaryRepository = dataDictionaryRepository;\r
60         this.resourceDictionaryValidationService = resourceDictionaryValidationService;\r
61     }\r
62 \r
63     /**\r
64      * This is a getDataDictionaryByName service\r
65      *\r
66      * @param name name\r
67      * @return DataDictionary\r
68      * @throws BluePrintException BluePrintException\r
69      */\r
70     public ResourceDictionary getResourceDictionaryByName(String name) throws BluePrintException {\r
71         Preconditions.checkArgument(StringUtils.isNotBlank(name), "Resource dictionary Name Information is missing.");\r
72         Optional<ResourceDictionary> resourceDictionaryDb = resourceDictionaryRepository.findByName(name);\r
73         if (resourceDictionaryDb.isPresent()) {\r
74             return resourceDictionaryDb.get();\r
75         } else {\r
76             throw new BluePrintException(String.format("couldn't get resource dictionary for name (%s)", name));\r
77         }\r
78     }\r
79 \r
80     /**\r
81      * This is a searchResourceDictionaryByNames service\r
82      *\r
83      * @param names names\r
84      * @return List<ResourceDictionary>\r
85      */\r
86     public List<ResourceDictionary> searchResourceDictionaryByNames(List<String> names) {\r
87         Preconditions.checkArgument(CollectionUtils.isNotEmpty(names), "No Search Information provide");\r
88         return resourceDictionaryRepository.findByNameIn(names);\r
89     }\r
90 \r
91     /**\r
92      * This is a searchResourceDictionaryByTags service\r
93      *\r
94      * @param tags tags\r
95      * @return List<ResourceDictionary>\r
96      */\r
97     public List<ResourceDictionary> searchResourceDictionaryByTags(String tags) {\r
98         Preconditions.checkArgument(StringUtils.isNotBlank(tags), "No search tag information provide");\r
99         return resourceDictionaryRepository.findByTagsContainingIgnoreCase(tags);\r
100     }\r
101 \r
102     /**\r
103      * This is a saveDataDictionary service\r
104      *\r
105      * @param resourceDictionary resourceDictionary\r
106      * @return DataDictionary\r
107      */\r
108     public ResourceDictionary saveResourceDictionary(ResourceDictionary resourceDictionary) throws BluePrintException {\r
109         Preconditions.checkNotNull(resourceDictionary, "Resource Dictionary information is missing");\r
110         Preconditions.checkNotNull(resourceDictionary.getDefinition(), "Resource Dictionary definition information is missing");\r
111 \r
112         ResourceDefinition resourceDefinition = resourceDictionary.getDefinition();\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.setTags(resourceDefinition.getTags());\r
118         resourceDefinition.setUpdatedBy(resourceDictionary.getUpdatedBy());\r
119         // Set the Property Definitions\r
120         PropertyDefinition propertyDefinition = resourceDefinition.getProperty();\r
121         resourceDictionary.setDescription(propertyDefinition.getDescription());\r
122         resourceDictionary.setDataType(propertyDefinition.getType());\r
123         if (propertyDefinition.getEntrySchema() != null) {\r
124             resourceDictionary.setEntrySchema(propertyDefinition.getEntrySchema().getType());\r
125         }\r
126 \r
127         ResourceDictionaryValidator.validateResourceDictionary(resourceDictionary);\r
128 \r
129         Optional<ResourceDictionary> dbResourceDictionaryData =\r
130                 resourceDictionaryRepository.findByName(resourceDictionary.getName());\r
131         if (dbResourceDictionaryData.isPresent()) {\r
132             ResourceDictionary dbResourceDictionary = dbResourceDictionaryData.get();\r
133 \r
134             dbResourceDictionary.setName(resourceDictionary.getName());\r
135             dbResourceDictionary.setDefinition(resourceDictionary.getDefinition());\r
136             dbResourceDictionary.setDescription(resourceDictionary.getDescription());\r
137             dbResourceDictionary.setTags(resourceDictionary.getTags());\r
138             dbResourceDictionary.setUpdatedBy(resourceDictionary.getUpdatedBy());\r
139             dbResourceDictionary.setDataType(resourceDictionary.getDataType());\r
140             dbResourceDictionary.setEntrySchema(resourceDictionary.getEntrySchema());\r
141             resourceDictionary = resourceDictionaryRepository.save(dbResourceDictionary);\r
142         } else {\r
143             resourceDictionary = resourceDictionaryRepository.save(resourceDictionary);\r
144         }\r
145 \r
146         return resourceDictionary;\r
147     }\r
148 \r
149     /**\r
150      * This is a deleteResourceDictionary service\r
151      *\r
152      * @param name name\r
153      */\r
154     public void deleteResourceDictionary(String name) {\r
155         Preconditions.checkArgument(StringUtils.isNotBlank(name), "Resource dictionary Name Information is missing.");\r
156         resourceDictionaryRepository.deleteByName(name);\r
157     }\r
158 \r
159     /**\r
160      * This is a getResourceSourceMapping service\r
161      */\r
162     public ResourceSourceMapping getResourceSourceMapping() {\r
163         return ResourceSourceMappingFactory.INSTANCE.getRegisterSourceMapping();\r
164     }\r
165 }\r