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