2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2020 AT&T Intellectual Property. All rights
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END============================================
20 * ===================================================================
24 package org.onap.clamp.tosca;
26 import com.google.common.collect.Sets;
27 import java.util.List;
29 import javax.persistence.EntityNotFoundException;
30 import org.onap.clamp.clds.service.SecureServiceBase;
31 import org.springframework.beans.factory.annotation.Autowired;
32 import org.springframework.stereotype.Service;
35 public class DictionaryService extends SecureServiceBase {
37 private final DictionaryRepository dictionaryRepository;
38 private final DictionaryElementsRepository dictionaryElementsRepository;
44 public DictionaryService(DictionaryRepository dictionaryRepository,
45 DictionaryElementsRepository dictionaryElementsRepository) {
46 this.dictionaryRepository = dictionaryRepository;
47 this.dictionaryElementsRepository = dictionaryElementsRepository;
51 public Dictionary saveOrUpdateDictionary(Dictionary dictionary) {
52 return dictionaryRepository.save(dictionary);
56 * Creates or Updates Dictionary Element.
58 * @param dictionaryName The Dictionary name
59 * @param dictionary The Dictionary object with dictionary elements
60 * @return updated Dictionary object with all dictionary elements
62 public Dictionary saveOrUpdateDictionaryElement(String dictionaryName, Dictionary dictionary) {
63 Dictionary dict = getDictionary(dictionaryName);
65 Set<DictionaryElement> newDictionaryElements = dictionary.getDictionaryElements();
67 for (DictionaryElement dictionaryElement : newDictionaryElements) {
68 if (dict.getDictionaryElements().contains(dictionaryElement)) {
69 // Update the Dictionary Element
70 getAndUpdateDictionaryElement(dict, dictionaryElement);
72 // Create the Dictionary Element
73 dict.addDictionaryElements(getAndUpdateDictionaryElement(dict, dictionaryElement));
74 dictionaryRepository.save(dict);
78 // Fetch again to get Dictionary with most recent updates.
79 return dictionaryRepository.findById(dictionaryName).orElseThrow(
80 () -> new EntityNotFoundException("Couldn't find Dictionary named: " + dictionaryName));
84 private DictionaryElement getAndUpdateDictionaryElement(Dictionary dictionary,
85 DictionaryElement element) {
86 return dictionaryElementsRepository
87 .save(dictionaryElementsRepository.findById(element.getShortName())
88 .map(p -> updateDictionaryElement(p, element, dictionary))
89 .orElse(new DictionaryElement(element.getName(), element.getShortName(),
90 element.getDescription(), element.getType(), element.getSubDictionary(),
91 Sets.newHashSet(dictionary))));
94 public void deleteDictionary(Dictionary dictionary) {
95 dictionaryRepository.delete(dictionary);
98 public void deleteDictionary(String dictionaryName) {
99 dictionaryRepository.deleteById(dictionaryName);
102 public List<Dictionary> getAllDictionaries() {
103 return dictionaryRepository.findAll();
106 public List<String> getAllSecondaryLevelDictionaryNames() {
107 return dictionaryRepository.getAllSecondaryLevelDictionaryNames();
110 public Dictionary getDictionary(String dictionaryName) {
111 return dictionaryRepository.findById(dictionaryName).orElseThrow(
112 () -> new EntityNotFoundException("Couldn't find Dictionary named: " + dictionaryName));
116 * Deletes a dictionary element from Dictionary by shortName.
118 * @param dictionaryName The dictionary name
119 * @param dictionaryElementShortName the dictionary Element Short name
121 public void deleteDictionaryElement(String dictionaryName, String dictionaryElementShortName) {
122 if (dictionaryRepository.existsById(dictionaryName)) {
123 DictionaryElement element =
124 dictionaryElementsRepository.findById(dictionaryElementShortName).orElse(null);
125 if (element != null) {
126 Dictionary dict = getDictionary(dictionaryName);
127 dict.removeDictionaryElement(element);
128 dictionaryRepository.save(dict);
133 private DictionaryElement updateDictionaryElement(DictionaryElement oldDictionaryElement,
134 DictionaryElement newDictionaryElement, Dictionary dictionary) {
135 oldDictionaryElement.setName(newDictionaryElement.getName());
136 oldDictionaryElement.setDescription(newDictionaryElement.getDescription());
137 oldDictionaryElement.setType(newDictionaryElement.getType());
138 oldDictionaryElement.setSubDictionary(newDictionaryElement.getSubDictionary());
139 oldDictionaryElement.getUsedByDictionaries().add(dictionary);
140 return oldDictionaryElement;