[SDC] Onboarding 1710 rebase.
[sdc.git] / openecomp-be / lib / openecomp-sdc-vendor-software-product-lib / openecomp-sdc-vendor-software-product-core / src / main / java / org / openecomp / sdc / vendorsoftwareproduct / dao / impl / zusammen / ImageDaoZusammenImpl.java
1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
2
3
4 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
5 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
6 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
7 import com.amdocs.zusammen.datatypes.Id;
8 import com.amdocs.zusammen.datatypes.SessionContext;
9 import com.amdocs.zusammen.datatypes.item.Action;
10 import com.amdocs.zusammen.datatypes.item.ElementContext;
11 import com.amdocs.zusammen.datatypes.item.Info;
12 import org.openecomp.core.utilities.file.FileUtils;
13 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
14 import org.openecomp.core.zusammen.api.ZusammenUtil;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
16 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
17 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
18 import org.openecomp.sdc.versioning.dao.types.Version;
19
20 import java.io.ByteArrayInputStream;
21 import java.util.Collection;
22 import java.util.Collections;
23 import java.util.Optional;
24 import java.util.stream.Collectors;
25
26 public class ImageDaoZusammenImpl implements ImageDao {
27
28   private ZusammenAdaptor zusammenAdaptor;
29
30   public ImageDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
31     this.zusammenAdaptor = zusammenAdaptor;
32   }
33
34   @Override
35   public void registerVersioning(String versionableEntityType) {
36   }
37
38   @Override
39   public Collection<ImageEntity> list(ImageEntity image) {
40     SessionContext context = ZusammenUtil.createSessionContext();
41     Id itemId = new Id(image.getVspId());
42     ElementContext elementContext = new ElementContext(itemId,
43         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
44         VspZusammenUtil.getVersionTag(image.getVersion()));
45
46     return listImages(context, elementContext, image);
47   }
48
49   private Collection<ImageEntity> listImages(SessionContext context,
50                                                  ElementContext elementContext, ImageEntity image) {
51     return zusammenAdaptor
52         .listElementsByName(context, elementContext, new Id(image.getComponentId()),
53             StructureElement.Images.name())
54         .stream().map(elementInfo -> mapElementInfoToImage(
55             image.getVspId(), image.getVersion(), image.getComponentId(), elementInfo))
56         .collect(Collectors.toList());
57   }
58
59   private static ImageEntity mapElementInfoToImage(String vspId, Version version,
60                                                        String componentId, ElementInfo elementInfo) {
61     ImageEntity imageEntity =
62         new ImageEntity(vspId, version, componentId, elementInfo.getId().getValue());
63     imageEntity.setCompositionData(
64         elementInfo.getInfo().getProperty(ElementPropertyName.compositionData.name()));
65     return imageEntity;
66   }
67
68   @Override
69   public void create(ImageEntity image) {
70     ZusammenElement imageElement = imageToZusammen(image, Action.CREATE);
71
72     ZusammenElement imagesElement =
73         VspZusammenUtil.buildStructuralElement(StructureElement.Images, null);
74     imagesElement.setSubElements(Collections.singletonList(imageElement));
75
76     ZusammenElement componentElement = new ZusammenElement();
77     componentElement.setElementId(new Id(image.getComponentId()));
78     componentElement.setAction(Action.IGNORE);
79     componentElement.setSubElements(Collections.singletonList(imagesElement));
80
81     SessionContext context = ZusammenUtil.createSessionContext();
82     Id itemId = new Id(image.getVspId());
83     ElementContext elementContext = new ElementContext(itemId,
84         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
85
86     Optional<Element> savedElement =
87         zusammenAdaptor.saveElement(context, elementContext, componentElement, "Create image");
88     savedElement.ifPresent(element ->
89         image.setId(element.getSubElements().iterator().next()
90             .getSubElements().iterator().next().getElementId().getValue()));
91   }
92
93   @Override
94   public void update(ImageEntity image) {
95     ZusammenElement imageElement = imageToZusammen(image, Action.UPDATE);
96
97     SessionContext context = ZusammenUtil.createSessionContext();
98     Id itemId = new Id(image.getVspId());
99     ElementContext elementContext = new ElementContext(itemId,
100         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
101     zusammenAdaptor.saveElement(context, elementContext, imageElement,
102         String.format("Update image with id %s", image.getId()));
103   }
104
105   @Override
106   public ImageEntity get(ImageEntity image) {
107     SessionContext context = ZusammenUtil.createSessionContext();
108     Id itemId = new Id(image.getVspId());
109     ElementContext elementContext = new ElementContext(itemId,
110         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
111         VspZusammenUtil.getVersionTag(image.getVersion()));
112     Optional<Element> element = zusammenAdaptor.getElement(context, elementContext, image.getId());
113
114     if (element.isPresent()) {
115       image.setCompositionData(new String(FileUtils.toByteArray(element.get().getData())));
116       return image;
117     } else {
118       return null;
119     }
120   }
121
122   @Override
123   public void delete(ImageEntity image) {
124     ZusammenElement imageElement = new ZusammenElement();
125     imageElement.setElementId(new Id(image.getId()));
126     imageElement.setAction(Action.DELETE);
127
128     SessionContext context = ZusammenUtil.createSessionContext();
129     Id itemId = new Id(image.getVspId());
130     ElementContext elementContext = new ElementContext(itemId,
131         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
132     zusammenAdaptor.saveElement(context, elementContext, imageElement,
133         String.format("Delete image with id %s", image.getId()));
134   }
135
136   @Override
137   public void deleteByVspId(String vspId, Version version) {
138     ZusammenElement imagesElement =
139         VspZusammenUtil.buildStructuralElement(StructureElement.Images, Action.DELETE);
140
141     SessionContext context = ZusammenUtil.createSessionContext();
142     Id itemId = new Id(vspId);
143     zusammenAdaptor.saveElement(context,
144         new ElementContext(itemId,
145             VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)),
146         imagesElement, String.format("Delete all images with vsp id %s", vspId));
147   }
148
149   @Override
150   public Collection<ImageEntity> listByVsp(String vspId, Version version) {
151     SessionContext context = ZusammenUtil.createSessionContext();
152     Id itemId = new Id(vspId);
153     ElementContext elementContext = new ElementContext(itemId,
154         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
155         VspZusammenUtil.getVersionTag(version));
156
157     Collection<ComponentEntity> components = ComponentDaoZusammenImpl
158         .listComponents(zusammenAdaptor, context, elementContext, vspId, version);
159
160     return components.stream()
161         .map(component ->
162             listImages(context, elementContext,
163                 new ImageEntity(vspId, version, component.getId(), null)).stream()
164                 .map(image -> getQuestionnaire(context, elementContext, image))
165                 .collect(Collectors.toList()))
166         .flatMap(Collection::stream)
167         .collect(Collectors.toList());
168   }
169
170   @Override
171   public ImageEntity getQuestionnaireData(String vspId, Version version, String componentId,
172                                             String imageId) {
173     SessionContext context = ZusammenUtil.createSessionContext();
174     Id itemId = new Id(vspId);
175     ElementContext elementContext = new ElementContext(itemId,
176         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
177         VspZusammenUtil.getVersionTag(version));
178
179     return getQuestionnaire(context, elementContext,
180         new ImageEntity(vspId, version, componentId, imageId));
181   }
182
183   private ImageEntity getQuestionnaire(SessionContext context, ElementContext elementContext,
184                                        ImageEntity image) {
185     Optional<Element> questionnaireElement = zusammenAdaptor
186         .getElementByName(context, elementContext, new Id(image.getId()),
187             StructureElement.Questionnaire.name());
188     return questionnaireElement.map(
189         element -> element.getData() == null
190             ? null
191             : new String(FileUtils.toByteArray(element.getData())))
192         .map(questionnaireData -> {
193           image.setQuestionnaireData(questionnaireData);
194           return image;
195         })
196         .orElse(null);
197   }
198
199   @Override
200   public void updateQuestionnaireData(String vspId, Version version, String componentId,
201                                       String imageId, String questionnaireData) {
202     ZusammenElement questionnaireElement =
203         imageQuestionnaireToZusammen(questionnaireData, Action.UPDATE);
204
205     ZusammenElement imageElement = new ZusammenElement();
206     imageElement.setAction(Action.IGNORE);
207     imageElement.setElementId(new Id(imageId));
208     imageElement.setSubElements(Collections.singletonList(questionnaireElement));
209
210     SessionContext context = ZusammenUtil.createSessionContext();
211     Id itemId = new Id(vspId);
212     ElementContext elementContext = new ElementContext(itemId,
213         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
214     zusammenAdaptor.saveElement(context, elementContext, imageElement, "Update image "
215         + "questionnaire");
216   }
217
218
219
220   private ZusammenElement imageToZusammen(ImageEntity image, Action action) {
221     ZusammenElement imageElement = buildImageElement(image, action);
222     if (action == Action.CREATE) {
223       imageElement.setSubElements(Collections.singletonList(
224           imageQuestionnaireToZusammen(image.getQuestionnaireData(), Action.CREATE)));
225     }
226     return imageElement;
227   }
228
229   private ZusammenElement imageQuestionnaireToZusammen(String questionnaireData,
230                                                          Action action) {
231     ZusammenElement questionnaireElement =
232         VspZusammenUtil.buildStructuralElement(StructureElement.Questionnaire, action);
233     questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
234     return questionnaireElement;
235   }
236
237   private ZusammenElement buildImageElement(ImageEntity image, Action action) {
238     ZusammenElement imageElement = new ZusammenElement();
239     imageElement.setAction(action);
240     if (image.getId() != null) {
241       imageElement.setElementId(new Id(image.getId()));
242     }
243     Info info = new Info();
244     info.addProperty(ElementPropertyName.type.name(), ElementType.Image);
245     info.addProperty(ElementPropertyName.compositionData.name(), image.getCompositionData());
246     imageElement.setInfo(info);
247     imageElement.setData(new ByteArrayInputStream(image.getCompositionData().getBytes()));
248     return imageElement;
249   }
250
251
252 }