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