[SDC] Onboarding 1710 rebase.
[sdc.git] / openecomp-be / api / openecomp-sdc-rest-webapp / vendor-software-products-rest / vendor-software-products-rest-services / src / main / java / org / openecomp / sdcrests / vsp / rest / services / VendorSoftwareProductsImpl.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.sdcrests.vsp.rest.services;
22
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;
67 import org.slf4j.MDC;
68 import org.springframework.context.annotation.Scope;
69 import org.springframework.stereotype.Service;
70
71 import javax.inject.Named;
72 import javax.ws.rs.core.Response;
73 import java.io.File;
74 import java.io.IOException;
75 import java.util.Collection;
76 import java.util.List;
77
78
79 @Named
80 @Service("vendorSoftwareProducts")
81 @Scope(value = "prototype")
82 public class VendorSoftwareProductsImpl implements VendorSoftwareProducts {
83
84   private VendorSoftwareProductManager vendorSoftwareProductManager =
85       VspManagerFactory.getInstance().createInterface();
86
87   private static final Logger logger =
88       LoggerFactory.getLogger(VendorSoftwareProductsImpl.class);
89
90   private ActivityLogManager activityLogManager =
91       ActivityLogManagerFactory.getInstance().createInterface();
92
93     @Override
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());
98
99       VspCreationDto vspCreationDto = null;
100       switch (vspDescriptionDto.getOnboardingMethod()) {
101         case "HEAT":
102         case "Manual":
103           VspDetails vspDetails = new MapVspDescriptionDtoToVspDetails().
104               applyMapping(vspDescriptionDto, VspDetails.class);
105
106           vspDetails = vendorSoftwareProductManager.createVsp(vspDetails, user);
107
108           MapVspDetailsToVspCreationDto mapping = new MapVspDetailsToVspCreationDto();
109           vspCreationDto = mapping.applyMapping(vspDetails, VspCreationDto.class);
110           break;
111         default:
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);
118       }
119
120       return Response.ok(vspCreationDto).build();
121     }
122
123   @Override
124   public Response listVsps(String versionFilter, String user) {
125     MdcUtil.initMdc(LoggerServiceName.List_VSP.toString());
126     List<VersionedVendorSoftwareProductInfo> vspList =
127         vendorSoftwareProductManager.listVsps(versionFilter, user);
128
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));
135       }
136     }
137
138     return Response.ok(results).build();
139   }
140
141   @Override
142   public Response getVsp(String vspId, String versionId, String user) {
143     MdcUtil.initMdc(LoggerServiceName.Get_VSP.toString());
144
145
146     VspDetails vspDetails =
147         vendorSoftwareProductManager
148             .getVsp(vspId, resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read),
149                 user);
150
151     VersionInfo versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
152
153     //
154     if (vspDetails.getOldVersion() != null && !"".equals(vspDetails.getOldVersion())) {
155       if (Version.valueOf(versionId).equals(versionInfo.getActiveVersion())) {
156         try {
157           Version healedVersion = vendorSoftwareProductManager.callAutoHeal(vspId, versionInfo,
158               vspDetails, user);
159           vspDetails =
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) {
165           //to do
166         }
167       }
168     }
169
170     VspDetailsDto vspDetailsDto = vspDetails == null
171         ? null
172         : new MapVersionedVendorSoftwareProductInfoToVspDetailsDto()
173             .applyMapping(new VersionedVendorSoftwareProductInfo(vspDetails, versionInfo),
174                 VspDetailsDto.class);
175
176     return Response.ok(vspDetailsDto).build();
177   }
178
179   @Override
180   public Response updateVsp(String vspId, String versionId, VspDescriptionDto vspDescriptionDto,
181                             String user) {
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));
187
188     vendorSoftwareProductManager.updateVsp(vspDetails, user);
189
190     return Response.ok().build();
191   }
192
193   @Override
194   public Response deleteVsp(String vspId, String user) {
195     MdcUtil.initMdc(LoggerServiceName.Delete_VSP.toString());
196     vendorSoftwareProductManager.deleteVsp(vspId, user);
197
198     return Response.ok().build();
199   }
200
201   @Override
202   public Response actOnVendorSoftwareProduct(String vspId, String versionId,
203                                              VersionSoftwareProductActionRequestDto request,
204                                              String user) throws IOException {
205
206     switch (request.getAction()) {
207       case Checkout:
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);
211         break;
212       case Undo_Checkout:
213         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Undo_Checkout_VSP.toString());
214         vendorSoftwareProductManager.undoCheckout(vspId, user);
215         break;
216       case Checkin:
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);
220         break;
221       case Submit:
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();
229         }
230         break;
231       case Create_Package:
232         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Create_Package.toString());
233
234         PackageInfo packageInfo = vendorSoftwareProductManager.createPackage(vspId,
235             resolveVspVersion(vspId, null, user, VersionableEntityAction.Read), user);
236         return Response.ok(packageInfo == null
237             ? null
238             : new MapPackageInfoToPackageInfoDto().applyMapping(packageInfo, PackageInfoDto.class))
239             .build();
240       default:
241     }
242
243     return Response.ok().build();
244   }
245
246   @Override
247   public Response getValidationVsp(String user)
248       throws Exception {
249     String validationVspId = vendorSoftwareProductManager.fetchValidationVsp(user);
250     StringWrapperResponse response = new StringWrapperResponse(validationVspId);
251     return Response.ok(response).build();
252   }
253
254
255   @Override
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);
262
263     if (orchestrationTemplateFile == null) {
264       return Response.status(Response.Status.NOT_FOUND).build();
265     }
266     Response.ResponseBuilder response = Response.ok(orchestrationTemplateFile);
267     response.header("Content-Disposition", "attachment; filename=LatestHeatPackage.zip");
268     return response.build();
269   }
270
271   @Override
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);
276
277     GenericCollectionWrapper<PackageInfoDto> results = new GenericCollectionWrapper<>();
278     MapPackageInfoToPackageInfoDto mapper = new MapPackageInfoToPackageInfoDto();
279
280     if (packageInfoList != null) {
281       for (PackageInfo packageInfo : packageInfoList) {
282         results.add(mapper.applyMapping(packageInfo, PackageInfoDto.class));
283       }
284     }
285     return Response.ok(results).build();
286   }
287
288   @Override
289   public Response getTranslatedFile(String vspId, String versionId, String user) {
290     MdcUtil.initMdc(LoggerServiceName.Get_Translated_File.toString());
291
292     Version version = Version.valueOf(versionId);
293     Version resolvedVersion = version == null
294         ? getVersionInfo(vspId, VersionableEntityAction.Read, user).getLatestFinalVersion()
295         : version;
296
297     File zipFile = vendorSoftwareProductManager.getTranslatedFile(vspId, resolvedVersion, user);
298
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();
303     }
304     response.header("Content-Disposition", "attachment; filename=" + zipFile.getName());
305
306     logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.IMPORT_SUCCESS + vspId);
307     return response.build();
308   }
309
310   @Override
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);
316
317     if (questionnaireResponse.getErrorMessage() != null) {
318       return Response.status(Response.Status.EXPECTATION_FAILED).entity(
319           new MapQuestionnaireResponseToQuestionnaireResponseDto()
320               .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class)).build();
321     }
322
323     QuestionnaireResponseDto result = new MapQuestionnaireResponseToQuestionnaireResponseDto()
324         .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class);
325     return Response.ok(result).build();
326   }
327
328   @Override
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();
336   }
337
338   @Override
339   public Response heal(String vspId, String versionId, String user) {
340     vendorSoftwareProductManager.heal(vspId, Version.valueOf(versionId), user);
341
342     return Response.ok().build();
343   }
344
345   @Override
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);
351
352         Response.ResponseBuilder response = Response.ok(textInformationArtifact);
353         if (textInformationArtifact == null) {
354             return Response.status(Response.Status.NOT_FOUND).build();
355         }
356         response
357                 .header("Content-Disposition", "attachment; filename=" + textInformationArtifact.getName());
358         return response.build();
359     }
360
361   public Response listCompute(String vspId, String version, String user) {
362
363     Collection<ComputeEntity> computes = vendorSoftwareProductManager.getComputeByVsp(vspId,
364         resolveVspVersion(vspId, version, user, VersionableEntityAction.Read), user);
365
366     MapComputeEntityToVspComputeDto mapper = new MapComputeEntityToVspComputeDto();
367     GenericCollectionWrapper<VspComputeDto> results = new GenericCollectionWrapper<>();
368     for (ComputeEntity compute : computes) {
369       results.add(mapper.applyMapping(compute, VspComputeDto.class));
370     }
371
372     return Response.ok(results).build();
373   }
374 }