2 * Copyright © 2016-2017 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.vendorsoftwareproduct.impl;
19 import org.apache.commons.collections4.CollectionUtils;
20 import org.openecomp.sdc.common.errors.CoreException;
21 import org.openecomp.sdc.common.errors.ErrorCode;
22 import org.openecomp.sdc.datatypes.error.ErrorLevel;
23 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
24 import org.openecomp.sdc.logging.types.LoggerConstants;
25 import org.openecomp.sdc.logging.types.LoggerErrorCode;
26 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
27 import org.openecomp.sdc.vendorsoftwareproduct.NetworkManager;
28 import org.openecomp.sdc.vendorsoftwareproduct.NicManager;
29 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants;
30 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao;
31 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
32 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
33 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
35 import org.openecomp.sdc.vendorsoftwareproduct.errors.DeleteNicErrorBuilder;
36 import org.openecomp.sdc.vendorsoftwareproduct.errors.DuplicateNicInComponentErrorBuilder;
37 import org.openecomp.sdc.vendorsoftwareproduct.errors.NicErrorBuilder;
38 import org.openecomp.sdc.vendorsoftwareproduct.errors.NicInternalNetworkErrorBuilder;
39 import org.openecomp.sdc.vendorsoftwareproduct.errors.NicNetworkIdNotAllowedExternalNetworkErrorBuilder;
40 import org.openecomp.sdc.vendorsoftwareproduct.errors.NotSupportedHeatOnboardMethodErrorBuilder;
41 import org.openecomp.sdc.vendorsoftwareproduct.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.NetworkType;
48 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
49 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NicCompositionSchemaInput;
50 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
51 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
52 import org.openecomp.sdc.versioning.VersioningUtil;
53 import org.openecomp.sdc.versioning.dao.types.Version;
55 import java.util.Collection;
57 import java.util.stream.Collectors;
59 public class NicManagerImpl implements NicManager {
60 private final NicDao nicDao;
61 private final CompositionEntityDataManager compositionEntityDataManager;
62 private final NetworkManager networkManager;
63 private final VendorSoftwareProductInfoDao vspInfoDao;
65 public NicManagerImpl(NicDao nicDao,
66 CompositionEntityDataManager compositionEntityDataManager,
67 NetworkManager networkManager,
68 VendorSoftwareProductInfoDao vspInfoDao) {
70 this.compositionEntityDataManager = compositionEntityDataManager;
71 this.networkManager = networkManager;
72 this.vspInfoDao = vspInfoDao;
76 public Collection<NicEntity> listNics(String vspId, Version version, String componentId) {
77 Collection<NicEntity> nics = nicDao.list(new NicEntity(vspId, version, componentId, null));
79 if (!nics.isEmpty()) {
80 Map<String, String> networksNameById = listNetworksNameById(vspId, version);
81 nics.forEach(nicEntity -> {
82 Nic nic = nicEntity.getNicCompositionData();
83 nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
84 nicEntity.setNicCompositionData(nic);
90 private Map<String, String> listNetworksNameById(String vspId, Version version) {
91 Collection<NetworkEntity> networks = networkManager.listNetworks(vspId, version);
92 return networks.stream().collect(Collectors.toMap(NetworkEntity::getId,
93 networkEntity -> networkEntity.getNetworkCompositionData().getName()));
97 public NicEntity createNic(NicEntity nic) {
99 if (!vspInfoDao.isManual(nic.getVspId(), nic.getVersion())) {
100 ErrorCode onboardingMethodUpdateErrorCode = NotSupportedHeatOnboardMethodErrorBuilder
101 .getAddNicNotSupportedHeatOnboardMethodErrorBuilder();
102 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
103 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
104 LoggerErrorCode.PERMISSION_ERROR.getErrorCode(),
105 onboardingMethodUpdateErrorCode.message());
106 throw new CoreException(onboardingMethodUpdateErrorCode);
109 createdNic = compositionEntityDataManager.createNic(nic);
115 private void validateNic(NicEntity nic) {
116 Collection<NicEntity> listNics = listNics(nic.getVspId(), nic.getVersion(), nic
118 String networkId = nic.getNicCompositionData().getNetworkId();
119 NetworkType networkType = nic.getNicCompositionData().getNetworkType();
120 String networkDescription = nic.getNicCompositionData().getNetworkDescription();
122 if (!nic.getNicCompositionData().getName()
123 .matches(VendorSoftwareProductConstants.NAME_PATTERN)) {
124 ErrorCode errorCode = NicErrorBuilder
125 .getNicNameFormatErrorBuilder(VendorSoftwareProductConstants.NAME_PATTERN);
127 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
128 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
129 errorCode.id(),errorCode.message());
131 throw new CoreException(errorCode);
134 validateNics(nic, listNics);
136 if (networkType.equals(NetworkType.Internal)) {
137 validateInternalNetworkType(nic, networkId, networkDescription);
139 } else if (networkType.equals(NetworkType.External)
140 && !(networkId == null || networkId.isEmpty())) {
141 final ErrorCode nicNetworkIdNotAllowedExternalNetworkErrorBuilder =
142 new NicNetworkIdNotAllowedExternalNetworkErrorBuilder().build();
143 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
144 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
145 LoggerErrorCode.DATA_ERROR.getErrorCode(),
146 nicNetworkIdNotAllowedExternalNetworkErrorBuilder.message());
147 throw new CoreException(nicNetworkIdNotAllowedExternalNetworkErrorBuilder);
151 private void validateInternalNetworkType(NicEntity nic, String networkId,
152 String networkDescription) {
153 if (!(networkId == null || networkId.isEmpty())) {
154 networkManager.getNetwork(nic.getVspId(), nic.getVersion(), networkId);
157 if (!(networkDescription == null || networkDescription.isEmpty())) {
158 final ErrorCode nicNetworkDescriptionErrorBuilder =
159 NicInternalNetworkErrorBuilder.getNetworkDescriptionInternalNetworkErrorBuilder();
160 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
161 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
162 LoggerErrorCode.DATA_ERROR.getErrorCode(), nicNetworkDescriptionErrorBuilder.message());
163 throw new CoreException(nicNetworkDescriptionErrorBuilder);
167 private void validateNics(NicEntity nic, Collection<NicEntity> listNics) {
168 listNics.forEach(nicEntity -> {
169 Nic nicdata = nicEntity.getNicCompositionData();
170 if (nic.getNicCompositionData().getName().equalsIgnoreCase(nicdata.getName())) {
171 final ErrorCode duplicateNicInComponentErrorBuilder =
172 new DuplicateNicInComponentErrorBuilder(nic.getNicCompositionData().getName(),
173 nic.getComponentId()).build();
174 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
175 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
176 LoggerErrorCode.DATA_ERROR.getErrorCode(),
177 duplicateNicInComponentErrorBuilder.message());
178 throw new CoreException(duplicateNicInComponentErrorBuilder);
185 public CompositionEntityResponse<Nic> getNic(String vspId, Version version, String componentId,
187 NicEntity nicEntity = getValidatedNic(vspId, version, componentId, nicId);
188 Nic nic = nicEntity.getNicCompositionData();
190 NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
191 schemaInput.setManual(vspInfoDao.isManual(vspId, version));
192 schemaInput.setNic(nic);
193 Map<String, String> networksNameById = listNetworksNameById(vspId, version);
194 nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
195 schemaInput.setNetworkIds(networksNameById.keySet());
197 CompositionEntityResponse<Nic> response = new CompositionEntityResponse<>();
198 response.setId(nicId);
199 response.setData(nic);
200 response.setSchema(getNicCompositionSchema(schemaInput));
205 private NicEntity getValidatedNic(String vspId, Version version, String componentId,
207 NicEntity retrieved = nicDao.get(new NicEntity(vspId, version, componentId, nicId));
209 .validateEntityExistence(retrieved, new NicEntity(vspId, version, componentId, nicId),
210 VspDetails.ENTITY_TYPE);
215 public void deleteNic(String vspId, Version version, String componentId, String nicId) {
216 if (!vspInfoDao.isManual(vspId, version)) {
217 final ErrorCode deleteNicErrorBuilder =
218 DeleteNicErrorBuilder.getDeleteNicForHeatOnboardedVspErrorBuilder();
219 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
220 LoggerTragetServiceName.DELETE_NIC, ErrorLevel.ERROR.name(),
221 LoggerErrorCode.PERMISSION_ERROR.getErrorCode(),
222 deleteNicErrorBuilder.message());
223 throw new CoreException(deleteNicErrorBuilder);
226 NicEntity nicEntity = getValidatedNic(vspId, version, componentId, nicId);
227 nicDao.delete(nicEntity);
231 public CompositionEntityValidationData updateNic(NicEntity nic) {
232 NicEntity retrieved =
233 getValidatedNic(nic.getVspId(), nic.getVersion(), nic.getComponentId(), nic.getId());
235 NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
236 schemaInput.setManual(vspInfoDao.isManual(nic.getVspId(), nic.getVersion()));
237 schemaInput.setNic(retrieved.getNicCompositionData());
239 if (schemaInput.isManual() && !nic.getNicCompositionData().getName()
240 .matches(VendorSoftwareProductConstants.NAME_PATTERN)) {
241 ErrorCode errorCode = NicErrorBuilder
242 .getNicNameFormatErrorBuilder(VendorSoftwareProductConstants.NAME_PATTERN);
244 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
245 LoggerTragetServiceName.UPDATE_NIC, ErrorLevel.ERROR.name(),
246 errorCode.id(),errorCode.message());
248 throw new CoreException(errorCode);
251 CompositionEntityValidationData validationData = compositionEntityDataManager
252 .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
253 if (CollectionUtils.isEmpty(validationData.getErrors())) {
256 return validationData;
260 public QuestionnaireResponse getNicQuestionnaire(String vspId, Version version,
261 String componentId, String nicId) {
262 QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
263 NicEntity nicQuestionnaire = nicDao.getQuestionnaireData(vspId, version, componentId, nicId);
264 VersioningUtil.validateEntityExistence(nicQuestionnaire,
265 new NicEntity(vspId, version, componentId, nicId), VspDetails.ENTITY_TYPE);
267 questionnaireResponse.setData(nicQuestionnaire.getQuestionnaireData());
268 questionnaireResponse.setSchema(getNicQuestionnaireSchema(null));
269 return questionnaireResponse;
273 public void updateNicQuestionnaire(String vspId, Version version, String componentId,
274 String nicId, String questionnaireData) {
275 getNic(vspId, version, componentId, nicId);
277 nicDao.updateQuestionnaireData(vspId, version, componentId, nicId, questionnaireData);
280 protected String getNicQuestionnaireSchema(SchemaTemplateInput schemaInput) {
281 return SchemaGenerator
282 .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, schemaInput);
285 protected String getNicCompositionSchema(NicCompositionSchemaInput schemaInput) {
286 return SchemaGenerator
287 .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, schemaInput);