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