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.VendorSoftwareProductConstants;
35 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao;
36 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
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.*;
41 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
42 import org.openecomp.sdc.vendorsoftwareproduct.services.schemagenerator.SchemaGenerator;
43 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
44 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
45 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
46 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
47 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
48 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.NetworkType;
49 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
50 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NicCompositionSchemaInput;
51 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
52 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
53 import org.openecomp.sdc.versioning.VersioningUtil;
54 import org.openecomp.sdc.versioning.dao.types.Version;
56 import java.util.Collection;
58 import java.util.stream.Collectors;
60 public class NicManagerImpl implements NicManager {
61 private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
63 private NicDao nicDao;
64 private CompositionEntityDataManager compositionEntityDataManager;
65 private NetworkManager networkManager;
66 private VendorSoftwareProductInfoDao vspInfoDao;
68 public NicManagerImpl(NicDao nicDao,
69 CompositionEntityDataManager compositionEntityDataManager,
70 NetworkManager networkManager,
71 VendorSoftwareProductInfoDao vspInfoDao) {
73 this.compositionEntityDataManager = compositionEntityDataManager;
74 this.networkManager = networkManager;
75 this.vspInfoDao = vspInfoDao;
79 public Collection<NicEntity> listNics(String vspId, Version version, String componentId,
81 mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
83 Collection<NicEntity> nics = nicDao.list(new NicEntity(vspId, version, componentId, null));
85 if (!nics.isEmpty()) {
86 Map<String, String> networksNameById = listNetworksNameById(vspId, version, user);
87 nics.forEach(nicEntity -> {
88 Nic nic = nicEntity.getNicCompositionData();
89 nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
90 nicEntity.setNicCompositionData(nic);
94 mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
99 private Map<String, String> listNetworksNameById(String vspId, Version version, String user) {
100 Collection<NetworkEntity> networks = networkManager.listNetworks(vspId, version, user);
101 return networks.stream().collect(Collectors.toMap(NetworkEntity::getId,
102 networkEntity -> networkEntity.getNetworkCompositionData().getName()));
106 public NicEntity createNic(NicEntity nic, String user) {
107 NicEntity createdNic = null;
108 mdcDataDebugMessage.debugEntryMessage("VSP id, component id", nic.getVspId(),
109 nic.getComponentId());
111 if (!vspInfoDao.isManual(nic.getVspId(), nic.getVersion())) {
112 ErrorCode onboardingMethodUpdateErrorCode = NotSupportedHeatOnboardMethodErrorBuilder
113 .getAddNicNotSupportedHeatOnboardMethodErrorBuilder();
114 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
115 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
116 LoggerErrorCode.PERMISSION_ERROR.getErrorCode(),
117 onboardingMethodUpdateErrorCode.message());
118 throw new CoreException(onboardingMethodUpdateErrorCode);
120 validateNic(nic, user);
121 createdNic = createNic(nic);
124 //nicDao.updateVspLatestModificationTime(nic.getVspId(), nic.getVersion());
127 .debugExitMessage("VSP id, component id", nic.getVspId(), nic.getComponentId());
132 private NicEntity createNic(NicEntity nic) {
133 return compositionEntityDataManager.createNic(nic);
136 private void validateNic(NicEntity nic, String user) {
137 Collection<NicEntity> listNics = listNics(nic.getVspId(), nic.getVersion(), nic
138 .getComponentId(), user);
139 String networkId = nic.getNicCompositionData().getNetworkId();
140 NetworkType networkType = nic.getNicCompositionData().getNetworkType();
141 String networkDescription = nic.getNicCompositionData().getNetworkDescription();
143 if(!nic.getNicCompositionData().getName().matches(VendorSoftwareProductConstants.NAME_PATTERN))
145 ErrorCode errorCode = NicErrorBuilder.getNicNameFormatErrorBuilder(nic
146 .getNicCompositionData().getName(), VendorSoftwareProductConstants.NAME_PATTERN);
148 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
149 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
150 errorCode.id(),errorCode.message());
152 throw new CoreException(errorCode);
155 listNics.forEach(nicEntity -> {
156 Nic nicdata = nicEntity.getNicCompositionData();
157 if (nic.getNicCompositionData().getName().equalsIgnoreCase(nicdata.getName())) {
158 final ErrorCode duplicateNicInComponentErrorBuilder =
159 new DuplicateNicInComponentErrorBuilder(nic.getNicCompositionData().getName(),
160 nic.getComponentId()).build();
161 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
162 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
163 LoggerErrorCode.DATA_ERROR.getErrorCode(),
164 duplicateNicInComponentErrorBuilder.message());
165 throw new CoreException(duplicateNicInComponentErrorBuilder);
170 if (networkType.equals(NetworkType.Internal)) {
171 if (!(networkId == null || networkId.equals(""))) {
172 //NetworkEntity ne = getNetwork(nic.getVspId(), activeVersion, networkId);
173 final CompositionEntityResponse<Network> network =
174 networkManager.getNetwork(nic.getVspId(), nic.getVersion(), networkId,
178 if (!(networkDescription == null || networkDescription.equals(""))) {
179 final ErrorCode nicNetworkDescriptionErrorBuilder =
180 new NicInternalNetworkErrorBuilder()
181 .getNetworkDescriptionInternalNetworkErrorBuilder();
182 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
183 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
184 LoggerErrorCode.DATA_ERROR.getErrorCode(), nicNetworkDescriptionErrorBuilder.message());
185 throw new CoreException(nicNetworkDescriptionErrorBuilder);
188 } else if (networkType.equals(NetworkType.External)) {
189 if (!(networkId == null || networkId.equals(""))) {
190 final ErrorCode nicNetworkIdNotAllowedExternalNetworkErrorBuilder =
191 new NicNetworkIdNotAllowedExternalNetworkErrorBuilder().build();
192 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
193 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
194 LoggerErrorCode.DATA_ERROR.getErrorCode(),
195 nicNetworkIdNotAllowedExternalNetworkErrorBuilder.message());
196 throw new CoreException(nicNetworkIdNotAllowedExternalNetworkErrorBuilder);
202 public CompositionEntityResponse<Nic> getNic(String vspId, Version version, String componentId,
203 String nicId, String user) {
205 .debugEntryMessage("VSP id, component id, nic id", vspId, componentId, nicId);
207 NicEntity nicEntity = getNic(vspId, version, componentId, nicId);
208 Nic nic = nicEntity.getNicCompositionData();
210 NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
211 schemaInput.setManual(vspInfoDao.isManual(vspId, version));
212 schemaInput.setNic(nic);
213 Map<String, String> networksNameById = listNetworksNameById(vspId, version, user);
214 nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
215 schemaInput.setNetworkIds(networksNameById.keySet());
217 CompositionEntityResponse<Nic> response = new CompositionEntityResponse<>();
218 response.setId(nicId);
219 response.setData(nic);
220 response.setSchema(getNicCompositionSchema(schemaInput));
223 .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
229 private NicEntity getNic(String vspId, Version version, String componentId, String nicId) {
230 NicEntity retrieved = nicDao.get(new NicEntity(vspId, version, componentId, nicId));
232 .validateEntityExistence(retrieved, new NicEntity(vspId, version, componentId, nicId),
233 VspDetails.ENTITY_TYPE);
238 public void deleteNic(String vspId, Version version, String componentId, String nicId,
241 .debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
243 if (!vspInfoDao.isManual(vspId, version)) {
244 final ErrorCode deleteNicErrorBuilder =
245 new DeleteNicErrorBuilder().getDeleteNicForHeatOnboardedVspErrorBuilder();
246 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
247 LoggerTragetServiceName.DELETE_NIC, ErrorLevel.ERROR.name(),
248 LoggerErrorCode.PERMISSION_ERROR.getErrorCode(),
249 deleteNicErrorBuilder.message());
250 throw new CoreException(deleteNicErrorBuilder);
253 NicEntity nicEntity = getNic(vspId, version, componentId, nicId);
254 if (nicEntity != null) {
255 nicDao.delete(nicEntity);
259 .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
263 public CompositionEntityValidationData updateNic(NicEntity nic, String user) {
265 .debugEntryMessage("VSP id, component id", nic.getVspId(), nic.getComponentId(),
268 NicEntity retrieved =
269 getNic(nic.getVspId(), nic.getVersion(), nic.getComponentId(), nic.getId());
271 NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
272 schemaInput.setManual(vspInfoDao.isManual(nic.getVspId(), nic.getVersion()));
273 schemaInput.setNic(retrieved.getNicCompositionData());
275 if(schemaInput.isManual() && !nic.getNicCompositionData().getName().matches(VendorSoftwareProductConstants.NAME_PATTERN))
277 ErrorCode errorCode = NicErrorBuilder.getNicNameFormatErrorBuilder(nic
278 .getNicCompositionData().getName(), VendorSoftwareProductConstants.NAME_PATTERN);
280 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
281 LoggerTragetServiceName.UPDATE_NIC, ErrorLevel.ERROR.name(),
282 errorCode.id(),errorCode.message());
284 throw new CoreException(errorCode);
287 CompositionEntityValidationData validationData = compositionEntityDataManager
288 .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
289 if (CollectionUtils.isEmpty(validationData.getErrors())) {
293 //nicDao.updateVspLatestModificationTime(nic.getVspId(), nic.getVersion());
296 .debugExitMessage("VSP id, component id", nic.getVspId(), nic.getComponentId(),
299 return validationData;
303 public QuestionnaireResponse getNicQuestionnaire(String vspId, Version version,
304 String componentId, String nicId, String user) {
306 .debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
308 QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
309 NicEntity nicQuestionnaire = nicDao.getQuestionnaireData(vspId, version, componentId, nicId);
310 VersioningUtil.validateEntityExistence(nicQuestionnaire,
311 new NicEntity(vspId, version, componentId, nicId), VspDetails.ENTITY_TYPE);
313 questionnaireResponse.setData(nicQuestionnaire.getQuestionnaireData());
314 questionnaireResponse.setSchema(getNicQuestionnaireSchema(null));
317 .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
319 return questionnaireResponse;
323 public void updateNicQuestionnaire(String vspId, Version version, String componentId,
324 String nicId, String questionnaireData, String user) {
325 mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
327 getNic(vspId, version, componentId, nicId);
329 nicDao.updateQuestionnaireData(vspId, version, componentId, nicId, questionnaireData);
331 //nicDao.updateVspLatestModificationTime(vspId, version);
333 mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId, nicId);
336 protected String getNicQuestionnaireSchema(SchemaTemplateInput schemaInput) {
337 return SchemaGenerator
338 .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, schemaInput);
341 protected String getNicCompositionSchema(NicCompositionSchemaInput schemaInput) {
342 return SchemaGenerator
343 .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, schemaInput);
345 // todo *************************** move to reusable place! *************************
347 /*private boolean isManual(String vspId, Version version) {