Add collaboration feature
[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 / ComponentArtifactDaoZusammenImpl.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 org.openecomp.core.enrichment.types.MonitoringUploadType;
10 import org.openecomp.core.utilities.file.FileUtils;
11 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
12 import org.openecomp.sdc.datatypes.model.ElementType;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentArtifactDao;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToComponentMonitoringUploadConvertor;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentMonitoringUploadEntity;
16
17 import java.io.ByteArrayInputStream;
18 import java.nio.ByteBuffer;
19 import java.util.Collection;
20 import java.util.Optional;
21 import java.util.stream.Collectors;
22
23 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildElement;
24 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
25 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
26
27 /**
28  * @author Avrahamg.
29  * @since March 21, 2017
30  */
31 public class ComponentArtifactDaoZusammenImpl implements ComponentArtifactDao {
32
33   private static final String ARTIFACT_NAME = "artifactName";
34
35   private ZusammenAdaptor zusammenAdaptor;
36
37   public ComponentArtifactDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
38     this.zusammenAdaptor = zusammenAdaptor;
39   }
40
41   @Override
42   public void registerVersioning(String versionableEntityType) {
43
44   }
45
46   @Override
47   public Optional<ComponentMonitoringUploadEntity> getByType(
48       ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
49     SessionContext context = createSessionContext();
50     ElementContext elementContext =
51         new ElementContext(componentMonitoringUploadEntity.getVspId(),
52             componentMonitoringUploadEntity.getVersion().getId());
53
54     Optional<Element> mibsElement =
55         zusammenAdaptor.getElementByName(context, elementContext,
56             new Id(componentMonitoringUploadEntity.getComponentId()), ElementType.Mibs.toString());
57     if (mibsElement.isPresent()) {
58       Optional<Element> monitoringElement = zusammenAdaptor
59           .getElementByName(context, elementContext, mibsElement.get().getElementId(),
60               getMonitoringStructuralElement(componentMonitoringUploadEntity.getType()).toString());
61       if (monitoringElement.isPresent()) {
62         ComponentMonitoringUploadEntity entity =
63             new ElementToComponentMonitoringUploadConvertor().convert(monitoringElement.get());
64         entity.setVspId(componentMonitoringUploadEntity.getVspId());
65         entity.setVersion(componentMonitoringUploadEntity.getVersion());
66         entity.setComponentId(componentMonitoringUploadEntity.getComponentId());
67         return Optional.of(entity);
68       }
69     }
70
71     return Optional.empty();
72   }
73
74   @Override
75   public void create(ComponentMonitoringUploadEntity entity) {
76     ZusammenElement mibElement = buildMibElement(entity);
77
78     ZusammenElement mibsElement = buildStructuralElement(ElementType.Mibs, null);
79
80     ZusammenElement componentElement = buildElement(new Id(entity.getComponentId()), Action.IGNORE);
81
82     SessionContext context = createSessionContext();
83     ElementContext elementContext =
84         new ElementContext(entity.getVspId(), entity.getVersion().getId());
85
86     Element savedElement = zusammenAdaptor.saveElement(context, elementContext,
87         VspZusammenUtil.aggregateElements(componentElement, mibsElement, mibElement),
88         "Create monitoring upload");
89     entity.setId(savedElement.getSubElements().iterator().next()
90         .getSubElements().iterator().next().getElementId().getValue());
91   }
92
93   @Override
94   public void delete(ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
95
96     ZusammenElement mibElement = buildMibElementStructure(componentMonitoringUploadEntity);
97     mibElement.setElementId(new Id(componentMonitoringUploadEntity.getId()));
98     SessionContext context = createSessionContext();
99     ElementContext elementContext =
100         new ElementContext(componentMonitoringUploadEntity.getVspId(),
101             componentMonitoringUploadEntity.getVersion().getId());
102
103     zusammenAdaptor.saveElement(context, elementContext, mibElement,
104         String.format("Delete mib with id %s", componentMonitoringUploadEntity.getId()));
105   }
106
107
108
109   @Override
110   public Collection<ComponentMonitoringUploadEntity> list(
111       ComponentMonitoringUploadEntity mibEntity) {
112     SessionContext context = createSessionContext();
113     ElementContext elementContext =
114         new ElementContext(mibEntity.getVspId(), mibEntity.getVersion().getId());
115     ElementToComponentMonitoringUploadConvertor
116         convertor = new ElementToComponentMonitoringUploadConvertor();
117     return zusammenAdaptor
118         .listElementsByName(context, elementContext, new Id(mibEntity.getComponentId()),
119             ElementType.Mibs.toString()).stream()
120         .map(elementInfo -> convertor.convert(elementInfo))
121         .map(mib -> {
122           mib.setVspId(mibEntity.getVspId());
123           mib.setVersion(mibEntity.getVersion());
124           mib.setComponentId(mibEntity.getComponentId());
125           return mib;
126         })
127         .collect(Collectors.toList());
128   }
129
130   @Override
131   public void deleteAll(ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
132     /*ZusammenElement mibsElement =
133         buildStructuralElement(ElementType.Mibs, Action.DELETE);
134
135     ZusammenElement componentElement = buildComponentElement(componentMonitoringUploadEntity);
136
137     SessionContext context = createSessionContext();
138     ElementContext elementContext =
139         new ElementContext(componentMonitoringUploadEntity.getVspId(),
140             componentMonitoringUploadEntity.getVersion().getId());
141
142     zusammenAdaptor.saveElement(context, elementContext,
143         VspaggregateElements(componentElement, mibsElement), "Delete mibs");
144
145 */
146     SessionContext context = createSessionContext();
147     ElementContext elementContext =
148         new ElementContext(componentMonitoringUploadEntity.getVspId(),
149             componentMonitoringUploadEntity.getVersion().getId());
150
151     Optional<Element> optionalElement = zusammenAdaptor.getElementByName(context,
152         elementContext, new Id(componentMonitoringUploadEntity.getComponentId()), ElementType.Mibs
153             .name());
154
155     if (optionalElement.isPresent()) {
156       Element mibsElement = optionalElement.get();
157       Collection<Element> mibs = mibsElement.getSubElements();
158
159       mibs.forEach(mib -> {
160         ZusammenElement mibZusammenElement = buildElement(mib.getElementId(), Action.DELETE);
161         zusammenAdaptor.saveElement(context, elementContext, mibZusammenElement,
162             "Delete mib with id " + mib.getElementId());
163       });
164     }
165   }
166
167   @Override
168   public Collection<ComponentMonitoringUploadEntity> listArtifacts(
169       ComponentMonitoringUploadEntity monitoringUploadEntity) {
170     SessionContext context = createSessionContext();
171     ElementContext elementContext = new ElementContext(monitoringUploadEntity.getVspId(),
172         monitoringUploadEntity.getVersion().getId());
173
174     final Optional<Element> elementByName =
175         zusammenAdaptor.getElementByName(context, elementContext,
176             new Id(monitoringUploadEntity.getComponentId()), ElementType.Mibs.name());
177
178     if (!elementByName.isPresent()) {
179       return null;
180     } else {
181       final Id elementId = elementByName.get().getElementId();
182       return zusammenAdaptor.listElementData(context, elementContext, elementId).stream()
183           .map(element -> buildMibEntity(element, monitoringUploadEntity))
184           .collect(Collectors.toList());
185     }
186   }
187
188   private ComponentMonitoringUploadEntity buildMibEntity(Element element,
189                                                          ComponentMonitoringUploadEntity monitoringUploadEntity) {
190     final String componentId = monitoringUploadEntity.getComponentId();
191     ComponentMonitoringUploadEntity
192         createdMib = new ComponentMonitoringUploadEntity(monitoringUploadEntity.getVspId(),
193         monitoringUploadEntity.getVersion(),
194         componentId,
195         null);
196     createdMib.setArtifactName((String) element.getInfo().getProperties().get(ARTIFACT_NAME));
197     createdMib.setArtifact(ByteBuffer.wrap(FileUtils.toByteArray(element.getData())));
198     createdMib.setType(MonitoringUploadType.valueOf(element.getInfo().getName()));
199     return createdMib;
200   }
201
202   private ZusammenElement buildMibElement(
203       ComponentMonitoringUploadEntity monitoringUploadEntity) {
204
205     ZusammenElement monitoringElement = buildMibElementStructure(monitoringUploadEntity);
206     monitoringElement.getInfo().getProperties()
207         .put(ARTIFACT_NAME, monitoringUploadEntity.getArtifactName());
208     monitoringElement
209         .setData(new ByteArrayInputStream(monitoringUploadEntity.getArtifact().array()));
210     return monitoringElement;
211   }
212
213   private ZusammenElement buildMibElementStructure(
214       ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
215     ZusammenElement monitoringElement =
216         buildStructuralElement(getMonitoringStructuralElement(componentMonitoringUploadEntity.getType()),
217             Action.UPDATE);
218     return monitoringElement;
219   }
220
221   private ElementType getMonitoringStructuralElement(MonitoringUploadType type)
222       throws IllegalArgumentException {
223     switch (type) {
224       case SNMP_POLL:
225         return ElementType.SNMP_POLL;
226       case SNMP_TRAP:
227         return ElementType.SNMP_TRAP;
228       case VES_EVENTS:
229         return ElementType.VES_EVENTS;
230       default:
231         throw new IllegalArgumentException();
232     }
233   }
234 }