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.springframework.beans.factory.annotation.Autowired;
31 import org.springframework.stereotype.Service;
34 public class DictionaryService {
36 private final DictionaryRepository dictionaryRepository;
37 private final DictionaryElementsRepository dictionaryElementsRepository;
43 public DictionaryService(DictionaryRepository dictionaryRepository,
44 DictionaryElementsRepository dictionaryElementsRepository) {
45 this.dictionaryRepository = dictionaryRepository;
46 this.dictionaryElementsRepository = dictionaryElementsRepository;
50 public Dictionary saveOrUpdateDictionary(Dictionary dictionary) {
51 return dictionaryRepository.save(dictionary);
55 * Creates or Updates Dictionary Element.
57 * @param dictionaryName The Dictionary name
58 * @param dictionary The Dictionary object with dictionary elements
59 * @return updated Dictionary object with all dictionary elements
61 public Dictionary saveOrUpdateDictionaryElement(String dictionaryName, Dictionary dictionary) {
62 Dictionary dict = getDictionary(dictionaryName);
64 Set<DictionaryElement> newDictionaryElements = dictionary.getDictionaryElements();
66 for (DictionaryElement dictionaryElement : newDictionaryElements) {
67 if (dict.getDictionaryElements().contains(dictionaryElement)) {
68 // Update the Dictionary Element
69 getAndUpdateDictionaryElement(dict, dictionaryElement);
71 // Create the Dictionary Element
72 dict.addDictionaryElements(getAndUpdateDictionaryElement(dict, dictionaryElement));
73 dictionaryRepository.save(dict);
77 // Fetch again to get Dictionary with most recent updates.
78 return dictionaryRepository.findById(dictionaryName).orElseThrow(
79 () -> new EntityNotFoundException("Couldn't find Dictionary named: " + dictionaryName));
83 private DictionaryElement getAndUpdateDictionaryElement(Dictionary dictionary,
84 DictionaryElement element) {
85 return dictionaryElementsRepository
86 .save(dictionaryElementsRepository.findById(element.getShortName())
87 .map(p -> updateDictionaryElement(p, element, dictionary))
88 .orElse(new DictionaryElement(element.getName(), element.getShortName(),
89 element.getDescription(), element.getType(), element.getSubDictionary(),
90 Sets.newHashSet(dictionary))));
93 public void deleteDictionary(Dictionary dictionary) {
94 dictionaryRepository.delete(dictionary);
97 public void deleteDictionary(String dictionaryName) {
98 dictionaryRepository.deleteById(dictionaryName);
101 public List<Dictionary> getAllDictionaries() {
102 return dictionaryRepository.findAll();
105 public List<String> getAllSecondaryLevelDictionaryNames() {
106 return dictionaryRepository.getAllSecondaryLevelDictionaryNames();
109 public Dictionary getDictionary(String dictionaryName) {
110 return dictionaryRepository.findById(dictionaryName).orElseThrow(
111 () -> new EntityNotFoundException("Couldn't find Dictionary named: " + dictionaryName));
115 * Deletes a dictionary element from Dictionary by shortName.
117 * @param dictionaryName The dictionary name
118 * @param dictionaryElementShortName the dictionary Element Short name
120 public void deleteDictionaryElement(String dictionaryName, String dictionaryElementShortName) {
121 if (dictionaryRepository.existsById(dictionaryName)) {
122 DictionaryElement element =
123 dictionaryElementsRepository.findById(dictionaryElementShortName).orElse(null);
124 if (element != null) {
125 Dictionary dict = getDictionary(dictionaryName);
126 dict.removeDictionaryElement(element);
127 dictionaryRepository.save(dict);
132 private DictionaryElement updateDictionaryElement(DictionaryElement oldDictionaryElement,
133 DictionaryElement newDictionaryElement, Dictionary dictionary) {
134 oldDictionaryElement.setName(newDictionaryElement.getName());
135 oldDictionaryElement.setDescription(newDictionaryElement.getDescription());
136 oldDictionaryElement.setType(newDictionaryElement.getType());
137 oldDictionaryElement.setSubDictionary(newDictionaryElement.getSubDictionary());
138 oldDictionaryElement.getUsedByDictionaries().add(dictionary);
139 return oldDictionaryElement;