2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdcrests.vsp.rest.services;
23 import org.openecomp.sdc.activityLog.ActivityLogManager;
24 import org.openecomp.sdc.activityLog.ActivityLogManagerFactory;
25 import org.openecomp.sdc.common.errors.CoreException;
26 import org.openecomp.sdc.common.errors.ErrorCode;
27 import org.openecomp.sdc.datatypes.error.ErrorLevel;
28 import org.openecomp.sdc.datatypes.error.ErrorMessage;
29 import org.openecomp.sdc.logging.api.Logger;
30 import org.openecomp.sdc.logging.api.LoggerFactory;
31 import org.openecomp.sdc.logging.context.MdcUtil;
32 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
33 import org.openecomp.sdc.logging.messages.AuditMessages;
34 import org.openecomp.sdc.logging.types.LoggerConstants;
35 import org.openecomp.sdc.logging.types.LoggerErrorCode;
36 import org.openecomp.sdc.logging.types.LoggerServiceName;
37 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
38 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
39 import org.openecomp.sdc.vendorsoftwareproduct.VspManagerFactory;
40 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
41 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.PackageInfo;
42 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
43 import org.openecomp.sdc.vendorsoftwareproduct.errors.OnboardingMethodErrorBuilder;
44 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
45 import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
46 import org.openecomp.sdc.vendorsoftwareproduct.types.VersionedVendorSoftwareProductInfo;
47 import org.openecomp.sdc.versioning.dao.types.Version;
48 import org.openecomp.sdc.versioning.types.VersionInfo;
49 import org.openecomp.sdc.versioning.types.VersionableEntityAction;
50 import org.openecomp.sdcrests.vendorsoftwareproducts.types.PackageInfoDto;
51 import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
52 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ValidationResponseDto;
53 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VersionSoftwareProductActionRequestDto;
54 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspComputeDto;
55 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspCreationDto;
56 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspDescriptionDto;
57 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspDetailsDto;
58 import org.openecomp.sdcrests.vsp.rest.VendorSoftwareProducts;
59 import org.openecomp.sdcrests.vsp.rest.mapping.MapComputeEntityToVspComputeDto;
60 import org.openecomp.sdcrests.vsp.rest.mapping.MapPackageInfoToPackageInfoDto;
61 import org.openecomp.sdcrests.vsp.rest.mapping.MapQuestionnaireResponseToQuestionnaireResponseDto;
62 import org.openecomp.sdcrests.vsp.rest.mapping.MapValidationResponseToDto;
63 import org.openecomp.sdcrests.vsp.rest.mapping.MapVersionedVendorSoftwareProductInfoToVspDetailsDto;
64 import org.openecomp.sdcrests.vsp.rest.mapping.MapVspDescriptionDtoToVspDetails;
65 import org.openecomp.sdcrests.vsp.rest.mapping.MapVspDetailsToVspCreationDto;
66 import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
67 import org.openecomp.sdcrests.wrappers.StringWrapperResponse;
69 import org.springframework.context.annotation.Scope;
70 import org.springframework.stereotype.Service;
72 import javax.inject.Named;
73 import javax.ws.rs.core.Response;
75 import java.io.IOException;
76 import java.util.Collection;
77 import java.util.List;
79 import static org.openecomp.sdc.logging.messages.AuditMessages.SUBMIT_VSP_ERROR;
83 @Service("vendorSoftwareProducts")
84 @Scope(value = "prototype")
85 public class VendorSoftwareProductsImpl implements VendorSoftwareProducts {
87 private VendorSoftwareProductManager vendorSoftwareProductManager =
88 VspManagerFactory.getInstance().createInterface();
90 private static final Logger logger =
91 LoggerFactory.getLogger(VendorSoftwareProductsImpl.class);
93 private ActivityLogManager activityLogManager =
94 ActivityLogManagerFactory.getInstance().createInterface();
97 public Response createVsp(VspDescriptionDto vspDescriptionDto, String user) {
98 MdcUtil.initMdc(LoggerServiceName.Create_VSP.toString());
99 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CREATE_VSP
100 + vspDescriptionDto.getName());
102 VspCreationDto vspCreationDto = null;
103 switch (vspDescriptionDto.getOnboardingMethod()) {
106 VspDetails vspDetails = new MapVspDescriptionDtoToVspDetails().
107 applyMapping(vspDescriptionDto, VspDetails.class);
109 vspDetails = vendorSoftwareProductManager.createVsp(vspDetails, user);
111 MapVspDetailsToVspCreationDto mapping = new MapVspDetailsToVspCreationDto();
112 vspCreationDto = mapping.applyMapping(vspDetails, VspCreationDto.class);
115 ErrorCode onboardingMethodUpdateErrorCode = OnboardingMethodErrorBuilder
116 .getInvalidOnboardingMethodErrorBuilder();
117 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
118 LoggerTragetServiceName.ADD_VSP, ErrorLevel.ERROR.name(),
119 LoggerErrorCode.DATA_ERROR.getErrorCode(), onboardingMethodUpdateErrorCode.message());
120 throw new CoreException(onboardingMethodUpdateErrorCode);
123 return Response.ok(vspCreationDto).build();
127 public Response listVsps(String versionFilter, String user) {
128 MdcUtil.initMdc(LoggerServiceName.List_VSP.toString());
129 List<VersionedVendorSoftwareProductInfo> vspList =
130 vendorSoftwareProductManager.listVsps(versionFilter, user);
132 GenericCollectionWrapper<VspDetailsDto> results = new GenericCollectionWrapper<>();
133 if (!vspList.isEmpty()) {
134 MapVersionedVendorSoftwareProductInfoToVspDetailsDto mapper =
135 new MapVersionedVendorSoftwareProductInfoToVspDetailsDto();
136 for (VersionedVendorSoftwareProductInfo versionedVsp : vspList) {
137 results.add(mapper.applyMapping(versionedVsp, VspDetailsDto.class));
141 return Response.ok(results).build();
145 public Response getVsp(String vspId, String versionId, String user) {
146 MdcUtil.initMdc(LoggerServiceName.Get_VSP.toString());
149 VspDetails vspDetails =
150 vendorSoftwareProductManager
151 .getVsp(vspId, resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read),
154 VersionInfo versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
157 if (vspDetails.getOldVersion() != null && !"".equals(vspDetails.getOldVersion())) {
158 if (Version.valueOf(versionId).equals(versionInfo.getActiveVersion())) {
160 Version healedVersion = vendorSoftwareProductManager.callAutoHeal(vspId, versionInfo,
163 vendorSoftwareProductManager
164 .getVsp(vspId, resolveVspVersion(vspId, healedVersion.toString(), user,
165 VersionableEntityAction.Read), user);
166 versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
167 } catch (Exception e) {
168 logger.error(e.getMessage(), e);
173 VspDetailsDto vspDetailsDto = vspDetails == null
175 : new MapVersionedVendorSoftwareProductInfoToVspDetailsDto()
176 .applyMapping(new VersionedVendorSoftwareProductInfo(vspDetails, versionInfo),
177 VspDetailsDto.class);
179 return Response.ok(vspDetailsDto).build();
183 public Response updateVsp(String vspId, String versionId, VspDescriptionDto vspDescriptionDto,
185 MdcUtil.initMdc(LoggerServiceName.Update_VSP.toString());
186 VspDetails vspDetails =
187 new MapVspDescriptionDtoToVspDetails().applyMapping(vspDescriptionDto, VspDetails.class);
188 vspDetails.setId(vspId);
189 vspDetails.setVersion(resolveVspVersion(vspId, null, user, VersionableEntityAction.Write));
191 vendorSoftwareProductManager.updateVsp(vspDetails, user);
193 return Response.ok().build();
197 public Response deleteVsp(String vspId, String user) {
198 MdcUtil.initMdc(LoggerServiceName.Delete_VSP.toString());
199 vendorSoftwareProductManager.deleteVsp(vspId, user);
201 return Response.ok().build();
205 public Response actOnVendorSoftwareProduct(String vspId, String versionId,
206 VersionSoftwareProductActionRequestDto request,
207 String user) throws IOException {
209 switch (request.getAction()) {
211 MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Checkout_VSP.toString());
212 vendorSoftwareProductManager.checkout(vspId, user);
213 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_OUT_VSP + vspId);
216 MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Undo_Checkout_VSP.toString());
217 vendorSoftwareProductManager.undoCheckout(vspId, user);
220 MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Checkin_VSP.toString());
221 vendorSoftwareProductManager.checkin(vspId, user);
222 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_IN_VSP + vspId);
225 MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Submit_VSP.toString());
226 ValidationResponse validationResponse = vendorSoftwareProductManager.submit(vspId, user);
227 if (!validationResponse.isValid()) {
228 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.SUBMIT_VSP_FAIL + vspId);
229 if (validationResponse.getVspErrors() != null) {
230 validationResponse.getVspErrors().forEach(errorCode -> logger.audit(AuditMessages
231 .AUDIT_MSG + String.format(SUBMIT_VSP_ERROR, errorCode.message(), vspId)));
233 if (validationResponse.getUploadDataErrors() != null) {
234 validationResponse.getUploadDataErrors().values().forEach(errorMessages
235 -> printAuditForErrors(errorMessages, vspId, SUBMIT_VSP_ERROR));
238 return Response.status(Response.Status.EXPECTATION_FAILED).entity(
239 new MapValidationResponseToDto()
240 .applyMapping(validationResponse, ValidationResponseDto.class)).build();
242 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.SUBMIT_VSP + vspId);
245 MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Create_Package.toString());
247 PackageInfo packageInfo = vendorSoftwareProductManager.createPackage(vspId,
248 resolveVspVersion(vspId, null, user, VersionableEntityAction.Read), user);
249 return Response.ok(packageInfo == null
251 : new MapPackageInfoToPackageInfoDto().applyMapping(packageInfo, PackageInfoDto.class))
256 return Response.ok().build();
260 public Response getValidationVsp(String user)
262 String validationVspId = vendorSoftwareProductManager.fetchValidationVsp(user);
263 StringWrapperResponse response = new StringWrapperResponse(validationVspId);
264 return Response.ok(response).build();
269 public Response getOrchestrationTemplate(String vspId, String versionId, String user) {
270 MdcUtil.initMdc(LoggerServiceName.Get_Uploaded_File.toString());
271 byte[] orchestrationTemplateFile =
272 vendorSoftwareProductManager
273 .getOrchestrationTemplateFile(vspId,
274 resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read), user);
276 if (orchestrationTemplateFile == null) {
277 return Response.status(Response.Status.NOT_FOUND).build();
279 Response.ResponseBuilder response = Response.ok(orchestrationTemplateFile);
280 response.header("Content-Disposition", "attachment; filename=LatestHeatPackage.zip");
281 return response.build();
285 public Response listPackages(String category, String subCategory, String user) {
286 MdcUtil.initMdc(LoggerServiceName.List_Packages.toString());
287 List<PackageInfo> packageInfoList =
288 vendorSoftwareProductManager.listPackages(category, subCategory);
290 GenericCollectionWrapper<PackageInfoDto> results = new GenericCollectionWrapper<>();
291 MapPackageInfoToPackageInfoDto mapper = new MapPackageInfoToPackageInfoDto();
293 if (packageInfoList != null) {
294 for (PackageInfo packageInfo : packageInfoList) {
295 results.add(mapper.applyMapping(packageInfo, PackageInfoDto.class));
298 return Response.ok(results).build();
302 public Response getTranslatedFile(String vspId, String versionId, String user) {
303 MdcUtil.initMdc(LoggerServiceName.Get_Translated_File.toString());
305 Version version = Version.valueOf(versionId);
306 Version resolvedVersion = version == null
307 ? getVersionInfo(vspId, VersionableEntityAction.Read, user).getLatestFinalVersion()
310 File zipFile = vendorSoftwareProductManager.getTranslatedFile(vspId, resolvedVersion, user);
312 Response.ResponseBuilder response = Response.ok(zipFile);
313 if (zipFile == null) {
314 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.IMPORT_FAIL + vspId);
315 return Response.status(Response.Status.NOT_FOUND).build();
317 response.header("Content-Disposition", "attachment; filename=" + zipFile.getName());
319 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.IMPORT_SUCCESS + vspId);
320 return response.build();
324 public Response getQuestionnaire(String vspId, String versionId, String user) {
325 MdcUtil.initMdc(LoggerServiceName.Get_Questionnaire_VSP.toString());
326 QuestionnaireResponse questionnaireResponse =
327 vendorSoftwareProductManager.getVspQuestionnaire(vspId,
328 resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read), user);
330 if (questionnaireResponse.getErrorMessage() != null) {
331 return Response.status(Response.Status.EXPECTATION_FAILED).entity(
332 new MapQuestionnaireResponseToQuestionnaireResponseDto()
333 .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class)).build();
336 QuestionnaireResponseDto result = new MapQuestionnaireResponseToQuestionnaireResponseDto()
337 .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class);
338 return Response.ok(result).build();
342 public Response updateQuestionnaire(String questionnaireData, String vspId, String
343 versionId, String user) {
344 MdcUtil.initMdc(LoggerServiceName.Update_Questionnaire_VSP.toString());
345 vendorSoftwareProductManager.updateVspQuestionnaire(vspId,
346 resolveVspVersion(vspId, null, user, VersionableEntityAction.Write),
347 questionnaireData, user);
348 return Response.ok().build();
352 public Response heal(String vspId, String versionId, String user) {
353 vendorSoftwareProductManager.heal(vspId, Version.valueOf(versionId), user);
355 return Response.ok().build();
359 public Response getVspInformationArtifact(String vspId, String versionId, String user) {
360 MdcUtil.initMdc(LoggerServiceName.Get_Information_Artifact.toString());
361 File textInformationArtifact =
362 vendorSoftwareProductManager.getInformationArtifact(vspId,
363 resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read), user);
365 Response.ResponseBuilder response = Response.ok(textInformationArtifact);
366 if (textInformationArtifact == null) {
367 return Response.status(Response.Status.NOT_FOUND).build();
370 .header("Content-Disposition", "attachment; filename=" + textInformationArtifact.getName());
371 return response.build();
374 public Response listCompute(String vspId, String version, String user) {
376 Collection<ComputeEntity> computes = vendorSoftwareProductManager.getComputeByVsp(vspId,
377 resolveVspVersion(vspId, version, user, VersionableEntityAction.Read), user);
379 MapComputeEntityToVspComputeDto mapper = new MapComputeEntityToVspComputeDto();
380 GenericCollectionWrapper<VspComputeDto> results = new GenericCollectionWrapper<>();
381 for (ComputeEntity compute : computes) {
382 results.add(mapper.applyMapping(compute, VspComputeDto.class));
385 return Response.ok(results).build();
388 private void printAuditForErrors(List<ErrorMessage> errorList, String vspId, String auditType) {
390 errorList.forEach(errorMessage -> {
391 if (errorMessage.getLevel().equals(ErrorLevel.ERROR)) {
392 logger.audit(AuditMessages.AUDIT_MSG + String.format(auditType, errorMessage.getMessage(),