d73e0f5def575fa47eac5395551f6c560e885d69
[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.datatypes.error.ErrorLevel;
26 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
27 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
28 import org.openecomp.sdc.logging.types.LoggerConstants;
29 import org.openecomp.sdc.logging.types.LoggerErrorCode;
30 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
31 import org.openecomp.sdc.vendorsoftwareproduct.NetworkManager;
32 import org.openecomp.sdc.vendorsoftwareproduct.NicManager;
33 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
35 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
36 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
37 import org.openecomp.sdc.vendorsoftwareproduct.errors.CompositionEditNotAllowedErrorBuilder;
38 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
39 import org.openecomp.sdc.vendorsoftwareproduct.services.schemagenerator.SchemaGenerator;
40 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
41 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
42 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
43 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
44 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
45 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NicCompositionSchemaInput;
46 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
47 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
48 import org.openecomp.sdc.versioning.VersioningUtil;
49 import org.openecomp.sdc.versioning.dao.types.Version;
50
51 import java.util.Collection;
52 import java.util.Map;
53 import java.util.stream.Collectors;
54
55 public class NicManagerImpl implements NicManager {
56   private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
57
58   private NicDao nicDao;
59   private CompositionEntityDataManager compositionEntityDataManager;
60   private NetworkManager networkManager;
61
62   public NicManagerImpl(NicDao nicDao,
63                         CompositionEntityDataManager compositionEntityDataManager,
64                         NetworkManager networkManager) {
65     this.nicDao = nicDao;
66     this.compositionEntityDataManager = compositionEntityDataManager;
67     this.networkManager = networkManager;
68   }
69
70   @Override
71   public Collection<NicEntity> listNics(String vspId, Version version, String componentId,
72                                         String user) {
73     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
74
75     Collection<NicEntity> nics = nicDao.list(new NicEntity(vspId, version, componentId, null));
76
77     if (!nics.isEmpty()) {
78       Map<String, String> networksNameById = listNetworksNameById(vspId, version, user);
79       nics.forEach(nicEntity -> {
80         Nic nic = nicEntity.getNicCompositionData();
81         nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
82         nicEntity.setNicCompositionData(nic);
83       });
84     }
85
86     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
87
88     return nics;
89   }
90
91   private Map<String, String> listNetworksNameById(String vspId, Version version, String user) {
92     Collection<NetworkEntity> networks = networkManager.listNetworks(vspId, version, user);
93     return networks.stream().collect(Collectors.toMap(NetworkEntity::getId,
94         networkEntity -> networkEntity.getNetworkCompositionData().getName()));
95   }
96
97   @Override
98   public NicEntity createNic(NicEntity nic, String user) {
99     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", nic.getVspId(),
100         nic.getComponentId());
101
102     if (!isManual(nic.getVspId(), nic.getVersion())) {
103       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
104           LoggerTragetServiceName.CREATE_NIC, ErrorLevel.ERROR.name(),
105           LoggerErrorCode.PERMISSION_ERROR.getErrorCode(), "Can't create nic");
106       throw new CoreException(
107           new CompositionEditNotAllowedErrorBuilder(nic.getVspId(), nic.getVersion()).build());
108     }
109
110     //nicDao.updateVspLatestModificationTime(nic.getVspId(), nic.getVersion());
111
112     mdcDataDebugMessage
113         .debugExitMessage("VSP id, component id", nic.getVspId(), nic.getComponentId());
114
115     return null;
116   }
117
118   @Override
119   public CompositionEntityResponse<Nic> getNic(String vspId, Version version, String componentId,
120                                                String nicId, String user) {
121     mdcDataDebugMessage
122         .debugEntryMessage("VSP id, component id, nic id", vspId, componentId, nicId);
123
124     NicEntity nicEntity = getNic(vspId, version, componentId, nicId);
125     Nic nic = nicEntity.getNicCompositionData();
126
127     NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
128     schemaInput.setManual(isManual(vspId, version));
129     schemaInput.setNic(nic);
130     Map<String, String> networksNameById = listNetworksNameById(vspId, version, user);
131     nic.setNetworkName(networksNameById.get(nic.getNetworkId()));
132     schemaInput.setNetworkIds(networksNameById.keySet());
133
134     CompositionEntityResponse<Nic> response = new CompositionEntityResponse<>();
135     response.setId(nicId);
136     response.setData(nic);
137     response.setSchema(getNicCompositionSchema(schemaInput));
138
139     mdcDataDebugMessage
140         .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
141
142     return response;
143   }
144
145
146   private NicEntity getNic(String vspId, Version version, String componentId, String nicId) {
147     NicEntity retrieved = nicDao.get(new NicEntity(vspId, version, componentId, nicId));
148     VersioningUtil
149         .validateEntityExistence(retrieved, new NicEntity(vspId, version, componentId, nicId),
150             VspDetails.ENTITY_TYPE);
151     return retrieved;
152   }
153
154   @Override
155   public void deleteNic(String vspId, Version version, String componentId, String nicId,
156                         String user) {
157     mdcDataDebugMessage
158         .debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
159
160     if (!isManual(vspId, version)) {
161       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
162           LoggerTragetServiceName.DELETE_NIC, ErrorLevel.ERROR.name(),
163           LoggerErrorCode.PERMISSION_ERROR.getErrorCode(), "Can't delete nic");
164       throw new CoreException(
165           new CompositionEditNotAllowedErrorBuilder(vspId, version).build());
166     }
167
168     //nicDao.updateVspLatestModificationTime(vspId, version);
169
170     mdcDataDebugMessage
171         .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
172   }
173
174   @Override
175   public CompositionEntityValidationData updateNic(NicEntity nic, String user) {
176     mdcDataDebugMessage
177         .debugEntryMessage("VSP id, component id", nic.getVspId(), nic.getComponentId(),
178             nic.getId());
179
180     NicEntity retrieved =
181         getNic(nic.getVspId(), nic.getVersion(), nic.getComponentId(), nic.getId());
182
183     NicCompositionSchemaInput schemaInput = new NicCompositionSchemaInput();
184     schemaInput.setManual(isManual(nic.getVspId(), nic.getVersion()));
185     schemaInput.setNic(retrieved.getNicCompositionData());
186
187     CompositionEntityValidationData validationData = compositionEntityDataManager
188         .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
189     if (CollectionUtils.isEmpty(validationData.getErrors())) {
190       nicDao.update(nic);
191     }
192
193     //nicDao.updateVspLatestModificationTime(nic.getVspId(), nic.getVersion());
194
195     mdcDataDebugMessage
196         .debugExitMessage("VSP id, component id", nic.getVspId(), nic.getComponentId(),
197             nic.getId());
198
199     return validationData;
200   }
201
202   @Override
203   public QuestionnaireResponse getNicQuestionnaire(String vspId, Version version,
204                                                    String componentId, String nicId, String user) {
205     mdcDataDebugMessage
206         .debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
207
208     QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
209     NicEntity nicQuestionnaire = nicDao.getQuestionnaireData(vspId, version, componentId, nicId);
210     VersioningUtil.validateEntityExistence(nicQuestionnaire,
211         new NicEntity(vspId, version, componentId, nicId), VspDetails.ENTITY_TYPE);
212
213     questionnaireResponse.setData(nicQuestionnaire.getQuestionnaireData());
214     questionnaireResponse.setSchema(getNicQuestionnaireSchema(null));
215
216     mdcDataDebugMessage
217         .debugExitMessage("VSP id, component id", vspId, componentId, nicId);
218
219     return questionnaireResponse;
220   }
221
222   @Override
223   public void updateNicQuestionnaire(String vspId, Version version, String componentId,
224                                      String nicId, String questionnaireData, String user) {
225     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId, nicId);
226
227     getNic(vspId, version, componentId, nicId);
228
229     nicDao.updateQuestionnaireData(vspId, version, componentId, nicId, questionnaireData);
230
231     //nicDao.updateVspLatestModificationTime(vspId, version);
232
233     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId, nicId);
234   }
235
236   protected String getNicQuestionnaireSchema(SchemaTemplateInput schemaInput) {
237     return SchemaGenerator
238         .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, schemaInput);
239   }
240
241   protected String getNicCompositionSchema(NicCompositionSchemaInput schemaInput) {
242     return SchemaGenerator
243         .generate(SchemaTemplateContext.composition, CompositionEntityType.nic, schemaInput);
244   }
245   // todo *************************** move to reusable place! *************************
246
247   private boolean isManual(String vspId, Version version) {
248     return false;
249   }
250 }