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.logging.api.Logger;
29 import org.openecomp.sdc.logging.api.LoggerFactory;
30 import org.openecomp.sdc.logging.context.MdcUtil;
31 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
32 import org.openecomp.sdc.logging.messages.AuditMessages;
33 import org.openecomp.sdc.logging.types.LoggerConstants;
34 import org.openecomp.sdc.logging.types.LoggerErrorCode;
35 import org.openecomp.sdc.logging.types.LoggerServiceName;
36 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
37 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
38 import org.openecomp.sdc.vendorsoftwareproduct.VspManagerFactory;
39 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
40 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.PackageInfo;
41 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
42 import org.openecomp.sdc.vendorsoftwareproduct.errors.OnboardingMethodErrorBuilder;
43 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
44 import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
45 import org.openecomp.sdc.vendorsoftwareproduct.types.VersionedVendorSoftwareProductInfo;
46 import org.openecomp.sdc.versioning.dao.types.Version;
47 import org.openecomp.sdc.versioning.types.VersionInfo;
48 import org.openecomp.sdc.versioning.types.VersionableEntityAction;
49 import org.openecomp.sdcrests.vendorsoftwareproducts.types.PackageInfoDto;
50 import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
51 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ValidationResponseDto;
52 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VersionSoftwareProductActionRequestDto;
53 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspComputeDto;
54 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspCreationDto;
55 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspDescriptionDto;
56 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspDetailsDto;
57 import org.openecomp.sdcrests.vsp.rest.VendorSoftwareProducts;
58 import org.openecomp.sdcrests.vsp.rest.mapping.MapComputeEntityToVspComputeDto;
59 import org.openecomp.sdcrests.vsp.rest.mapping.MapPackageInfoToPackageInfoDto;
60 import org.openecomp.sdcrests.vsp.rest.mapping.MapQuestionnaireResponseToQuestionnaireResponseDto;
61 import org.openecomp.sdcrests.vsp.rest.mapping.MapValidationResponseToDto;
62 import org.openecomp.sdcrests.vsp.rest.mapping.MapVersionedVendorSoftwareProductInfoToVspDetailsDto;
63 import org.openecomp.sdcrests.vsp.rest.mapping.MapVspDescriptionDtoToVspDetails;
64 import org.openecomp.sdcrests.vsp.rest.mapping.MapVspDetailsToVspCreationDto;
65 import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
66 import org.openecomp.sdcrests.wrappers.StringWrapperResponse;
68 import org.springframework.context.annotation.Scope;
69 import org.springframework.stereotype.Service;
71 import javax.inject.Named;
72 import javax.ws.rs.core.Response;
74 import java.io.IOException;
75 import java.util.Collection;
76 import java.util.List;
80 @Service("vendorSoftwareProducts")
81 @Scope(value = "prototype")
82 public class VendorSoftwareProductsImpl implements VendorSoftwareProducts {
84 private VendorSoftwareProductManager vendorSoftwareProductManager =
85 VspManagerFactory.getInstance().createInterface();
87 private static final Logger logger =
88 LoggerFactory.getLogger(VendorSoftwareProductsImpl.class);
90 private ActivityLogManager activityLogManager =
91 ActivityLogManagerFactory.getInstance().createInterface();
94 public Response createVsp(VspDescriptionDto vspDescriptionDto, String user) {
95 MdcUtil.initMdc(LoggerServiceName.Create_VSP.toString());
96 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CREATE_VSP
97 + vspDescriptionDto.getName());
99 VspCreationDto vspCreationDto = null;
100 switch (vspDescriptionDto.getOnboardingMethod()) {
103 VspDetails vspDetails = new MapVspDescriptionDtoToVspDetails().
104 applyMapping(vspDescriptionDto, VspDetails.class);
106 vspDetails = vendorSoftwareProductManager.createVsp(vspDetails, user);
108 MapVspDetailsToVspCreationDto mapping = new MapVspDetailsToVspCreationDto();
109 vspCreationDto = mapping.applyMapping(vspDetails, VspCreationDto.class);
112 ErrorCode onboardingMethodUpdateErrorCode = OnboardingMethodErrorBuilder
113 .getInvalidOnboardingMethodErrorBuilder();
114 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
115 LoggerTragetServiceName.ADD_VSP, ErrorLevel.ERROR.name(),
116 LoggerErrorCode.DATA_ERROR.getErrorCode(), onboardingMethodUpdateErrorCode.message());
117 throw new CoreException(onboardingMethodUpdateErrorCode);
120 return Response.ok(vspCreationDto).build();
124 public Response listVsps(String versionFilter, String user) {
125 MdcUtil.initMdc(LoggerServiceName.List_VSP.toString());
126 List<VersionedVendorSoftwareProductInfo> vspList =
127 vendorSoftwareProductManager.listVsps(versionFilter, user);
129 GenericCollectionWrapper<VspDetailsDto> results = new GenericCollectionWrapper<>();
130 if (!vspList.isEmpty()) {
131 MapVersionedVendorSoftwareProductInfoToVspDetailsDto mapper =
132 new MapVersionedVendorSoftwareProductInfoToVspDetailsDto();
133 for (VersionedVendorSoftwareProductInfo versionedVsp : vspList) {
134 results.add(mapper.applyMapping(versionedVsp, VspDetailsDto.class));
138 return Response.ok(results).build();
142 public Response getVsp(String vspId, String versionId, String user) {
143 MdcUtil.initMdc(LoggerServiceName.Get_VSP.toString());
146 VspDetails vspDetails =
147 vendorSoftwareProductManager
148 .getVsp(vspId, resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read),
151 VersionInfo versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
154 if (vspDetails.getOldVersion() != null && !"".equals(vspDetails.getOldVersion())) {
155 if (Version.valueOf(versionId).equals(versionInfo.getActiveVersion())) {
157 Version healedVersion = vendorSoftwareProductManager.callAutoHeal(vspId, versionInfo,
160 vendorSoftwareProductManager
161 .getVsp(vspId, resolveVspVersion(vspId, healedVersion.toString(), user,
162 VersionableEntityAction.Read), user);
163 versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
164 } catch (Exception e) {
170 VspDetailsDto vspDetailsDto = vspDetails == null
172 : new MapVersionedVendorSoftwareProductInfoToVspDetailsDto()
173 .applyMapping(new VersionedVendorSoftwareProductInfo(vspDetails, versionInfo),
174 VspDetailsDto.class);
176 return Response.ok(vspDetailsDto).build();
180 public Response updateVsp(String vspId, String versionId, VspDescriptionDto vspDescriptionDto,
182 MdcUtil.initMdc(LoggerServiceName.Update_VSP.toString());
183 VspDetails vspDetails =
184 new MapVspDescriptionDtoToVspDetails().applyMapping(vspDescriptionDto, VspDetails.class);
185 vspDetails.setId(vspId);
186 vspDetails.setVersion(resolveVspVersion(vspId, null, user, VersionableEntityAction.Write));
188 vendorSoftwareProductManager.updateVsp(vspDetails, user);
190 return Response.ok().build();
194 public Response deleteVsp(String vspId, String user) {
195 MdcUtil.initMdc(LoggerServiceName.Delete_VSP.toString());
196 vendorSoftwareProductManager.deleteVsp(vspId, user);
198 return Response.ok().build();
202 public Response actOnVendorSoftwareProduct(String vspId, String versionId,
203 VersionSoftwareProductActionRequestDto request,
204 String user) throws IOException {
206 switch (request.getAction()) {
208 MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Checkout_VSP.toString());
209 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_OUT_VSP + vspId);
210 vendorSoftwareProductManager.checkout(vspId, user);
213 MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Undo_Checkout_VSP.toString());
214 vendorSoftwareProductManager.undoCheckout(vspId, user);
217 MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Checkin_VSP.toString());
218 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_IN_VSP + vspId);
219 vendorSoftwareProductManager.checkin(vspId, user);
222 MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Submit_VSP.toString());
223 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.SUBMIT_VSP + vspId);
224 ValidationResponse validationResponse = vendorSoftwareProductManager.submit(vspId, user);
225 if (!validationResponse.isValid()) {
226 return Response.status(Response.Status.EXPECTATION_FAILED).entity(
227 new MapValidationResponseToDto()
228 .applyMapping(validationResponse, ValidationResponseDto.class)).build();
232 MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Create_Package.toString());
234 PackageInfo packageInfo = vendorSoftwareProductManager.createPackage(vspId,
235 resolveVspVersion(vspId, null, user, VersionableEntityAction.Read), user);
236 return Response.ok(packageInfo == null
238 : new MapPackageInfoToPackageInfoDto().applyMapping(packageInfo, PackageInfoDto.class))
243 return Response.ok().build();
247 public Response getValidationVsp(String user)
249 String validationVspId = vendorSoftwareProductManager.fetchValidationVsp(user);
250 StringWrapperResponse response = new StringWrapperResponse(validationVspId);
251 return Response.ok(response).build();
256 public Response getOrchestrationTemplate(String vspId, String versionId, String user) {
257 MdcUtil.initMdc(LoggerServiceName.Get_Uploaded_File.toString());
258 byte[] orchestrationTemplateFile =
259 vendorSoftwareProductManager
260 .getOrchestrationTemplateFile(vspId,
261 resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read), user);
263 if (orchestrationTemplateFile == null) {
264 return Response.status(Response.Status.NOT_FOUND).build();
266 Response.ResponseBuilder response = Response.ok(orchestrationTemplateFile);
267 response.header("Content-Disposition", "attachment; filename=LatestHeatPackage.zip");
268 return response.build();
272 public Response listPackages(String category, String subCategory, String user) {
273 MdcUtil.initMdc(LoggerServiceName.List_Packages.toString());
274 List<PackageInfo> packageInfoList =
275 vendorSoftwareProductManager.listPackages(category, subCategory);
277 GenericCollectionWrapper<PackageInfoDto> results = new GenericCollectionWrapper<>();
278 MapPackageInfoToPackageInfoDto mapper = new MapPackageInfoToPackageInfoDto();
280 if (packageInfoList != null) {
281 for (PackageInfo packageInfo : packageInfoList) {
282 results.add(mapper.applyMapping(packageInfo, PackageInfoDto.class));
285 return Response.ok(results).build();
289 public Response getTranslatedFile(String vspId, String versionId, String user) {
290 MdcUtil.initMdc(LoggerServiceName.Get_Translated_File.toString());
292 Version version = Version.valueOf(versionId);
293 Version resolvedVersion = version == null
294 ? getVersionInfo(vspId, VersionableEntityAction.Read, user).getLatestFinalVersion()
297 File zipFile = vendorSoftwareProductManager.getTranslatedFile(vspId, resolvedVersion, user);
299 Response.ResponseBuilder response = Response.ok(zipFile);
300 if (zipFile == null) {
301 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.IMPORT_FAIL + vspId);
302 return Response.status(Response.Status.NOT_FOUND).build();
304 response.header("Content-Disposition", "attachment; filename=" + zipFile.getName());
306 logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.IMPORT_SUCCESS + vspId);
307 return response.build();
311 public Response getQuestionnaire(String vspId, String versionId, String user) {
312 MdcUtil.initMdc(LoggerServiceName.Get_Questionnaire_VSP.toString());
313 QuestionnaireResponse questionnaireResponse =
314 vendorSoftwareProductManager.getVspQuestionnaire(vspId,
315 resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read), user);
317 if (questionnaireResponse.getErrorMessage() != null) {
318 return Response.status(Response.Status.EXPECTATION_FAILED).entity(
319 new MapQuestionnaireResponseToQuestionnaireResponseDto()
320 .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class)).build();
323 QuestionnaireResponseDto result = new MapQuestionnaireResponseToQuestionnaireResponseDto()
324 .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class);
325 return Response.ok(result).build();
329 public Response updateQuestionnaire(String questionnaireData, String vspId, String
330 versionId, String user) {
331 MdcUtil.initMdc(LoggerServiceName.Update_Questionnaire_VSP.toString());
332 vendorSoftwareProductManager.updateVspQuestionnaire(vspId,
333 resolveVspVersion(vspId, null, user, VersionableEntityAction.Write),
334 questionnaireData, user);
335 return Response.ok().build();
339 public Response heal(String vspId, String versionId, String user) {
340 vendorSoftwareProductManager.heal(vspId, Version.valueOf(versionId), user);
342 return Response.ok().build();
346 public Response getVspInformationArtifact(String vspId, String versionId, String user) {
347 MdcUtil.initMdc(LoggerServiceName.Get_Information_Artifact.toString());
348 File textInformationArtifact =
349 vendorSoftwareProductManager.getInformationArtifact(vspId,
350 resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read), user);
352 Response.ResponseBuilder response = Response.ok(textInformationArtifact);
353 if (textInformationArtifact == null) {
354 return Response.status(Response.Status.NOT_FOUND).build();
357 .header("Content-Disposition", "attachment; filename=" + textInformationArtifact.getName());
358 return response.build();
361 public Response listCompute(String vspId, String version, String user) {
363 Collection<ComputeEntity> computes = vendorSoftwareProductManager.getComputeByVsp(vspId,
364 resolveVspVersion(vspId, version, user, VersionableEntityAction.Read), user);
366 MapComputeEntityToVspComputeDto mapper = new MapComputeEntityToVspComputeDto();
367 GenericCollectionWrapper<VspComputeDto> results = new GenericCollectionWrapper<>();
368 for (ComputeEntity compute : computes) {
369 results.add(mapper.applyMapping(compute, VspComputeDto.class));
372 return Response.ok(results).build();