[SDC] Onboarding 1710 rebase.
[sdc.git] / openecomp-be / backend / openecomp-sdc-vendor-software-product-manager / src / main / java / org / openecomp / sdc / vendorsoftwareproduct / impl / NicManagerImpl.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20
21 package org.openecomp.sdc.vendorsoftwareproduct.impl;
22
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;
61
62 import java.util.Collection;
63 import java.util.Map;
64 import java.util.stream.Collectors;
65
66 public class NicManagerImpl implements NicManager {
67   private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
68
69   private NicDao nicDao;
70   private CompositionEntityDataManager compositionEntityDataManager;
71   private NetworkManager networkManager;
72   private  VendorSoftwareProductInfoDao vspInfoDao;
73
74   public NicManagerImpl(NicDao nicDao,
75                         CompositionEntityDataManager compositionEntityDataManager,
76                         NetworkManager networkManager,
77                         VendorSoftwareProductInfoDao vspInfoDao) {
78     this.nicDao = nicDao;
79     this.compositionEntityDataManager = compositionEntityDataManager;
80     this.networkManager = networkManager;
81     this.vspInfoDao = vspInfoDao;
82   }
83
84   @Override
85   public Collection<NicEntity> listNics(String vspId, Version version, String componentId,
86                                         String user) {
87     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
88
89     Collection<NicEntity> nics = nicDao.list(new NicEntity(vspId, version, componentId, null));
90
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);
97       });
98     }
99
100     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
101
102     return nics;
103   }
104
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()));
109   }
110
111   @Override
112   public NicEntity createNic(NicEntity nic, String user) {
113     NicEntity createdNic = null;
114     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", nic.getVspId(),
115         nic.getComponentId());
116
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);
125     } else {
126       validateNic(nic, user);
127       createdNic = createNic(nic);
128     }
129
130     //nicDao.updateVspLatestModificationTime(nic.getVspId(), nic.getVersion());
131
132     mdcDataDebugMessage
133         .debugExitMessage("VSP id, component id", nic.getVspId(), nic.getComponentId());
134
135     return createdNic;
136   }
137
138   private NicEntity createNic(NicEntity nic) {
139     return compositionEntityDataManager.createNic(nic);
140   }
141
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);
159       }
160
161     });
162
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,
168                 user);
169       }
170
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);
179       }
180
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);
190       }
191     }
192   }
193
194   @Override
195   public CompositionEntityResponse<Nic> getNic(String vspId, Version version, String componentId,
196                                                String nicId, String user) {
197     mdcDataDebugMessage
198         .debugEntryMessage("VSP id, component id, nic id", vspId, componentId, nicId);
199
200     NicEntity nicEntity = getNic(vspId, version, componentId, nicId);
201     Nic nic = nicEntity.getNicCompositionData();
202
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());
209
210     CompositionEntityResponse<Nic> response = new CompositionEntityResponse<>();
211     response.setId(nicId);
212     response.setData(nic);
213     response.setSchema(getNicCompositionSchema(schemaInput));
214
215     mdcDataDebugMessage
216         .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
217
218     return response;
219   }
220
221
222   private NicEntity getNic(String vspId, Version version, String componentId, String nicId) {
223     NicEntity retrieved = nicDao.get(new NicEntity(vspId, version, componentId, nicId));
224     VersioningUtil
225         .validateEntityExistence(retrieved, new NicEntity(vspId, version, componentId, nicId),
226             VspDetails.ENTITY_TYPE);
227     return retrieved;
228   }
229
230   @Override
231   public void deleteNic(String vspId, Version version, String componentId, String nicId,
232                         String user) {
233     mdcDataDebugMessage
234         .debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
235
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);
244     }
245
246     NicEntity nicEntity = getNic(vspId, version, componentId, nicId);
247     if (nicEntity != null) {
248       nicDao.delete(nicEntity);
249     }
250
251     mdcDataDebugMessage
252         .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
253   }
254
255   @Override
256   public CompositionEntityValidationData updateNic(NicEntity nic, String user) {
257     mdcDataDebugMessage
258         .debugEntryMessage("VSP id, component id", nic.getVspId(), nic.getComponentId(),
259             nic.getId());
260
261     NicEntity retrieved =
262         getNic(nic.getVspId(), nic.getVersion(), nic.getComponentId(), nic.getId());
263
264     NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
265     schemaInput.setManual(vspInfoDao.isManual(nic.getVspId(), nic.getVersion()));
266     schemaInput.setNic(retrieved.getNicCompositionData());
267
268     CompositionEntityValidationData validationData = compositionEntityDataManager
269         .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
270     if (CollectionUtils.isEmpty(validationData.getErrors())) {
271       nicDao.update(nic);
272     }
273
274     //nicDao.updateVspLatestModificationTime(nic.getVspId(), nic.getVersion());
275
276     mdcDataDebugMessage
277         .debugExitMessage("VSP id, component id", nic.getVspId(), nic.getComponentId(),
278             nic.getId());
279
280     return validationData;
281   }
282
283   @Override
284   public QuestionnaireResponse getNicQuestionnaire(String vspId, Version version,
285                                                    String componentId, String nicId, String user) {
286     mdcDataDebugMessage
287         .debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
288
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);
293
294     questionnaireResponse.setData(nicQuestionnaire.getQuestionnaireData());
295     questionnaireResponse.setSchema(getNicQuestionnaireSchema(null));
296
297     mdcDataDebugMessage
298         .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
299
300     return questionnaireResponse;
301   }
302
303   @Override
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);
307
308     getNic(vspId, version, componentId, nicId);
309
310     nicDao.updateQuestionnaireData(vspId, version, componentId, nicId, questionnaireData);
311
312     //nicDao.updateVspLatestModificationTime(vspId, version);
313
314     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId, nicId);
315   }
316
317   protected String getNicQuestionnaireSchema(SchemaTemplateInput schemaInput) {
318     return SchemaGenerator
319         .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, schemaInput);
320   }
321
322   protected String getNicCompositionSchema(NicCompositionSchemaInput schemaInput) {
323     return SchemaGenerator
324         .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, schemaInput);
325   }
326   // todo *************************** move to reusable place! *************************
327
328   /*private boolean isManual(String vspId, Version version) {
329     return false;
330   }*/
331 }