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.vendorsoftwareproduct.NetworkManager;
23 import org.openecomp.sdc.vendorsoftwareproduct.NicManager;
24 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants;
25 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao;
26 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
27 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
28 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
29 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
30 import org.openecomp.sdc.vendorsoftwareproduct.errors.DeleteNicErrorBuilder;
31 import org.openecomp.sdc.vendorsoftwareproduct.errors.DuplicateNicInComponentErrorBuilder;
32 import org.openecomp.sdc.vendorsoftwareproduct.errors.NicErrorBuilder;
33 import org.openecomp.sdc.vendorsoftwareproduct.errors.NicInternalNetworkErrorBuilder;
34 import org.openecomp.sdc.vendorsoftwareproduct.errors.NicNetworkIdNotAllowedExternalNetworkErrorBuilder;
35 import org.openecomp.sdc.vendorsoftwareproduct.errors.NotSupportedHeatOnboardMethodErrorBuilder;
36 import org.openecomp.sdc.vendorsoftwareproduct.CompositionEntityDataManager;
37 import org.openecomp.sdc.vendorsoftwareproduct.services.schemagenerator.SchemaGenerator;
38 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
39 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
40 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
41 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
42 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.NetworkType;
43 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
44 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NicCompositionSchemaInput;
45 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
46 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
47 import org.openecomp.sdc.versioning.VersioningUtil;
48 import org.openecomp.sdc.versioning.dao.types.Version;
50 import java.util.Collection;
52 import java.util.stream.Collectors;
54 public class NicManagerImpl implements NicManager {
55 private final NicDao nicDao;
56 private final CompositionEntityDataManager compositionEntityDataManager;
57 private final NetworkManager networkManager;
58 private final VendorSoftwareProductInfoDao vspInfoDao;
60 public NicManagerImpl(NicDao nicDao,
61 CompositionEntityDataManager compositionEntityDataManager,
62 NetworkManager networkManager,
63 VendorSoftwareProductInfoDao vspInfoDao) {
65 this.compositionEntityDataManager = compositionEntityDataManager;
66 this.networkManager = networkManager;
67 this.vspInfoDao = vspInfoDao;
71 public Collection<NicEntity> listNics(String vspId, Version version, String componentId) {
72 Collection<NicEntity> nics = nicDao.list(new NicEntity(vspId, version, componentId, null));
74 if (!nics.isEmpty()) {
75 Map<String, String> networksNameById = listNetworksNameById(vspId, version);
76 nics.forEach(nicEntity -> {
77 Nic nic = nicEntity.getNicCompositionData();
78 nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
79 nicEntity.setNicCompositionData(nic);
85 private Map<String, String> listNetworksNameById(String vspId, Version version) {
86 Collection<NetworkEntity> networks = networkManager.listNetworks(vspId, version);
87 return networks.stream().collect(Collectors.toMap(NetworkEntity::getId,
88 networkEntity -> networkEntity.getNetworkCompositionData().getName()));
92 public NicEntity createNic(NicEntity nic) {
94 if (!vspInfoDao.isManual(nic.getVspId(), nic.getVersion())) {
95 ErrorCode onboardingMethodUpdateErrorCode = NotSupportedHeatOnboardMethodErrorBuilder
96 .getAddNicNotSupportedHeatOnboardMethodErrorBuilder();
97 throw new CoreException(onboardingMethodUpdateErrorCode);
100 createdNic = compositionEntityDataManager.createNic(nic);
106 private void validateNic(NicEntity nic) {
107 Collection<NicEntity> listNics = listNics(nic.getVspId(), nic.getVersion(), nic
109 String networkId = nic.getNicCompositionData().getNetworkId();
110 NetworkType networkType = nic.getNicCompositionData().getNetworkType();
111 String networkDescription = nic.getNicCompositionData().getNetworkDescription();
113 if (!nic.getNicCompositionData().getName()
114 .matches(VendorSoftwareProductConstants.NAME_PATTERN)) {
115 ErrorCode errorCode = NicErrorBuilder
116 .getNicNameFormatErrorBuilder(VendorSoftwareProductConstants.NAME_PATTERN);
117 throw new CoreException(errorCode);
120 validateNics(nic, listNics);
122 if (networkType.equals(NetworkType.Internal)) {
123 validateInternalNetworkType(nic, networkId, networkDescription);
125 } else if (networkType.equals(NetworkType.External)
126 && !(networkId == null || networkId.isEmpty())) {
127 final ErrorCode nicNetworkIdNotAllowedExternalNetworkErrorBuilder =
128 new NicNetworkIdNotAllowedExternalNetworkErrorBuilder().build();
129 throw new CoreException(nicNetworkIdNotAllowedExternalNetworkErrorBuilder);
133 private void validateInternalNetworkType(NicEntity nic, String networkId,
134 String networkDescription) {
135 if (!(networkId == null || networkId.isEmpty())) {
136 networkManager.getNetwork(nic.getVspId(), nic.getVersion(), networkId);
139 if (!(networkDescription == null || networkDescription.isEmpty())) {
140 final ErrorCode nicNetworkDescriptionErrorBuilder =
141 NicInternalNetworkErrorBuilder.getNetworkDescriptionInternalNetworkErrorBuilder();
142 throw new CoreException(nicNetworkDescriptionErrorBuilder);
146 private void validateNics(NicEntity nic, Collection<NicEntity> listNics) {
147 listNics.forEach(nicEntity -> {
148 Nic nicdata = nicEntity.getNicCompositionData();
149 if (nic.getNicCompositionData().getName().equalsIgnoreCase(nicdata.getName())) {
150 final ErrorCode duplicateNicInComponentErrorBuilder =
151 new DuplicateNicInComponentErrorBuilder(nic.getNicCompositionData().getName(),
152 nic.getComponentId()).build();
153 throw new CoreException(duplicateNicInComponentErrorBuilder);
160 public CompositionEntityResponse<Nic> getNic(String vspId, Version version, String componentId,
162 NicEntity nicEntity = getValidatedNic(vspId, version, componentId, nicId);
163 Nic nic = nicEntity.getNicCompositionData();
165 NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
166 schemaInput.setManual(vspInfoDao.isManual(vspId, version));
167 schemaInput.setNic(nic);
168 Map<String, String> networksNameById = listNetworksNameById(vspId, version);
169 nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
170 schemaInput.setNetworkIds(networksNameById.keySet());
172 CompositionEntityResponse<Nic> response = new CompositionEntityResponse<>();
173 response.setId(nicId);
174 response.setData(nic);
175 response.setSchema(getNicCompositionSchema(schemaInput));
180 private NicEntity getValidatedNic(String vspId, Version version, String componentId,
182 NicEntity retrieved = nicDao.get(new NicEntity(vspId, version, componentId, nicId));
184 .validateEntityExistence(retrieved, new NicEntity(vspId, version, componentId, nicId),
185 VspDetails.ENTITY_TYPE);
190 public void deleteNic(String vspId, Version version, String componentId, String nicId) {
191 if (!vspInfoDao.isManual(vspId, version)) {
192 final ErrorCode deleteNicErrorBuilder =
193 DeleteNicErrorBuilder.getDeleteNicForHeatOnboardedVspErrorBuilder();
194 throw new CoreException(deleteNicErrorBuilder);
197 NicEntity nicEntity = getValidatedNic(vspId, version, componentId, nicId);
198 nicDao.delete(nicEntity);
202 public CompositionEntityValidationData updateNic(NicEntity nic) {
203 NicEntity retrieved =
204 getValidatedNic(nic.getVspId(), nic.getVersion(), nic.getComponentId(), nic.getId());
206 NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
207 schemaInput.setManual(vspInfoDao.isManual(nic.getVspId(), nic.getVersion()));
208 schemaInput.setNic(retrieved.getNicCompositionData());
210 if (schemaInput.isManual() && !nic.getNicCompositionData().getName()
211 .matches(VendorSoftwareProductConstants.NAME_PATTERN)) {
212 ErrorCode errorCode = NicErrorBuilder
213 .getNicNameFormatErrorBuilder(VendorSoftwareProductConstants.NAME_PATTERN);
214 throw new CoreException(errorCode);
217 CompositionEntityValidationData validationData = compositionEntityDataManager
218 .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
219 if (CollectionUtils.isEmpty(validationData.getErrors())) {
222 return validationData;
226 public QuestionnaireResponse getNicQuestionnaire(String vspId, Version version,
227 String componentId, String nicId) {
228 QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
229 NicEntity nicQuestionnaire = nicDao.getQuestionnaireData(vspId, version, componentId, nicId);
230 VersioningUtil.validateEntityExistence(nicQuestionnaire,
231 new NicEntity(vspId, version, componentId, nicId), VspDetails.ENTITY_TYPE);
233 questionnaireResponse.setData(nicQuestionnaire.getQuestionnaireData());
234 questionnaireResponse.setSchema(getNicQuestionnaireSchema(null));
235 return questionnaireResponse;
239 public void updateNicQuestionnaire(String vspId, Version version, String componentId,
240 String nicId, String questionnaireData) {
241 getNic(vspId, version, componentId, nicId);
243 nicDao.updateQuestionnaireData(vspId, version, componentId, nicId, questionnaireData);
246 protected String getNicQuestionnaireSchema(SchemaTemplateInput schemaInput) {
247 return SchemaGenerator
248 .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, schemaInput);
251 protected String getNicCompositionSchema(NicCompositionSchemaInput schemaInput) {
252 return SchemaGenerator
253 .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, schemaInput);