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.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.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;
64 private static final String VSP_ID_COMPONENT_ID = "VSP id, component id";
66 public NicManagerImpl(NicDao nicDao,
67 CompositionEntityDataManager compositionEntityDataManager,
68 NetworkManager networkManager,
69 VendorSoftwareProductInfoDao vspInfoDao) {
71 this.compositionEntityDataManager = compositionEntityDataManager;
72 this.networkManager = networkManager;
73 this.vspInfoDao = vspInfoDao;
77 public Collection<NicEntity> listNics(String vspId, Version version, String componentId) {
78 Collection<NicEntity> nics = nicDao.list(new NicEntity(vspId, version, componentId, null));
80 if (!nics.isEmpty()) {
81 Map<String, String> networksNameById = listNetworksNameById(vspId, version);
82 nics.forEach(nicEntity -> {
83 Nic nic = nicEntity.getNicCompositionData();
84 nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
85 nicEntity.setNicCompositionData(nic);
91 private Map<String, String> listNetworksNameById(String vspId, Version version) {
92 Collection<NetworkEntity> networks = networkManager.listNetworks(vspId, version);
93 return networks.stream().collect(Collectors.toMap(NetworkEntity::getId,
94 networkEntity -> networkEntity.getNetworkCompositionData().getName()));
98 public NicEntity createNic(NicEntity nic) {
100 if (!vspInfoDao.isManual(nic.getVspId(), nic.getVersion())) {
101 ErrorCode onboardingMethodUpdateErrorCode = NotSupportedHeatOnboardMethodErrorBuilder
102 .getAddNicNotSupportedHeatOnboardMethodErrorBuilder();
103 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
104 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
105 LoggerErrorCode.PERMISSION_ERROR.getErrorCode(),
106 onboardingMethodUpdateErrorCode.message());
107 throw new CoreException(onboardingMethodUpdateErrorCode);
110 createdNic = compositionEntityDataManager.createNic(nic);
116 private void validateNic(NicEntity nic) {
117 Collection<NicEntity> listNics = listNics(nic.getVspId(), nic.getVersion(), nic
119 String networkId = nic.getNicCompositionData().getNetworkId();
120 NetworkType networkType = nic.getNicCompositionData().getNetworkType();
121 String networkDescription = nic.getNicCompositionData().getNetworkDescription();
123 if (!nic.getNicCompositionData().getName()
124 .matches(VendorSoftwareProductConstants.NAME_PATTERN)) {
125 ErrorCode errorCode = NicErrorBuilder
126 .getNicNameFormatErrorBuilder(VendorSoftwareProductConstants.NAME_PATTERN);
128 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
129 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
130 errorCode.id(),errorCode.message());
132 throw new CoreException(errorCode);
135 validateNics(nic, listNics);
137 if (networkType.equals(NetworkType.Internal)) {
138 validateInternalNetworkType(nic, networkId, networkDescription);
140 } else if (networkType.equals(NetworkType.External)
141 && !(networkId == null || networkId.isEmpty())) {
142 final ErrorCode nicNetworkIdNotAllowedExternalNetworkErrorBuilder =
143 new NicNetworkIdNotAllowedExternalNetworkErrorBuilder().build();
144 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
145 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
146 LoggerErrorCode.DATA_ERROR.getErrorCode(),
147 nicNetworkIdNotAllowedExternalNetworkErrorBuilder.message());
148 throw new CoreException(nicNetworkIdNotAllowedExternalNetworkErrorBuilder);
152 private void validateInternalNetworkType(NicEntity nic, String networkId,
153 String networkDescription) {
154 if (!(networkId == null || networkId.isEmpty())) {
155 networkManager.getNetwork(nic.getVspId(), nic.getVersion(), networkId);
158 if (!(networkDescription == null || networkDescription.isEmpty())) {
159 final ErrorCode nicNetworkDescriptionErrorBuilder =
160 NicInternalNetworkErrorBuilder.getNetworkDescriptionInternalNetworkErrorBuilder();
161 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
162 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
163 LoggerErrorCode.DATA_ERROR.getErrorCode(), nicNetworkDescriptionErrorBuilder.message());
164 throw new CoreException(nicNetworkDescriptionErrorBuilder);
168 private void validateNics(NicEntity nic, Collection<NicEntity> listNics) {
169 listNics.forEach(nicEntity -> {
170 Nic nicdata = nicEntity.getNicCompositionData();
171 if (nic.getNicCompositionData().getName().equalsIgnoreCase(nicdata.getName())) {
172 final ErrorCode duplicateNicInComponentErrorBuilder =
173 new DuplicateNicInComponentErrorBuilder(nic.getNicCompositionData().getName(),
174 nic.getComponentId()).build();
175 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
176 LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
177 LoggerErrorCode.DATA_ERROR.getErrorCode(),
178 duplicateNicInComponentErrorBuilder.message());
179 throw new CoreException(duplicateNicInComponentErrorBuilder);
186 public CompositionEntityResponse<Nic> getNic(String vspId, Version version, String componentId,
188 NicEntity nicEntity = getValidatedNic(vspId, version, componentId, nicId);
189 Nic nic = nicEntity.getNicCompositionData();
191 NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
192 schemaInput.setManual(vspInfoDao.isManual(vspId, version));
193 schemaInput.setNic(nic);
194 Map<String, String> networksNameById = listNetworksNameById(vspId, version);
195 nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
196 schemaInput.setNetworkIds(networksNameById.keySet());
198 CompositionEntityResponse<Nic> response = new CompositionEntityResponse<>();
199 response.setId(nicId);
200 response.setData(nic);
201 response.setSchema(getNicCompositionSchema(schemaInput));
206 private NicEntity getValidatedNic(String vspId, Version version, String componentId,
208 NicEntity retrieved = nicDao.get(new NicEntity(vspId, version, componentId, nicId));
210 .validateEntityExistence(retrieved, new NicEntity(vspId, version, componentId, nicId),
211 VspDetails.ENTITY_TYPE);
216 public void deleteNic(String vspId, Version version, String componentId, String nicId) {
217 if (!vspInfoDao.isManual(vspId, version)) {
218 final ErrorCode deleteNicErrorBuilder =
219 DeleteNicErrorBuilder.getDeleteNicForHeatOnboardedVspErrorBuilder();
220 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
221 LoggerTragetServiceName.DELETE_NIC, ErrorLevel.ERROR.name(),
222 LoggerErrorCode.PERMISSION_ERROR.getErrorCode(),
223 deleteNicErrorBuilder.message());
224 throw new CoreException(deleteNicErrorBuilder);
227 NicEntity nicEntity = getValidatedNic(vspId, version, componentId, nicId);
228 nicDao.delete(nicEntity);
232 public CompositionEntityValidationData updateNic(NicEntity nic) {
233 NicEntity retrieved =
234 getValidatedNic(nic.getVspId(), nic.getVersion(), nic.getComponentId(), nic.getId());
236 NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
237 schemaInput.setManual(vspInfoDao.isManual(nic.getVspId(), nic.getVersion()));
238 schemaInput.setNic(retrieved.getNicCompositionData());
240 if (schemaInput.isManual() && !nic.getNicCompositionData().getName()
241 .matches(VendorSoftwareProductConstants.NAME_PATTERN)) {
242 ErrorCode errorCode = NicErrorBuilder
243 .getNicNameFormatErrorBuilder(VendorSoftwareProductConstants.NAME_PATTERN);
245 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
246 LoggerTragetServiceName.UPDATE_NIC, ErrorLevel.ERROR.name(),
247 errorCode.id(),errorCode.message());
249 throw new CoreException(errorCode);
252 CompositionEntityValidationData validationData = compositionEntityDataManager
253 .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
254 if (CollectionUtils.isEmpty(validationData.getErrors())) {
257 return validationData;
261 public QuestionnaireResponse getNicQuestionnaire(String vspId, Version version,
262 String componentId, String nicId) {
263 QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
264 NicEntity nicQuestionnaire = nicDao.getQuestionnaireData(vspId, version, componentId, nicId);
265 VersioningUtil.validateEntityExistence(nicQuestionnaire,
266 new NicEntity(vspId, version, componentId, nicId), VspDetails.ENTITY_TYPE);
268 questionnaireResponse.setData(nicQuestionnaire.getQuestionnaireData());
269 questionnaireResponse.setSchema(getNicQuestionnaireSchema(null));
270 return questionnaireResponse;
274 public void updateNicQuestionnaire(String vspId, Version version, String componentId,
275 String nicId, String questionnaireData) {
276 getNic(vspId, version, componentId, nicId);
278 nicDao.updateQuestionnaireData(vspId, version, componentId, nicId, questionnaireData);
281 protected String getNicQuestionnaireSchema(SchemaTemplateInput schemaInput) {
282 return SchemaGenerator
283 .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, schemaInput);
286 protected String getNicCompositionSchema(NicCompositionSchemaInput schemaInput) {
287 return SchemaGenerator
288 .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, schemaInput);