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