2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.vendorsoftwareproduct.impl;
23 import org.apache.commons.collections4.CollectionUtils;
24 import org.openecomp.sdc.common.errors.CoreException;
25 import org.openecomp.sdc.common.errors.ErrorCode;
26 import org.openecomp.sdc.datatypes.error.ErrorLevel;
27 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
28 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
29 import org.openecomp.sdc.logging.types.LoggerConstants;
30 import org.openecomp.sdc.logging.types.LoggerErrorCode;
31 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
32 import org.openecomp.sdc.vendorsoftwareproduct.NetworkManager;
33 import org.openecomp.sdc.vendorsoftwareproduct.NicManager;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao;
35 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
36 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
37 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
38 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
39 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
40 import org.openecomp.sdc.vendorsoftwareproduct.errors.CompositionEditNotAllowedErrorBuilder;
41 import org.openecomp.sdc.vendorsoftwareproduct.errors.DeleteNicErrorBuilder;
42 import org.openecomp.sdc.vendorsoftwareproduct.errors.DuplicateNicInComponentErrorBuilder;
43 import org.openecomp.sdc.vendorsoftwareproduct.errors.NicInternalNetworkErrorBuilder;
44 import org.openecomp.sdc.vendorsoftwareproduct.errors.NicNetworkIdNotAllowedExternalNetworkErrorBuilder;
45 import org.openecomp.sdc.vendorsoftwareproduct.errors.NotSupportedHeatOnboardMethodErrorBuilder;
46 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
47 import org.openecomp.sdc.vendorsoftwareproduct.services.schemagenerator.SchemaGenerator;
48 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
49 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
50 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
51 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
52 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
53 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.NetworkType;
54 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
55 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NicCompositionSchemaInput;
56 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
57 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
58 import org.openecomp.sdc.vendorsoftwareproduct.utils.VendorSoftwareProductUtils;
59 import org.openecomp.sdc.versioning.VersioningUtil;
60 import org.openecomp.sdc.versioning.dao.types.Version;
62 import java.util.Collection;
64 import java.util.stream.Collectors;
66 public class NicManagerImpl implements NicManager {
67 private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
69 private NicDao nicDao;
70 private CompositionEntityDataManager compositionEntityDataManager;
71 private NetworkManager networkManager;
72 private VendorSoftwareProductInfoDao vspInfoDao;
74 public NicManagerImpl(NicDao nicDao,
75 CompositionEntityDataManager compositionEntityDataManager,
76 NetworkManager networkManager,
77 VendorSoftwareProductInfoDao vspInfoDao) {
79 this.compositionEntityDataManager = compositionEntityDataManager;
80 this.networkManager = networkManager;
81 this.vspInfoDao = vspInfoDao;
85 public Collection<NicEntity> listNics(String vspId, Version version, String componentId,
87 mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
89 Collection<NicEntity> nics = nicDao.list(new NicEntity(vspId, version, componentId, null));
91 if (!nics.isEmpty()) {
92 Map<String, String> networksNameById = listNetworksNameById(vspId, version, user);
93 nics.forEach(nicEntity -> {
94 Nic nic = nicEntity.getNicCompositionData();
95 nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
96 nicEntity.setNicCompositionData(nic);
100 mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
105 private Map<String, String> listNetworksNameById(String vspId, Version version, String user) {
106 Collection<NetworkEntity> networks = networkManager.listNetworks(vspId, version, user);
107 return networks.stream().collect(Collectors.toMap(NetworkEntity::getId,
108 networkEntity -> networkEntity.getNetworkCompositionData().getName()));
112 public NicEntity createNic(NicEntity nic, String user) {
113 NicEntity createdNic = null;
114 mdcDataDebugMessage.debugEntryMessage("VSP id, component id", nic.getVspId(),
115 nic.getComponentId());
117 if (!vspInfoDao.isManual(nic.getVspId(), nic.getVersion())) {
118 ErrorCode onboardingMethodUpdateErrorCode = NotSupportedHeatOnboardMethodErrorBuilder
119 .getAddNicNotSupportedHeatOnboardMethodErrorBuilder();
120 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
121 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
122 LoggerErrorCode.PERMISSION_ERROR.getErrorCode(),
123 onboardingMethodUpdateErrorCode.message());
124 throw new CoreException(onboardingMethodUpdateErrorCode);
126 validateNic(nic, user);
127 createdNic = createNic(nic);
130 //nicDao.updateVspLatestModificationTime(nic.getVspId(), nic.getVersion());
133 .debugExitMessage("VSP id, component id", nic.getVspId(), nic.getComponentId());
138 private NicEntity createNic(NicEntity nic) {
139 return compositionEntityDataManager.createNic(nic);
142 private void validateNic(NicEntity nic, String user) {
143 Collection<NicEntity> listNics = listNics(nic.getVspId(), nic.getVersion(), nic
144 .getComponentId(), user);
145 String networkId = nic.getNicCompositionData().getNetworkId();
146 NetworkType networkType = nic.getNicCompositionData().getNetworkType();
147 String networkDescription = nic.getNicCompositionData().getNetworkDescription();
148 listNics.forEach(nicEntity -> {
149 Nic nicdata = nicEntity.getNicCompositionData();
150 if (nic.getNicCompositionData().getName().equalsIgnoreCase(nicdata.getName())) {
151 final ErrorCode duplicateNicInComponentErrorBuilder =
152 new DuplicateNicInComponentErrorBuilder(nic.getNicCompositionData().getName(),
153 nic.getComponentId()).build();
154 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
155 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
156 LoggerErrorCode.DATA_ERROR.getErrorCode(),
157 duplicateNicInComponentErrorBuilder.message());
158 throw new CoreException(duplicateNicInComponentErrorBuilder);
163 if (networkType.equals(NetworkType.Internal)) {
164 if (!(networkId == null || networkId.equals(""))) {
165 //NetworkEntity ne = getNetwork(nic.getVspId(), activeVersion, networkId);
166 final CompositionEntityResponse<Network> network =
167 networkManager.getNetwork(nic.getVspId(), nic.getVersion(), networkId,
171 if (!(networkDescription == null || networkDescription.equals(""))) {
172 final ErrorCode nicNetworkDescriptionErrorBuilder =
173 new NicInternalNetworkErrorBuilder()
174 .getNetworkDescriptionInternalNetworkErrorBuilder();
175 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
176 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
177 LoggerErrorCode.DATA_ERROR.getErrorCode(), nicNetworkDescriptionErrorBuilder.message());
178 throw new CoreException(nicNetworkDescriptionErrorBuilder);
181 } else if (networkType.equals(NetworkType.External)) {
182 if (!(networkId == null || networkId.equals(""))) {
183 final ErrorCode nicNetworkIdNotAllowedExternalNetworkErrorBuilder =
184 new NicNetworkIdNotAllowedExternalNetworkErrorBuilder().build();
185 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
186 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
187 LoggerErrorCode.DATA_ERROR.getErrorCode(),
188 nicNetworkIdNotAllowedExternalNetworkErrorBuilder.message());
189 throw new CoreException(nicNetworkIdNotAllowedExternalNetworkErrorBuilder);
195 public CompositionEntityResponse<Nic> getNic(String vspId, Version version, String componentId,
196 String nicId, String user) {
198 .debugEntryMessage("VSP id, component id, nic id", vspId, componentId, nicId);
200 NicEntity nicEntity = getNic(vspId, version, componentId, nicId);
201 Nic nic = nicEntity.getNicCompositionData();
203 NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
204 schemaInput.setManual(vspInfoDao.isManual(vspId, version));
205 schemaInput.setNic(nic);
206 Map<String, String> networksNameById = listNetworksNameById(vspId, version, user);
207 nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
208 schemaInput.setNetworkIds(networksNameById.keySet());
210 CompositionEntityResponse<Nic> response = new CompositionEntityResponse<>();
211 response.setId(nicId);
212 response.setData(nic);
213 response.setSchema(getNicCompositionSchema(schemaInput));
216 .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
222 private NicEntity getNic(String vspId, Version version, String componentId, String nicId) {
223 NicEntity retrieved = nicDao.get(new NicEntity(vspId, version, componentId, nicId));
225 .validateEntityExistence(retrieved, new NicEntity(vspId, version, componentId, nicId),
226 VspDetails.ENTITY_TYPE);
231 public void deleteNic(String vspId, Version version, String componentId, String nicId,
234 .debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
236 if (!vspInfoDao.isManual(vspId, version)) {
237 final ErrorCode deleteNicErrorBuilder =
238 new DeleteNicErrorBuilder().getDeleteNicForHeatOnboardedVspErrorBuilder();
239 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
240 LoggerTragetServiceName.DELETE_NIC, ErrorLevel.ERROR.name(),
241 LoggerErrorCode.PERMISSION_ERROR.getErrorCode(),
242 deleteNicErrorBuilder.message());
243 throw new CoreException(deleteNicErrorBuilder);
246 NicEntity nicEntity = getNic(vspId, version, componentId, nicId);
247 if (nicEntity != null) {
248 nicDao.delete(nicEntity);
252 .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
256 public CompositionEntityValidationData updateNic(NicEntity nic, String user) {
258 .debugEntryMessage("VSP id, component id", nic.getVspId(), nic.getComponentId(),
261 NicEntity retrieved =
262 getNic(nic.getVspId(), nic.getVersion(), nic.getComponentId(), nic.getId());
264 NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
265 schemaInput.setManual(vspInfoDao.isManual(nic.getVspId(), nic.getVersion()));
266 schemaInput.setNic(retrieved.getNicCompositionData());
268 CompositionEntityValidationData validationData = compositionEntityDataManager
269 .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
270 if (CollectionUtils.isEmpty(validationData.getErrors())) {
274 //nicDao.updateVspLatestModificationTime(nic.getVspId(), nic.getVersion());
277 .debugExitMessage("VSP id, component id", nic.getVspId(), nic.getComponentId(),
280 return validationData;
284 public QuestionnaireResponse getNicQuestionnaire(String vspId, Version version,
285 String componentId, String nicId, String user) {
287 .debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
289 QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
290 NicEntity nicQuestionnaire = nicDao.getQuestionnaireData(vspId, version, componentId, nicId);
291 VersioningUtil.validateEntityExistence(nicQuestionnaire,
292 new NicEntity(vspId, version, componentId, nicId), VspDetails.ENTITY_TYPE);
294 questionnaireResponse.setData(nicQuestionnaire.getQuestionnaireData());
295 questionnaireResponse.setSchema(getNicQuestionnaireSchema(null));
298 .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
300 return questionnaireResponse;
304 public void updateNicQuestionnaire(String vspId, Version version, String componentId,
305 String nicId, String questionnaireData, String user) {
306 mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
308 getNic(vspId, version, componentId, nicId);
310 nicDao.updateQuestionnaireData(vspId, version, componentId, nicId, questionnaireData);
312 //nicDao.updateVspLatestModificationTime(vspId, version);
314 mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId, nicId);
317 protected String getNicQuestionnaireSchema(SchemaTemplateInput schemaInput) {
318 return SchemaGenerator
319 .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, schemaInput);
322 protected String getNicCompositionSchema(NicCompositionSchemaInput schemaInput) {
323 return SchemaGenerator
324 .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, schemaInput);
326 // todo *************************** move to reusable place! *************************
328 /*private boolean isManual(String vspId, Version version) {