75a5377ec3990549028a05e3e4181eb86b8cc76b
[sdc.git] / openecomp-be / backend / openecomp-sdc-vendor-software-product-manager / src / main / java / org / openecomp / sdc / vendorsoftwareproduct / impl / ComponentManagerImpl.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.core.utilities.json.JsonUtil;
25 import org.openecomp.sdc.common.errors.CoreException;
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.ComponentManager;
33 import org.openecomp.sdc.vendorsoftwareproduct.NicManager;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
35 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
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.ComponentData;
43 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
44 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
45 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.ComponentCompositionSchemaInput;
46 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.ComponentQuestionnaireSchemaInput;
47 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
48 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
49 import org.openecomp.sdc.versioning.VersioningUtil;
50 import org.openecomp.sdc.versioning.dao.types.Version;
51
52 import java.util.Collection;
53 import java.util.List;
54 import java.util.Map;
55 import java.util.stream.Collectors;
56
57 public class ComponentManagerImpl implements ComponentManager {
58   private static final MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
59   private ComponentDao componentDao;
60   private CompositionEntityDataManager compositionEntityDataManager;
61   private NicManager nicManager;
62
63   public ComponentManagerImpl(
64       ComponentDao componentDao,
65       CompositionEntityDataManager compositionEntityDataManager,
66       NicManager nicManager) {
67     this.componentDao = componentDao;
68     this.compositionEntityDataManager = compositionEntityDataManager;
69     this.nicManager = nicManager;
70   }
71
72   @Override
73   public Collection<ComponentEntity> listComponents(String vspId, Version version, String user) {
74     mdcDataDebugMessage.debugEntryMessage("VSP id", vspId);
75     mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
76     return componentDao.list(new ComponentEntity(vspId, version, null));
77   }
78
79   @Override
80   public void deleteComponents(String vspId, Version version, String user) {
81     mdcDataDebugMessage.debugEntryMessage("VSP id", vspId);
82     if (!isManual(vspId, version)) {
83       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
84           LoggerTragetServiceName.DELETE_COMPONENT, ErrorLevel.ERROR.name(),
85           LoggerErrorCode.PERMISSION_ERROR.getErrorCode(), "Can't delete component");
86       throw new CoreException(
87           new CompositionEditNotAllowedErrorBuilder(vspId, version).build());
88     }
89
90     //componentDao.updateVspLatestModificationTime(vspId, version);
91     mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
92   }
93
94   @Override
95   public ComponentEntity createComponent(ComponentEntity component, String user) {
96     mdcDataDebugMessage.debugEntryMessage("VSP id", component.getId());
97
98     if (!isManual(component.getVspId(), component.getVersion())) {
99       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
100           LoggerTragetServiceName.CREATE_COMPONENT, ErrorLevel.ERROR.name(),
101           LoggerErrorCode.PERMISSION_ERROR.getErrorCode(), "Can't create component");
102       throw new CoreException(
103           new CompositionEditNotAllowedErrorBuilder(component.getVspId(), component.getVersion())
104               .build());
105
106     }
107     //componentDao.updateVspLatestModificationTime(component.getVspId(), component.getVersion());
108     mdcDataDebugMessage.debugExitMessage("VSP id", component.getId());
109     return null;
110   }
111
112   @Override
113   public CompositionEntityValidationData updateComponent(ComponentEntity component, String user) {
114     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", component
115         .getVspId(), component.getId());
116     ComponentEntity retrieved =
117         getComponent(component.getVspId(), component.getVersion(), component.getId());
118
119     ComponentCompositionSchemaInput schemaInput = new ComponentCompositionSchemaInput();
120     schemaInput.setManual(isManual(component.getVspId(), component.getVersion()));
121     schemaInput.setComponent(retrieved.getComponentCompositionData());
122
123     CompositionEntityValidationData validationData = compositionEntityDataManager
124         .validateEntity(component, SchemaTemplateContext.composition, schemaInput);
125     if (CollectionUtils.isEmpty(validationData.getErrors())) {
126       componentDao.update(component);
127       //componentDao.updateVspLatestModificationTime(component.getVspId(), component.getVersion());
128     }
129     mdcDataDebugMessage.debugExitMessage("VSP id, component id", component.getVspId(),
130         component.getId());
131
132     return validationData;
133   }
134
135   public CompositionEntityResponse<ComponentData> getComponent(String vspId, Version version,
136                                                                String componentId, String user) {
137     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
138     ComponentEntity componentEntity = getComponent(vspId, version, componentId);
139     ComponentData component = componentEntity.getComponentCompositionData();
140
141     ComponentCompositionSchemaInput schemaInput = new ComponentCompositionSchemaInput();
142     schemaInput.setManual(isManual(vspId, version));
143     schemaInput.setComponent(component);
144
145     CompositionEntityResponse<ComponentData> response = new CompositionEntityResponse<>();
146     response.setId(componentId);
147     response.setData(component);
148     response.setSchema(getComponentCompositionSchema(schemaInput));
149     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
150
151     return response;
152   }
153
154   @Override
155   public void deleteComponent(String vspId, Version version, String componentId, String user) {
156     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
157
158     if (!isManual(vspId, version)) {
159       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
160           LoggerTragetServiceName.DELETE_COMPONENT, ErrorLevel.ERROR.name(),
161           LoggerErrorCode.PERMISSION_ERROR.getErrorCode(), "Can't delete component");
162       throw new CoreException(
163           new CompositionEditNotAllowedErrorBuilder(vspId, version).build());
164     }
165
166     //componentDao.updateVspLatestModificationTime(vspId, version);
167
168     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
169   }
170
171   @Override
172   public QuestionnaireResponse getQuestionnaire(String vspId, Version version,
173                                                 String componentId, String user) {
174     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
175
176     QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
177     ComponentEntity component = componentDao.getQuestionnaireData(vspId, version, componentId);
178     VersioningUtil
179         .validateEntityExistence(component, new ComponentEntity(vspId, version, componentId),
180             VspDetails.ENTITY_TYPE);
181
182     questionnaireResponse.setData(component.getQuestionnaireData());
183     List<String> nicNames = nicManager.listNics(vspId, version, componentId, user).stream()
184         .map(nic -> nic.getNicCompositionData().getName()).collect(Collectors.toList());
185     questionnaireResponse.setSchema(getComponentQuestionnaireSchema(
186         new ComponentQuestionnaireSchemaInput(nicNames, questionnaireResponse.getData() == null
187             ? null
188             : JsonUtil.json2Object(questionnaireResponse.getData(), Map.class))));
189
190     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
191     return questionnaireResponse;
192   }
193
194   @Override
195   public void updateQuestionnaire(String vspId, Version version, String componentId,
196                                   String questionnaireData, String user) {
197     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
198     validateComponentExistence(vspId, version, componentId, user);
199
200     componentDao.updateQuestionnaireData(vspId, version, componentId, questionnaireData);
201
202     //componentDao.updateVspLatestModificationTime(vspId, version);
203     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
204   }
205
206   @Override
207   public void validateComponentExistence(String vspId, Version version, String componentId,
208                                          String user) {
209     getComponent(vspId, version, componentId);
210   }
211
212   private ComponentEntity getComponent(String vspId, Version version, String componentId) {
213     ComponentEntity retrieved = componentDao.get(new ComponentEntity(vspId, version, componentId));
214     VersioningUtil
215         .validateEntityExistence(retrieved, new ComponentEntity(vspId, version, componentId),
216             VspDetails.ENTITY_TYPE);
217     return retrieved;
218   }
219
220   protected String getComponentCompositionSchema(ComponentCompositionSchemaInput schemaInput) {
221     return SchemaGenerator
222         .generate(SchemaTemplateContext.composition, CompositionEntityType.component, schemaInput);
223   }
224
225   protected String getComponentQuestionnaireSchema(SchemaTemplateInput schemaInput) {
226     return SchemaGenerator
227         .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.component,
228             schemaInput);
229   }
230
231   private boolean isManual(String vspId, Version version) {
232     return false;
233   }
234 }