0304353113f8431bcf9d309f38d5b73858ff7eb7
[sdc.git] /
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.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;
55
56 import java.util.Collection;
57 import java.util.Map;
58 import java.util.stream.Collectors;
59
60 public class NicManagerImpl implements NicManager {
61   private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
62
63   private NicDao nicDao;
64   private CompositionEntityDataManager compositionEntityDataManager;
65   private NetworkManager networkManager;
66   private  VendorSoftwareProductInfoDao vspInfoDao;
67
68   public NicManagerImpl(NicDao nicDao,
69                         CompositionEntityDataManager compositionEntityDataManager,
70                         NetworkManager networkManager,
71                         VendorSoftwareProductInfoDao vspInfoDao) {
72     this.nicDao = nicDao;
73     this.compositionEntityDataManager = compositionEntityDataManager;
74     this.networkManager = networkManager;
75     this.vspInfoDao = vspInfoDao;
76   }
77
78   @Override
79   public Collection<NicEntity> listNics(String vspId, Version version, String componentId,
80                                         String user) {
81     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
82
83     Collection<NicEntity> nics = nicDao.list(new NicEntity(vspId, version, componentId, null));
84
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);
91       });
92     }
93
94     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
95
96     return nics;
97   }
98
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()));
103   }
104
105   @Override
106   public NicEntity createNic(NicEntity nic, String user) {
107     NicEntity createdNic = null;
108     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", nic.getVspId(),
109         nic.getComponentId());
110
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);
119     } else {
120       validateNic(nic, user);
121       createdNic = createNic(nic);
122     }
123
124     //nicDao.updateVspLatestModificationTime(nic.getVspId(), nic.getVersion());
125
126     mdcDataDebugMessage
127         .debugExitMessage("VSP id, component id", nic.getVspId(), nic.getComponentId());
128
129     return createdNic;
130   }
131
132   private NicEntity createNic(NicEntity nic) {
133     return compositionEntityDataManager.createNic(nic);
134   }
135
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();
142
143     if(!nic.getNicCompositionData().getName().matches(VendorSoftwareProductConstants.NAME_PATTERN))
144     {
145       ErrorCode errorCode = NicErrorBuilder.getNicNameFormatErrorBuilder(nic
146               .getNicCompositionData().getName(), VendorSoftwareProductConstants.NAME_PATTERN);
147
148       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
149               LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
150               errorCode.id(),errorCode.message());
151
152       throw new CoreException(errorCode);
153     }
154
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);
166       }
167
168     });
169
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,
175                 user);
176       }
177
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);
186       }
187
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);
197       }
198     }
199   }
200
201   @Override
202   public CompositionEntityResponse<Nic> getNic(String vspId, Version version, String componentId,
203                                                String nicId, String user) {
204     mdcDataDebugMessage
205         .debugEntryMessage("VSP id, component id, nic id", vspId, componentId, nicId);
206
207     NicEntity nicEntity = getNic(vspId, version, componentId, nicId);
208     Nic nic = nicEntity.getNicCompositionData();
209
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());
216
217     CompositionEntityResponse<Nic> response = new CompositionEntityResponse<>();
218     response.setId(nicId);
219     response.setData(nic);
220     response.setSchema(getNicCompositionSchema(schemaInput));
221
222     mdcDataDebugMessage
223         .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
224
225     return response;
226   }
227
228
229   private NicEntity getNic(String vspId, Version version, String componentId, String nicId) {
230     NicEntity retrieved = nicDao.get(new NicEntity(vspId, version, componentId, nicId));
231     VersioningUtil
232         .validateEntityExistence(retrieved, new NicEntity(vspId, version, componentId, nicId),
233             VspDetails.ENTITY_TYPE);
234     return retrieved;
235   }
236
237   @Override
238   public void deleteNic(String vspId, Version version, String componentId, String nicId,
239                         String user) {
240     mdcDataDebugMessage
241         .debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
242
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);
251     }
252
253     NicEntity nicEntity = getNic(vspId, version, componentId, nicId);
254     if (nicEntity != null) {
255       nicDao.delete(nicEntity);
256     }
257
258     mdcDataDebugMessage
259         .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
260   }
261
262   @Override
263   public CompositionEntityValidationData updateNic(NicEntity nic, String user) {
264     mdcDataDebugMessage
265         .debugEntryMessage("VSP id, component id", nic.getVspId(), nic.getComponentId(),
266             nic.getId());
267
268     NicEntity retrieved =
269         getNic(nic.getVspId(), nic.getVersion(), nic.getComponentId(), nic.getId());
270
271     NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
272     schemaInput.setManual(vspInfoDao.isManual(nic.getVspId(), nic.getVersion()));
273     schemaInput.setNic(retrieved.getNicCompositionData());
274
275     if(schemaInput.isManual() && !nic.getNicCompositionData().getName().matches(VendorSoftwareProductConstants.NAME_PATTERN))
276     {
277       ErrorCode errorCode = NicErrorBuilder.getNicNameFormatErrorBuilder(nic
278               .getNicCompositionData().getName(), VendorSoftwareProductConstants.NAME_PATTERN);
279
280       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
281               LoggerTragetServiceName.UPDATE_NIC, ErrorLevel.ERROR.name(),
282               errorCode.id(),errorCode.message());
283
284       throw new CoreException(errorCode);
285     }
286
287     CompositionEntityValidationData validationData = compositionEntityDataManager
288         .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
289     if (CollectionUtils.isEmpty(validationData.getErrors())) {
290       nicDao.update(nic);
291     }
292
293     //nicDao.updateVspLatestModificationTime(nic.getVspId(), nic.getVersion());
294
295     mdcDataDebugMessage
296         .debugExitMessage("VSP id, component id", nic.getVspId(), nic.getComponentId(),
297             nic.getId());
298
299     return validationData;
300   }
301
302   @Override
303   public QuestionnaireResponse getNicQuestionnaire(String vspId, Version version,
304                                                    String componentId, String nicId, String user) {
305     mdcDataDebugMessage
306         .debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
307
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);
312
313     questionnaireResponse.setData(nicQuestionnaire.getQuestionnaireData());
314     questionnaireResponse.setSchema(getNicQuestionnaireSchema(null));
315
316     mdcDataDebugMessage
317         .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
318
319     return questionnaireResponse;
320   }
321
322   @Override
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);
326
327     getNic(vspId, version, componentId, nicId);
328
329     nicDao.updateQuestionnaireData(vspId, version, componentId, nicId, questionnaireData);
330
331     //nicDao.updateVspLatestModificationTime(vspId, version);
332
333     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId, nicId);
334   }
335
336   protected String getNicQuestionnaireSchema(SchemaTemplateInput schemaInput) {
337     return SchemaGenerator
338         .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, schemaInput);
339   }
340
341   protected String getNicCompositionSchema(NicCompositionSchemaInput schemaInput) {
342     return SchemaGenerator
343         .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, schemaInput);
344   }
345   // todo *************************** move to reusable place! *************************
346
347   /*private boolean isManual(String vspId, Version version) {
348     return false;
349   }*/
350 }