1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
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;
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;
24 import static org.openecomp.core.zusammen.api.ZusammenUtil.*;
28 * @since March 21, 2017
30 public class ComponentArtifactDaoZusammenImpl implements ComponentArtifactDao {
32 private static final String ARTIFACT_NAME = "artifactName";
34 private ZusammenAdaptor zusammenAdaptor;
36 public ComponentArtifactDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
37 this.zusammenAdaptor = zusammenAdaptor;
41 public void registerVersioning(String versionableEntityType) {
42 // registerVersioning is not implemented for ComponentArtifactDaoZusammenImpl
46 public Optional<ComponentMonitoringUploadEntity> getByType(
47 ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
48 SessionContext context = createSessionContext();
49 ElementContext elementContext =
50 new ElementContext(componentMonitoringUploadEntity.getVspId(),
51 componentMonitoringUploadEntity.getVersion().getId());
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);
70 return Optional.empty();
74 public void create(ComponentMonitoringUploadEntity entity) {
75 ZusammenElement mibElement = buildMibElement(entity);
77 ZusammenElement mibsElement = buildStructuralElement(ElementType.Mibs, null);
79 ZusammenElement componentElement = buildElement(new Id(entity.getComponentId()), Action.IGNORE);
81 SessionContext context = createSessionContext();
82 ElementContext elementContext =
83 new ElementContext(entity.getVspId(), entity.getVersion().getId());
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());
93 public void delete(ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
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());
102 zusammenAdaptor.saveElement(context, elementContext, mibElement,
103 String.format("Delete mib with id %s", componentMonitoringUploadEntity.getId()));
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())
118 .map(new ElementToComponentMonitoringUploadConvertor()::convert)
120 mib.setVspId(mibEntity.getVspId());
121 mib.setVersion(mibEntity.getVersion());
122 mib.setComponentId(mibEntity.getComponentId());
125 .collect(Collectors.toList());
129 public void deleteAll(ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
130 SessionContext context = createSessionContext();
131 ElementContext elementContext =
132 new ElementContext(componentMonitoringUploadEntity.getVspId(),
133 componentMonitoringUploadEntity.getVersion().getId());
135 Optional<Element> optionalElement = zusammenAdaptor.getElementByName(context,
136 elementContext, new Id(componentMonitoringUploadEntity.getComponentId()), ElementType.Mibs
139 if (optionalElement.isPresent()) {
140 Element mibsElement = optionalElement.get();
141 Collection<Element> mibs = mibsElement.getSubElements();
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());
152 public Collection<ComponentMonitoringUploadEntity> listArtifacts(
153 ComponentMonitoringUploadEntity monitoringUploadEntity) {
154 SessionContext context = createSessionContext();
155 ElementContext elementContext = new ElementContext(monitoringUploadEntity.getVspId(),
156 monitoringUploadEntity.getVersion().getId());
158 final Optional<Element> elementByName =
159 zusammenAdaptor.getElementByName(context, elementContext,
160 new Id(monitoringUploadEntity.getComponentId()), ElementType.Mibs.name());
162 if (!elementByName.isPresent()) {
163 return Collections.emptyList();
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());
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(),
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()));
186 private ZusammenElement buildMibElement(
187 ComponentMonitoringUploadEntity monitoringUploadEntity) {
189 ZusammenElement monitoringElement = buildMibElementStructure(monitoringUploadEntity);
190 monitoringElement.getInfo().getProperties()
191 .put(ARTIFACT_NAME, monitoringUploadEntity.getArtifactName());
193 .setData(new ByteArrayInputStream(monitoringUploadEntity.getArtifact().array()));
194 return monitoringElement;
197 private ZusammenElement buildMibElementStructure(
198 ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
199 return buildStructuralElement(getMonitoringStructuralElement(componentMonitoringUploadEntity
200 .getType()), Action.UPDATE);
203 private ElementType getMonitoringStructuralElement(MonitoringUploadType type){
206 return ElementType.SNMP_POLL;
208 return ElementType.SNMP_TRAP;
210 return ElementType.VES_EVENTS;
212 throw new IllegalArgumentException();