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