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