[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 / OrchestrationTemplateCandidateImpl.java
1 package org.openecomp.sdcrests.vsp.rest.services;
2
3 import org.apache.commons.beanutils.BeanUtils;
4 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
5 import org.openecomp.sdc.common.errors.Messages;
6 import org.openecomp.sdc.logging.api.Logger;
7 import org.openecomp.sdc.logging.api.LoggerFactory;
8 import org.openecomp.sdc.logging.context.MdcUtil;
9 import org.openecomp.sdc.logging.messages.AuditMessages;
10 import org.openecomp.sdc.logging.types.LoggerServiceName;
11 import org.openecomp.sdc.vendorsoftwareproduct.OrchestrationTemplateCandidateManager;
12 import org.openecomp.sdc.vendorsoftwareproduct.OrchestrationTemplateCandidateManagerFactory;
13 import org.openecomp.sdc.vendorsoftwareproduct.types.FileDataStructureDto;
14 import org.openecomp.sdc.vendorsoftwareproduct.types.OrchestrationTemplateActionResponse;
15 import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
16 import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
17 import org.openecomp.sdc.vendorsoftwareproduct.types.candidateheat.FilesDataStructure;
18 import org.openecomp.sdc.versioning.types.VersionableEntityAction;
19 import org.openecomp.sdcrests.vendorsoftwareproducts.types.OrchestrationTemplateActionResponseDto;
20 import org.openecomp.sdcrests.vendorsoftwareproducts.types.UploadFileResponseDto;
21 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ValidationResponseDto;
22 import org.openecomp.sdcrests.vsp.rest.OrchestrationTemplateCandidate;
23 import org.openecomp.sdcrests.vsp.rest.mapping.MapUploadFileResponseToUploadFileResponseDto;
24 import org.openecomp.sdcrests.vsp.rest.mapping.MapValidationResponseToDto;
25 import org.springframework.context.annotation.Scope;
26 import org.springframework.stereotype.Service;
27
28 import javax.inject.Named;
29 import javax.ws.rs.core.Response;
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.lang.reflect.InvocationTargetException;
33 import java.util.Optional;
34
35 @Named
36 @Service("orchestrationTemplateCandidate")
37 @Scope(value = "prototype")
38 public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplateCandidate {
39
40   private OrchestrationTemplateCandidateManager candidateManager =
41       OrchestrationTemplateCandidateManagerFactory.getInstance().createInterface();
42   private static final Logger logger =
43           LoggerFactory.getLogger(OrchestrationTemplateCandidateImpl.class);
44
45   @Override
46   public Response upload(String vspId, String versionId, InputStream heatFileToUpload,
47                          String user) {
48     MdcUtil.initMdc(LoggerServiceName.Upload_File.toString());
49     logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.UPLOAD_HEAT + vspId);
50
51     UploadFileResponse uploadFileResponse = candidateManager
52         .upload(vspId, resolveVspVersion(vspId, null, user, VersionableEntityAction
53             .Write), heatFileToUpload, user);
54     UploadFileResponseDto uploadFileResponseDto = new MapUploadFileResponseToUploadFileResponseDto()
55         .applyMapping(uploadFileResponse, UploadFileResponseDto.class);
56
57     return Response.ok(uploadFileResponseDto).build();
58   }
59
60   @Override
61   public Response get(String vspId, String versionId, String user) throws IOException {
62     Optional<byte[]> zipFile =
63         candidateManager
64             .get(vspId, resolveVspVersion(vspId, null, user, VersionableEntityAction.Read), user);
65
66     if (!zipFile.isPresent()) {
67       return Response.status(Response.Status.NOT_FOUND).build();
68     }
69     Response.ResponseBuilder response = Response.ok(zipFile.get());
70     response.header("Content-Disposition", "attachment; filename=HeatCandidate.zip");
71     return response.build();
72   }
73
74   @Override
75   public Response process(String vspId, String versionId, String user)
76       throws InvocationTargetException, IllegalAccessException {
77
78     OrchestrationTemplateActionResponse response =
79         candidateManager
80             .process(vspId, resolveVspVersion(vspId, null, user, VersionableEntityAction.Write),
81                 user);
82     OrchestrationTemplateActionResponseDto responseDto =
83         new OrchestrationTemplateActionResponseDto();
84     BeanUtils.copyProperties(responseDto, response);
85     return Response.ok(responseDto).build();
86   }
87
88   @Override
89   public Response updateFilesDataStructure(
90       String vspId, String versionId, FileDataStructureDto fileDataStructureDto, String user)
91       throws Exception {
92
93     FilesDataStructure fileDataStructure = new FilesDataStructure();
94     try {
95       BeanUtils.copyProperties(fileDataStructure, fileDataStructureDto);
96     } catch (IllegalAccessException | InvocationTargetException exception) {
97       String errorWithParameters = ErrorMessagesFormatBuilder
98           .getErrorWithParameters(Messages.MAPPING_OBJECTS_FAILURE.getErrorMessage(),
99               fileDataStructureDto.toString(), fileDataStructure.toString());
100       throw new Exception(errorWithParameters, exception);
101     }
102     ValidationResponse response = candidateManager
103         .updateFilesDataStructure(vspId,
104             resolveVspVersion(vspId, null, user, VersionableEntityAction
105                 .Write), user, fileDataStructure);
106
107     if (!response.isValid()) {
108       return Response.status(Response.Status.EXPECTATION_FAILED).entity(
109           new MapValidationResponseToDto()
110               .applyMapping(response, ValidationResponseDto.class)).build();
111     }
112     return Response.ok(fileDataStructureDto).build();
113   }
114
115   @Override
116   public Response getFilesDataStructure(String vspId, String versionId, String user)
117       throws Exception {
118     Optional<FilesDataStructure> filesDataStructure = candidateManager
119         .getFilesDataStructure(vspId, resolveVspVersion(vspId, null, user, VersionableEntityAction
120             .Read), user);
121     FileDataStructureDto fileDataStructureDto = new FileDataStructureDto();
122     if (filesDataStructure.isPresent()) {
123       try {
124         BeanUtils.copyProperties(fileDataStructureDto, filesDataStructure.get());
125       } catch (IllegalAccessException | InvocationTargetException exception) {
126         String errorWithParameters = ErrorMessagesFormatBuilder
127             .getErrorWithParameters(Messages.MAPPING_OBJECTS_FAILURE.getErrorMessage(),
128                 filesDataStructure.toString(), fileDataStructureDto.toString());
129         throw new Exception(errorWithParameters, exception);
130       }
131     }
132     return Response.ok(fileDataStructureDto).build();
133   }
134 }