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