Add collaboration feature
[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 / ImagesImpl.java
1 package org.openecomp.sdcrests.vsp.rest.services;
2
3
4 import org.apache.commons.collections.CollectionUtils;
5 import org.openecomp.sdc.logging.context.MdcUtil;
6 import org.openecomp.sdc.logging.types.LoggerServiceName;
7 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
8 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
9 import org.openecomp.sdc.vendorsoftwareproduct.ImageManager;
10 import org.openecomp.sdc.vendorsoftwareproduct.ImageManagerFactory;
11 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
12 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
13 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
14 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
15 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
16 import org.openecomp.sdc.versioning.dao.types.Version;
17 import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityValidationDataDto;
18 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageCreationDto;
19 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageDto;
20 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageRequestDto;
21 import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
22 import org.openecomp.sdcrests.vsp.rest.Images;
23 import org.openecomp.sdcrests.vsp.rest.mapping.MapCompositionEntityValidationDataToDto;
24 import org.openecomp.sdcrests.vsp.rest.mapping.MapImageEntityToImageCreationDto;
25 import org.openecomp.sdcrests.vsp.rest.mapping.MapImageEntityToImageDto;
26 import org.openecomp.sdcrests.vsp.rest.mapping.MapImageRequestDtoToImageEntity;
27 import org.openecomp.sdcrests.vsp.rest.mapping.MapQuestionnaireResponseToQuestionnaireResponseDto;
28 import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
29 import org.springframework.context.annotation.Scope;
30 import org.springframework.stereotype.Service;
31
32 import javax.inject.Named;
33 import javax.ws.rs.core.Response;
34 import java.util.Collection;
35
36
37 @Named
38 @Service("images")
39 @Scope(value = "prototype")
40 public class ImagesImpl implements Images {
41
42   private ImageManager imageManager = ImageManagerFactory.getInstance().createInterface();
43   private ComponentManager componentManager =
44       ComponentManagerFactory.getInstance().createInterface();
45
46   @Override
47   public Response create(ImageRequestDto request, String vspId, String versionId,
48                          String componentId, String user) {
49     MdcUtil.initMdc(LoggerServiceName.Create_Image.toString());
50     ImageEntity image =
51         new MapImageRequestDtoToImageEntity().applyMapping(request, ImageEntity.class);
52     image.setVspId(vspId);
53     image.setComponentId(componentId);
54     image.setVersion(new Version(versionId));
55     componentManager.validateComponentExistence(vspId, image.getVersion(), componentId);
56     ImageEntity createdImage = imageManager.createImage(image);
57     MapImageEntityToImageCreationDto mapping = new MapImageEntityToImageCreationDto();
58     ImageCreationDto createdImageDto = mapping.applyMapping(createdImage, ImageCreationDto.class);
59     return Response
60         .ok(createdImage != null ? createdImageDto : null)
61         .build();
62   }
63
64   @Override
65   public Response getImageSchema(String vspId, String versionId, String componentId, String user) {
66     MdcUtil.initMdc(LoggerServiceName.GET_Image_Schema.toString());
67     CompositionEntityResponse<Image> response = imageManager.getImageSchema(vspId);
68     return Response.ok(response).build();
69   }
70
71   @Override
72   public Response get(String vspId, String versionId, String componentId, String imageId,
73                       String user) {
74     MdcUtil.initMdc(LoggerServiceName.GET_Image.toString());
75     Version version = new Version(versionId);
76     componentManager.validateComponentExistence(vspId, version, componentId);
77     CompositionEntityResponse<Image> response =
78         imageManager.getImage(vspId, version, componentId, imageId);
79
80     return Response.ok(response).build();
81   }
82
83   @Override
84   public Response list(String vspId, String versionId, String componentId, String user) {
85     MdcUtil.initMdc(LoggerServiceName.List_Images.toString());
86     Version vspVersion = new Version(versionId);
87     componentManager.validateComponentExistence(vspId, vspVersion, componentId);
88     Collection<ImageEntity> images = imageManager.listImages(vspId, vspVersion, componentId);
89
90     MapImageEntityToImageDto mapper = new MapImageEntityToImageDto();
91     GenericCollectionWrapper<ImageDto> results = new GenericCollectionWrapper<>();
92     for (ImageEntity image : images) {
93       results.add(mapper.applyMapping(image, ImageDto.class));
94     }
95
96     return Response.ok(results).build();
97   }
98
99   @Override
100   public Response delete(String vspId, String versionId, String componentId, String imageId,
101                          String user) {
102     MdcUtil.initMdc(LoggerServiceName.Delete_Image.toString());
103     Version vspVersion = new Version(versionId);
104     componentManager.validateComponentExistence(vspId, vspVersion, componentId);
105     imageManager.deleteImage(vspId, vspVersion, componentId, imageId);
106     return Response.ok().build();
107   }
108
109   @Override
110   public Response update(ImageRequestDto request, String vspId, String versionId,
111                          String componentId, String imageId, String user) {
112     MdcUtil.initMdc(LoggerServiceName.Update_Image.toString());
113     ImageEntity imageEntity = new MapImageRequestDtoToImageEntity().applyMapping(request,
114         ImageEntity.class);
115     imageEntity.setVspId(vspId);
116     imageEntity.setVersion(new Version(versionId));
117     imageEntity.setComponentId(componentId);
118     imageEntity.setId(imageId);
119     componentManager.validateComponentExistence(vspId, imageEntity.getVersion(), componentId);
120
121     CompositionEntityValidationData validationData = imageManager.updateImage(imageEntity);
122     return validationData != null && CollectionUtils.isNotEmpty(validationData.getErrors())
123         ? Response.status(Response.Status.EXPECTATION_FAILED).entity(
124         new MapCompositionEntityValidationDataToDto()
125             .applyMapping(validationData, CompositionEntityValidationDataDto.class)).build() :
126         Response.ok().build();
127   }
128
129   @Override
130   public Response getQuestionnaire(String vspId, String versionId, String componentId,
131                                    String imageId, String user) {
132     MdcUtil.initMdc(LoggerServiceName.Get_Questionnaire_Compute.toString());
133     Version vspVersion = new Version(versionId);
134     componentManager.validateComponentExistence(vspId, vspVersion, componentId);
135     QuestionnaireResponse questionnaireResponse =
136         imageManager.getImageQuestionnaire(vspId, vspVersion, componentId, imageId);
137
138     QuestionnaireResponseDto result = new MapQuestionnaireResponseToQuestionnaireResponseDto()
139         .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class);
140     return Response.ok(result).build();
141
142   }
143
144   @Override
145   public Response updateQuestionnaire(String questionnaireData, String vspId, String versionId,
146                                       String componentId, String imageId, String user) {
147     MdcUtil.initMdc(LoggerServiceName.Update_Questionnaire_Compute.toString());
148     Version version = new Version(versionId);
149     componentManager.validateComponentExistence(vspId, version, componentId);
150     imageManager.updateImageQuestionnaire(vspId, version, componentId, imageId, questionnaireData);
151     return Response.ok().build();
152   }
153
154 }