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