[SDC-29] Amdocs OnBoard 1707 initial commit.
[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.logging.api.Logger;
26 import org.openecomp.sdc.logging.api.LoggerFactory;
27 import org.openecomp.sdc.logging.context.MdcUtil;
28 import org.openecomp.sdc.logging.messages.AuditMessages;
29 import org.openecomp.sdc.logging.types.LoggerConstants;
30 import org.openecomp.sdc.logging.types.LoggerServiceName;
31 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
32 import org.openecomp.sdc.vendorsoftwareproduct.VspManagerFactory;
33 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.PackageInfo;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
35 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
36 import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
37 import org.openecomp.sdc.vendorsoftwareproduct.types.VersionedVendorSoftwareProductInfo;
38 import org.openecomp.sdc.versioning.dao.types.Version;
39 import org.openecomp.sdc.versioning.types.VersionInfo;
40 import org.openecomp.sdc.versioning.types.VersionableEntityAction;
41 import org.openecomp.sdcrests.vendorsoftwareproducts.types.*;
42 import org.openecomp.sdcrests.vsp.rest.VendorSoftwareProducts;
43 import org.openecomp.sdcrests.vsp.rest.mapping.*;
44 import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
45 import org.openecomp.sdcrests.wrappers.StringWrapperResponse;
46 import org.slf4j.MDC;
47 import org.springframework.context.annotation.Scope;
48 import org.springframework.stereotype.Service;
49
50 import javax.inject.Named;
51 import javax.ws.rs.core.Response;
52 import java.io.File;
53 import java.io.IOException;
54 import java.util.List;
55
56
57 @Named
58 @Service("vendorSoftwareProducts")
59 @Scope(value = "prototype")
60 public class VendorSoftwareProductsImpl implements VendorSoftwareProducts {
61
62     private VendorSoftwareProductManager vendorSoftwareProductManager =
63             VspManagerFactory.getInstance().createInterface();
64
65     private static final Logger logger =
66             LoggerFactory.getLogger(VendorSoftwareProductsImpl.class);
67
68     private ActivityLogManager activityLogManager =
69             ActivityLogManagerFactory.getInstance().createInterface();
70
71     @Override
72     public Response createVsp(VspDescriptionDto vspDescriptionDto, String user) {
73         MdcUtil.initMdc(LoggerServiceName.Create_VSP.toString());
74         logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CREATE_VSP + vspDescriptionDto.getName());
75
76         VspDetails vspDetails =
77                 new MapVspDescriptionDtoToVspDetails().applyMapping(vspDescriptionDto, VspDetails.class);
78
79         vspDetails = vendorSoftwareProductManager.createVsp(vspDetails, user);
80
81         MspVspDetailsToVspCreationDto mapping = new MspVspDetailsToVspCreationDto();
82         VspCreationDto vspCreationDto = mapping.applyMapping(vspDetails, VspCreationDto.class);
83
84         return Response.ok(vspCreationDto).build();
85     }
86
87     @Override
88     public Response listVsps(String versionFilter, String user) {
89         MdcUtil.initMdc(LoggerServiceName.List_VSP.toString());
90         List<VersionedVendorSoftwareProductInfo> vspList =
91                 vendorSoftwareProductManager.listVsps(versionFilter, user);
92
93         GenericCollectionWrapper<VspDetailsDto> results = new GenericCollectionWrapper<>();
94         if (!vspList.isEmpty()) {
95             MapVersionedVendorSoftwareProductInfoToVspDetailsDto mapper =
96                     new MapVersionedVendorSoftwareProductInfoToVspDetailsDto();
97             for (VersionedVendorSoftwareProductInfo versionedVsp : vspList) {
98                 results.add(mapper.applyMapping(versionedVsp, VspDetailsDto.class));
99             }
100         }
101
102         return Response.ok(results).build();
103     }
104
105   @Override
106   public Response getVsp(String vspId, String versionId, String user) {
107     MdcUtil.initMdc(LoggerServiceName.Get_VSP.toString());
108
109
110     VspDetails vspDetails =
111         vendorSoftwareProductManager
112             .getVsp(vspId, resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read),
113                 user);
114
115     VersionInfo versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
116
117     //
118     if(vspDetails.getOldVersion()!=null && !"".equals(vspDetails.getOldVersion())) {
119       if (Version.valueOf(versionId).equals(versionInfo.getActiveVersion())) {
120         try {
121           Version healedVersion = vendorSoftwareProductManager.callAutoHeal(vspId, versionInfo,
122               vspDetails , user);
123           vspDetails =
124               vendorSoftwareProductManager
125                   .getVsp(vspId, resolveVspVersion(vspId, healedVersion.toString(), user,
126                       VersionableEntityAction.Read),user);
127           versionInfo = getVersionInfo(vspId, VersionableEntityAction.Read, user);
128         } catch (Exception e) {
129           //to do
130         }
131       }
132     }
133
134     VspDetailsDto vspDetailsDto = vspDetails == null
135         ? null
136         : new MapVersionedVendorSoftwareProductInfoToVspDetailsDto()
137             .applyMapping(new VersionedVendorSoftwareProductInfo(vspDetails, versionInfo),
138                 VspDetailsDto.class);
139
140         return Response.ok(vspDetailsDto).build();
141     }
142
143   @Override
144   public Response updateVsp(String vspId, String versionId, VspDescriptionDto vspDescriptionDto,
145                             String user) {
146     MdcUtil.initMdc(LoggerServiceName.Update_VSP.toString());
147     VspDetails vspDetails =
148         new MapVspDescriptionDtoToVspDetails().applyMapping(vspDescriptionDto, VspDetails.class);
149     vspDetails.setId(vspId);
150     vspDetails.setVersion(resolveVspVersion(vspId, null, user, VersionableEntityAction.Write));
151
152         vendorSoftwareProductManager.updateVsp(vspDetails, user);
153
154         return Response.ok().build();
155     }
156
157     @Override
158     public Response deleteVsp(String vspId, String user) {
159         MdcUtil.initMdc(LoggerServiceName.Delete_VSP.toString());
160         vendorSoftwareProductManager.deleteVsp(vspId, user);
161
162         return Response.ok().build();
163     }
164
165     @Override
166     public Response actOnVendorSoftwareProduct(String vspId, String versionId,
167                                                VersionSoftwareProductActionRequestDto request,
168                                                String user) throws IOException {
169
170     switch (request.getAction()) {
171       case Checkout:
172         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Checkout_VSP.toString());
173         logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_OUT_VSP + vspId);
174         vendorSoftwareProductManager.checkout(vspId, user);
175         break;
176       case Undo_Checkout:
177         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Undo_Checkout_VSP.toString());
178         vendorSoftwareProductManager.undoCheckout(vspId, user);
179         break;
180       case Checkin:
181         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Checkin_VSP.toString());
182         logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_IN_VSP + vspId);
183         vendorSoftwareProductManager.checkin(vspId, user);
184         break;
185       case Submit:
186         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Submit_VSP.toString());
187         logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.SUBMIT_VSP + vspId);
188         ValidationResponse validationResponse = vendorSoftwareProductManager.submit(vspId, user);
189         if (!validationResponse.isValid()) {
190           return Response.status(Response.Status.EXPECTATION_FAILED).entity(
191               new MapValidationResponseToDto()
192                   .applyMapping(validationResponse, ValidationResponseDto.class)).build();
193         }
194         break;
195       case Create_Package:
196         MDC.put(LoggerConstants.SERVICE_NAME, LoggerServiceName.Create_Package.toString());
197
198         PackageInfo packageInfo = vendorSoftwareProductManager.createPackage(vspId,
199             resolveVspVersion(vspId, null, user, VersionableEntityAction.Read), user);
200         return Response.ok(packageInfo == null
201             ? null
202             : new MapPackageInfoToPackageInfoDto().applyMapping(packageInfo, PackageInfoDto.class))
203             .build();
204       default:
205     }
206
207     return Response.ok().build();
208   }
209
210     @Override
211     public Response getValidationVsp(String user)
212             throws Exception {
213         String validationVspId = vendorSoftwareProductManager.fetchValidationVsp(user);
214         StringWrapperResponse response = new StringWrapperResponse(validationVspId);
215         return Response.ok(response).build();
216     }
217
218
219     @Override
220     public Response getOrchestrationTemplate(String vspId, String versionId, String user) {
221         MdcUtil.initMdc(LoggerServiceName.Get_Uploaded_File.toString());
222         byte[] orchestrationTemplateFile =
223                 vendorSoftwareProductManager
224                         .getOrchestrationTemplateFile(vspId,
225                                 resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read), user);
226
227         if (orchestrationTemplateFile == null) {
228             return Response.status(Response.Status.NOT_FOUND).build();
229         }
230         Response.ResponseBuilder response = Response.ok(orchestrationTemplateFile);
231         response.header("Content-Disposition", "attachment; filename=LatestHeatPackage.zip");
232         return response.build();
233     }
234
235     @Override
236     public Response listPackages(String category, String subCategory, String user) {
237         MdcUtil.initMdc(LoggerServiceName.List_Packages.toString());
238         List<PackageInfo> packageInfoList =
239                 vendorSoftwareProductManager.listPackages(category, subCategory);
240
241         GenericCollectionWrapper<PackageInfoDto> results = new GenericCollectionWrapper<>();
242         MapPackageInfoToPackageInfoDto mapper = new MapPackageInfoToPackageInfoDto();
243
244         if (packageInfoList != null) {
245             for (PackageInfo packageInfo : packageInfoList) {
246                 results.add(mapper.applyMapping(packageInfo, PackageInfoDto.class));
247             }
248         }
249         return Response.ok(results).build();
250     }
251
252   @Override
253   public Response getTranslatedFile(String vspId, String version, String user) {
254     MdcUtil.initMdc(LoggerServiceName.Get_Translated_File.toString());
255     File zipFile =
256         vendorSoftwareProductManager.getTranslatedFile(vspId,Version.valueOf(version), user);
257
258     Version versionObj = Version.valueOf(version);
259     Version resolvedVersion = versionObj == null
260         ? getVersionInfo(vspId, VersionableEntityAction.Read, user).getLatestFinalVersion()
261         : versionObj;
262
263
264         Response.ResponseBuilder response = Response.ok(zipFile);
265         if (zipFile == null) {
266             logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.IMPORT_FAIL + vspId);
267             return Response.status(Response.Status.NOT_FOUND).build();
268         }
269         response.header("Content-Disposition", "attachment; filename=" + zipFile.getName());
270
271         logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.IMPORT_SUCCESS + vspId);
272         return response.build();
273     }
274
275     @Override
276     public Response getQuestionnaire(String vspId, String versionId, String user) {
277         MdcUtil.initMdc(LoggerServiceName.Get_Questionnaire_VSP.toString());
278         QuestionnaireResponse questionnaireResponse =
279                 vendorSoftwareProductManager.getVspQuestionnaire(vspId,
280                         resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read), user);
281
282         if (questionnaireResponse.getErrorMessage() != null) {
283             return Response.status(Response.Status.EXPECTATION_FAILED).entity(
284                     new MapQuestionnaireResponseToQuestionnaireResponseDto()
285                             .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class)).build();
286         }
287
288         QuestionnaireResponseDto result = new MapQuestionnaireResponseToQuestionnaireResponseDto()
289                 .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class);
290         return Response.ok(result).build();
291     }
292
293   @Override
294   public Response updateQuestionnaire(String questionnaireData, String vspId, String
295       versionId, String user) {
296     MdcUtil.initMdc(LoggerServiceName.Update_Questionnaire_VSP.toString());
297     vendorSoftwareProductManager.updateVspQuestionnaire(vspId,
298         resolveVspVersion(vspId, null, user, VersionableEntityAction.Write),
299         questionnaireData, user);
300     return Response.ok().build();
301   }
302
303     @Override
304     public Response heal(String vspId, String versionId, String user) {
305         vendorSoftwareProductManager.heal(vspId, Version.valueOf(versionId), user);
306
307         return Response.ok().build();
308     }
309
310     @Override
311     public Response getVspInformationArtifact(String vspId, String versionId, String user) {
312         MdcUtil.initMdc(LoggerServiceName.Get_Information_Artifact.toString());
313         File textInformationArtifact =
314                 vendorSoftwareProductManager.getInformationArtifact(vspId,
315                         resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read), user);
316
317         Response.ResponseBuilder response = Response.ok(textInformationArtifact);
318         if (textInformationArtifact == null) {
319             return Response.status(Response.Status.NOT_FOUND).build();
320         }
321         response
322                 .header("Content-Disposition", "attachment; filename=" + textInformationArtifact.getName());
323         return response.build();
324     }
325 }