[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 / ComputeDaoZusammenImpl.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.ComputeDao;
16 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
17 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
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 ComputeDaoZusammenImpl implements ComputeDao {
27
28   private ZusammenAdaptor zusammenAdaptor;
29
30   public ComputeDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
31     this.zusammenAdaptor = zusammenAdaptor;
32   }
33
34   @Override
35   public void registerVersioning(String versionableEntityType) {
36   }
37
38   @Override
39   public Collection<ComputeEntity> list(ComputeEntity compute) {
40     SessionContext context = ZusammenUtil.createSessionContext();
41     Id itemId = new Id(compute.getVspId());
42     ElementContext elementContext = new ElementContext(itemId,
43         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
44         VspZusammenUtil.getVersionTag(compute.getVersion()));
45
46     return listComputes(context, elementContext, compute);
47   }
48
49   private Collection<ComputeEntity> listComputes(SessionContext context,
50                                             ElementContext elementContext, ComputeEntity compute) {
51     return zusammenAdaptor
52         .listElementsByName(context, elementContext, new Id(compute.getComponentId()),
53             StructureElement.Computes.name())
54         .stream().map(elementInfo -> mapElementInfoToCompute(
55             compute.getVspId(), compute.getVersion(), compute.getComponentId(), elementInfo))
56         .collect(Collectors.toList());
57   }
58
59   private static ComputeEntity mapElementInfoToCompute(String vspId, Version version,
60                                                      String componentId, ElementInfo elementInfo) {
61     ComputeEntity componentEntity =
62         new ComputeEntity(vspId, version, componentId, elementInfo.getId().getValue());
63     componentEntity.setCompositionData(
64         elementInfo.getInfo().getProperty(ElementPropertyName.compositionData.name()));
65     return componentEntity;
66   }
67
68   @Override
69   public void create(ComputeEntity compute) {
70     ZusammenElement computeElement = computeToZusammen(compute, Action.CREATE);
71
72     ZusammenElement computesElement =
73         VspZusammenUtil.buildStructuralElement(StructureElement.Computes, null);
74     computesElement.setSubElements(Collections.singletonList(computeElement));
75
76     ZusammenElement componentElement = new ZusammenElement();
77     componentElement.setElementId(new Id(compute.getComponentId()));
78     componentElement.setAction(Action.IGNORE);
79     componentElement.setSubElements(Collections.singletonList(computesElement));
80
81     SessionContext context = ZusammenUtil.createSessionContext();
82     Id itemId = new Id(compute.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 compute");
88     savedElement.ifPresent(element ->
89         compute.setId(element.getSubElements().iterator().next()
90             .getSubElements().iterator().next().getElementId().getValue()));
91   }
92
93   @Override
94   public void update(ComputeEntity compute) {
95     ZusammenElement computeElement = computeToZusammen(compute, Action.UPDATE);
96
97     SessionContext context = ZusammenUtil.createSessionContext();
98     Id itemId = new Id(compute.getVspId());
99     ElementContext elementContext = new ElementContext(itemId,
100         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
101     zusammenAdaptor.saveElement(context, elementContext, computeElement,
102         String.format("Update compute with id %s", compute.getId()));
103   }
104
105   @Override
106   public ComputeEntity get(ComputeEntity compute) {
107     SessionContext context = ZusammenUtil.createSessionContext();
108     Id itemId = new Id(compute.getVspId());
109     ElementContext elementContext = new ElementContext(itemId,
110         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
111         VspZusammenUtil.getVersionTag(compute.getVersion()));
112     Optional<Element> element = zusammenAdaptor.getElement(context, elementContext, compute.getId());
113
114     if (element.isPresent()) {
115       compute.setCompositionData(new String(FileUtils.toByteArray(element.get().getData())));
116       return compute;
117     } else {
118       return null;
119     }
120   }
121
122   @Override
123   public void delete(ComputeEntity compute) {
124     ZusammenElement computeElement = new ZusammenElement();
125     computeElement.setElementId(new Id(compute.getId()));
126     computeElement.setAction(Action.DELETE);
127
128     SessionContext context = ZusammenUtil.createSessionContext();
129     Id itemId = new Id(compute.getVspId());
130     ElementContext elementContext = new ElementContext(itemId,
131         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
132     zusammenAdaptor.saveElement(context, elementContext, computeElement,
133         String.format("Delete compute with id %s", compute.getId()));
134   }
135
136   @Override
137   public ComputeEntity getQuestionnaireData(String vspId, Version version, String componentId,
138                                         String computeId) {
139     SessionContext context = ZusammenUtil.createSessionContext();
140     Id itemId = new Id(vspId);
141     ElementContext elementContext = new ElementContext(itemId,
142         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
143         VspZusammenUtil.getVersionTag(version));
144
145     return getQuestionnaire(context, elementContext,
146         new ComputeEntity(vspId, version, componentId, computeId));
147   }
148
149   private ComputeEntity getQuestionnaire(SessionContext context, ElementContext elementContext,
150                                      ComputeEntity compute) {
151     Optional<Element> questionnaireElement = zusammenAdaptor
152         .getElementByName(context, elementContext, new Id(compute.getId()),
153             StructureElement.Questionnaire.name());
154     return questionnaireElement.map(
155         element -> element.getData() == null
156             ? null
157             : new String(FileUtils.toByteArray(element.getData())))
158         .map(questionnaireData -> {
159           compute.setQuestionnaireData(questionnaireData);
160           return compute;
161         })
162         .orElse(null);
163   }
164
165   @Override
166   public void updateQuestionnaireData(String vspId, Version version, String componentId,
167                                       String computeId, String questionnaireData) {
168     ZusammenElement questionnaireElement =
169         computeQuestionnaireToZusammen(questionnaireData, Action.UPDATE);
170
171     ZusammenElement computeElement = new ZusammenElement();
172     computeElement.setAction(Action.IGNORE);
173     computeElement.setElementId(new Id(computeId));
174     computeElement.setSubElements(Collections.singletonList(questionnaireElement));
175
176     SessionContext context = ZusammenUtil.createSessionContext();
177     Id itemId = new Id(vspId);
178     ElementContext elementContext = new ElementContext(itemId,
179         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
180     zusammenAdaptor.saveElement(context, elementContext, computeElement, "Update compute "
181         + "questionnaire");
182   }
183
184   @Override
185   public Collection<ComputeEntity> listByVsp(String vspId, Version version) {
186     SessionContext context = ZusammenUtil.createSessionContext();
187     Id itemId = new Id(vspId);
188     ElementContext elementContext = new ElementContext(itemId,
189         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
190         VspZusammenUtil.getVersionTag(version));
191
192     Collection<ComponentEntity> components = ComponentDaoZusammenImpl
193         .listComponents(zusammenAdaptor, context, elementContext, vspId, version);
194
195     return components.stream()
196         .map(component ->
197             listComputes(context, elementContext,
198                 new ComputeEntity(vspId, version, component.getId(), null)).stream()
199                 .map(compute -> getQuestionnaire(context, elementContext, compute))
200                 .collect(Collectors.toList()))
201         .flatMap(Collection::stream)
202         .collect(Collectors.toList());
203   }
204
205   @Override
206   public void deleteAll(String vspId, Version version) {
207     ZusammenElement computesElement =
208         VspZusammenUtil.buildStructuralElement(StructureElement.Computes, Action.DELETE);
209
210     SessionContext context = ZusammenUtil.createSessionContext();
211     Id itemId = new Id(vspId);
212     zusammenAdaptor.saveElement(context,
213         new ElementContext(itemId,
214             VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)),
215         computesElement, "Delete all computes");
216   }
217
218   private ZusammenElement computeToZusammen(ComputeEntity compute, Action action) {
219     ZusammenElement computeElement = buildComputeElement(compute, action);
220     if (action == Action.CREATE) {
221       computeElement.setSubElements(Collections.singletonList(
222           computeQuestionnaireToZusammen(compute.getQuestionnaireData(), Action.CREATE)));
223     }
224     return computeElement;
225   }
226
227   private ZusammenElement computeQuestionnaireToZusammen(String questionnaireData,
228                                                      Action action) {
229     ZusammenElement questionnaireElement =
230         VspZusammenUtil.buildStructuralElement(StructureElement.Questionnaire, action);
231     questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
232     return questionnaireElement;
233   }
234
235   private ZusammenElement buildComputeElement(ComputeEntity compute, Action action) {
236     ZusammenElement computeElement = new ZusammenElement();
237     computeElement.setAction(action);
238     if (compute.getId() != null) {
239       computeElement.setElementId(new Id(compute.getId()));
240     }
241     Info info = new Info();
242     info.addProperty(ElementPropertyName.type.name(), ElementType.Compute);
243     info.addProperty(ElementPropertyName.compositionData.name(), compute.getCompositionData());
244     computeElement.setInfo(info);
245     computeElement.setData(new ByteArrayInputStream(compute.getCompositionData().getBytes()));
246     return computeElement;
247   }
248
249
250
251 }