2 * Copyright © 2017-2018 AT&T Intellectual Property.
\r
3 * Modifications Copyright © 2018 IBM.
\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
9 * http://www.apache.org/licenses/LICENSE-2.0
\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
18 package org.onap.ccsdk.apps.controllerblueprints.service;
\r
20 import com.att.eelf.configuration.EELFLogger;
\r
21 import com.att.eelf.configuration.EELFManager;
\r
22 import com.google.common.base.Preconditions;
\r
23 import org.apache.commons.collections.CollectionUtils;
\r
24 import org.apache.commons.lang3.StringUtils;
\r
25 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;
\r
26 import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition;
\r
27 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment;
\r
28 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition;
\r
29 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.utils.ResourceDictionaryUtils;
\r
30 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ResourceDictionary;
\r
31 import org.onap.ccsdk.apps.controllerblueprints.service.model.AutoMapResponse;
\r
32 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ResourceDictionaryRepository;
\r
33 import org.springframework.stereotype.Service;
\r
35 import java.util.ArrayList;
\r
36 import java.util.HashMap;
\r
37 import java.util.List;
\r
38 import java.util.Map;
\r
41 * AutoResourceMappingService.java Purpose: Provide Automapping of Resource Assignments AutoResourceMappingService
\r
43 * @author Brinda Santh
\r
48 @SuppressWarnings("unused")
\r
49 public class AutoResourceMappingService {
\r
51 private static EELFLogger log = EELFManager.getInstance().getLogger(AutoResourceMappingService.class);
\r
53 private ResourceDictionaryRepository dataDictionaryRepository;
\r
56 * This is a AutoResourceMappingService constructor
\r
58 * @param dataDictionaryRepository dataDictionaryRepository
\r
60 public AutoResourceMappingService(ResourceDictionaryRepository dataDictionaryRepository) {
\r
61 this.dataDictionaryRepository = dataDictionaryRepository;
\r
65 * This is a autoMap service to map the template keys automatically to Dictionary fields.
\r
67 * @param resourceAssignments resourceAssignments
\r
68 * @return AutoMapResponse
\r
70 public AutoMapResponse autoMap(List<ResourceAssignment> resourceAssignments) throws BluePrintException {
\r
71 AutoMapResponse autoMapResponse = new AutoMapResponse();
\r
73 if (CollectionUtils.isNotEmpty(resourceAssignments)) {
\r
75 // Create the Dictionary definitions for the ResourceAssignment Names
\r
76 Map<String, ResourceDictionary> dictionaryMap = getDictionaryDefinitions(resourceAssignments);
\r
78 for (ResourceAssignment resourceAssignment : resourceAssignments) {
\r
79 if (resourceAssignment != null && StringUtils.isNotBlank(resourceAssignment.getName())
\r
80 && StringUtils.isBlank(resourceAssignment.getDictionaryName())) {
\r
82 populateDictionaryMapping(dictionaryMap, resourceAssignment);
\r
84 log.info("Mapped Resource : {}", resourceAssignment);
\r
89 List<ResourceDictionary> dictionaries = getDictionaryDefinitionsList(resourceAssignments);
\r
90 List<ResourceAssignment> resourceAssignmentsFinal = getAllAutomapResourceAssignments(resourceAssignments);
\r
91 autoMapResponse.setDataDictionaries(dictionaries);
\r
92 autoMapResponse.setResourceAssignments(resourceAssignmentsFinal);
\r
93 } catch (Exception e) {
\r
94 log.error(String.format("Failed in auto process %s", e.getMessage()));
\r
95 throw new BluePrintException(e.getMessage(), e);
\r
97 return autoMapResponse;
\r
100 private void populateDictionaryMapping(Map<String, ResourceDictionary> dictionaryMap, ResourceAssignment resourceAssignment) {
\r
101 ResourceDictionary dbDataDictionary = dictionaryMap.get(resourceAssignment.getName());
\r
102 if (dbDataDictionary != null && dbDataDictionary.getDefinition() != null) {
\r
104 ResourceDefinition dictionaryDefinition = dbDataDictionary.getDefinition();
\r
106 if (dictionaryDefinition != null && StringUtils.isNotBlank(dictionaryDefinition.getName())
\r
107 && StringUtils.isBlank(resourceAssignment.getDictionaryName())) {
\r
109 resourceAssignment.setDictionaryName(dbDataDictionary.getName());
\r
110 ResourceDictionaryUtils.populateSourceMapping(resourceAssignment, dictionaryDefinition);
\r
115 private Map<String, ResourceDictionary> getDictionaryDefinitions(List<ResourceAssignment> resourceAssignments) {
\r
116 Map<String, ResourceDictionary> dictionaryMap = new HashMap<>();
\r
117 List<String> names = new ArrayList<>();
\r
118 for (ResourceAssignment resourceAssignment : resourceAssignments) {
\r
119 if (resourceAssignment != null && StringUtils.isNotBlank(resourceAssignment.getName())) {
\r
120 names.add(resourceAssignment.getName());
\r
123 if (CollectionUtils.isNotEmpty(names)) {
\r
125 List<ResourceDictionary> dictionaries = dataDictionaryRepository.findByNameIn(names);
\r
126 if (CollectionUtils.isNotEmpty(dictionaries)) {
\r
127 for (ResourceDictionary dataDictionary : dictionaries) {
\r
128 if (dataDictionary != null && StringUtils.isNotBlank(dataDictionary.getName())) {
\r
129 dictionaryMap.put(dataDictionary.getName(), dataDictionary);
\r
134 return dictionaryMap;
\r
138 private List<ResourceDictionary> getDictionaryDefinitionsList(List<ResourceAssignment> resourceAssignments) {
\r
139 List<ResourceDictionary> dictionaries = null;
\r
140 List<String> names = new ArrayList<>();
\r
141 for (ResourceAssignment resourceAssignment : resourceAssignments) {
\r
142 if (resourceAssignment != null && StringUtils.isNotBlank(resourceAssignment.getDictionaryName())) {
\r
144 if (!names.contains(resourceAssignment.getDictionaryName())) {
\r
145 names.add(resourceAssignment.getDictionaryName());
\r
148 if (resourceAssignment.getDependencies() != null && !resourceAssignment.getDependencies().isEmpty()) {
\r
149 List<String> dependencyNames = resourceAssignment.getDependencies();
\r
150 for (String dependencyName : dependencyNames) {
\r
151 if (StringUtils.isNotBlank(dependencyName) && !names.contains(dependencyName)) {
\r
152 names.add(dependencyName);
\r
158 if (CollectionUtils.isNotEmpty(names)) {
\r
159 dictionaries = dataDictionaryRepository.findByNameIn(names);
\r
161 return dictionaries;
\r
165 private List<ResourceAssignment> getAllAutomapResourceAssignments(List<ResourceAssignment> resourceAssignments) {
\r
166 List<ResourceDictionary> dictionaries = null;
\r
167 List<String> names = new ArrayList<>();
\r
168 for (ResourceAssignment resourceAssignment : resourceAssignments) {
\r
169 if (resourceAssignment != null && StringUtils.isNotBlank(resourceAssignment.getDictionaryName())) {
\r
170 if (resourceAssignment.getDependencies() != null && !resourceAssignment.getDependencies().isEmpty()) {
\r
171 List<String> dependencieNames = resourceAssignment.getDependencies();
\r
172 for (String dependencieName : dependencieNames) {
\r
173 if (StringUtils.isNotBlank(dependencieName) && !names.contains(dependencieName)
\r
174 && !checkAssignmentsExists(resourceAssignments, dependencieName)) {
\r
175 names.add(dependencieName);
\r
182 if (!names.isEmpty()) {
\r
183 dictionaries = dataDictionaryRepository.findByNameIn(names);
\r
185 if (dictionaries != null) {
\r
186 for (ResourceDictionary resourcedictionary : dictionaries) {
\r
187 ResourceDefinition dictionaryDefinition = resourcedictionary.getDefinition();
\r
188 Preconditions.checkNotNull(dictionaryDefinition, "failed to get Resource Definition from dictionary definition");
\r
189 PropertyDefinition property = new PropertyDefinition();
\r
190 property.setRequired(true);
\r
191 ResourceAssignment resourceAssignment = new ResourceAssignment();
\r
192 resourceAssignment.setName(resourcedictionary.getName());
\r
193 resourceAssignment.setDictionaryName(resourcedictionary
\r
195 resourceAssignment.setVersion(0);
\r
196 resourceAssignment.setProperty(property);
\r
197 ResourceDictionaryUtils.populateSourceMapping(resourceAssignment, dictionaryDefinition);
\r
198 resourceAssignments.add(resourceAssignment);
\r
201 return resourceAssignments;
\r
206 private boolean checkAssignmentsExists(List<ResourceAssignment> resourceAssignmentsWithDepencies, String resourceName) {
\r
207 return resourceAssignmentsWithDepencies.stream().anyMatch(names -> names.getName().equalsIgnoreCase(resourceName));
\r