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.buildElement;
25 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
26 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
30 * @since March 21, 2017
32 public class ComponentArtifactDaoZusammenImpl implements ComponentArtifactDao {
34 private static final String ARTIFACT_NAME = "artifactName";
36 private ZusammenAdaptor zusammenAdaptor;
38 public ComponentArtifactDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
39 this.zusammenAdaptor = zusammenAdaptor;
43 public void registerVersioning(String versionableEntityType) {
44 // registerVersioning is not implemented for ComponentArtifactDaoZusammenImpl
48 public Optional<ComponentMonitoringUploadEntity> getByType(
49 ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
50 SessionContext context = createSessionContext();
51 ElementContext elementContext =
52 new ElementContext(componentMonitoringUploadEntity.getVspId(),
53 componentMonitoringUploadEntity.getVersion().getId());
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);
72 return Optional.empty();
76 public void create(ComponentMonitoringUploadEntity entity) {
77 ZusammenElement mibElement = buildMibElement(entity);
79 ZusammenElement mibsElement = buildStructuralElement(ElementType.Mibs, null);
81 ZusammenElement componentElement = buildElement(new Id(entity.getComponentId()), Action.IGNORE);
83 SessionContext context = createSessionContext();
84 ElementContext elementContext =
85 new ElementContext(entity.getVspId(), entity.getVersion().getId());
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());
95 public void delete(ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
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());
104 zusammenAdaptor.saveElement(context, elementContext, mibElement,
105 String.format("Delete mib with id %s", componentMonitoringUploadEntity.getId()));
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())
120 .map(new ElementToComponentMonitoringUploadConvertor()::convert)
122 mib.setVspId(mibEntity.getVspId());
123 mib.setVersion(mibEntity.getVersion());
124 mib.setComponentId(mibEntity.getComponentId());
127 .collect(Collectors.toList());
131 public void deleteAll(ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
132 SessionContext context = createSessionContext();
133 ElementContext elementContext =
134 new ElementContext(componentMonitoringUploadEntity.getVspId(),
135 componentMonitoringUploadEntity.getVersion().getId());
137 Optional<Element> optionalElement = zusammenAdaptor.getElementByName(context,
138 elementContext, new Id(componentMonitoringUploadEntity.getComponentId()), ElementType.Mibs
141 if (optionalElement.isPresent()) {
142 Element mibsElement = optionalElement.get();
143 Collection<Element> mibs = mibsElement.getSubElements();
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());
154 public Collection<ComponentMonitoringUploadEntity> listArtifacts(
155 ComponentMonitoringUploadEntity monitoringUploadEntity) {
156 SessionContext context = createSessionContext();
157 ElementContext elementContext = new ElementContext(monitoringUploadEntity.getVspId(),
158 monitoringUploadEntity.getVersion().getId());
160 final Optional<Element> elementByName =
161 zusammenAdaptor.getElementByName(context, elementContext,
162 new Id(monitoringUploadEntity.getComponentId()), ElementType.Mibs.name());
164 if (!elementByName.isPresent()) {
165 return Collections.emptyList();
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());
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(),
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()));
188 private ZusammenElement buildMibElement(
189 ComponentMonitoringUploadEntity monitoringUploadEntity) {
191 ZusammenElement monitoringElement = buildMibElementStructure(monitoringUploadEntity);
192 monitoringElement.getInfo().getProperties()
193 .put(ARTIFACT_NAME, monitoringUploadEntity.getArtifactName());
195 .setData(new ByteArrayInputStream(monitoringUploadEntity.getArtifact().array()));
196 return monitoringElement;
199 private ZusammenElement buildMibElementStructure(
200 ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
201 return buildStructuralElement(getMonitoringStructuralElement(componentMonitoringUploadEntity
202 .getType()), Action.UPDATE);
205 private ElementType getMonitoringStructuralElement(MonitoringUploadType type){
208 return ElementType.SNMP_POLL;
210 return ElementType.SNMP_TRAP;
212 return ElementType.VES_EVENTS;
214 throw new IllegalArgumentException();