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.Optional;
 
  21 import java.util.stream.Collectors;
 
  23 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildElement;
 
  24 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
 
  25 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
 
  29  * @since March 21, 2017
 
  31 public class ComponentArtifactDaoZusammenImpl implements ComponentArtifactDao {
 
  33   private static final String ARTIFACT_NAME = "artifactName";
 
  35   private ZusammenAdaptor zusammenAdaptor;
 
  37   public ComponentArtifactDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
 
  38     this.zusammenAdaptor = zusammenAdaptor;
 
  42   public void registerVersioning(String versionableEntityType) {
 
  47   public Optional<ComponentMonitoringUploadEntity> getByType(
 
  48       ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
 
  49     SessionContext context = createSessionContext();
 
  50     ElementContext elementContext =
 
  51         new ElementContext(componentMonitoringUploadEntity.getVspId(),
 
  52             componentMonitoringUploadEntity.getVersion().getId());
 
  54     Optional<Element> mibsElement =
 
  55         zusammenAdaptor.getElementByName(context, elementContext,
 
  56             new Id(componentMonitoringUploadEntity.getComponentId()), ElementType.Mibs.toString());
 
  57     if (mibsElement.isPresent()) {
 
  58       Optional<Element> monitoringElement = zusammenAdaptor
 
  59           .getElementByName(context, elementContext, mibsElement.get().getElementId(),
 
  60               getMonitoringStructuralElement(componentMonitoringUploadEntity.getType()).toString());
 
  61       if (monitoringElement.isPresent()) {
 
  62         ComponentMonitoringUploadEntity entity =
 
  63             new ElementToComponentMonitoringUploadConvertor().convert(monitoringElement.get());
 
  64         entity.setVspId(componentMonitoringUploadEntity.getVspId());
 
  65         entity.setVersion(componentMonitoringUploadEntity.getVersion());
 
  66         entity.setComponentId(componentMonitoringUploadEntity.getComponentId());
 
  67         return Optional.of(entity);
 
  71     return Optional.empty();
 
  75   public void create(ComponentMonitoringUploadEntity entity) {
 
  76     ZusammenElement mibElement = buildMibElement(entity);
 
  78     ZusammenElement mibsElement = buildStructuralElement(ElementType.Mibs, null);
 
  80     ZusammenElement componentElement = buildElement(new Id(entity.getComponentId()), Action.IGNORE);
 
  82     SessionContext context = createSessionContext();
 
  83     ElementContext elementContext =
 
  84         new ElementContext(entity.getVspId(), entity.getVersion().getId());
 
  86     Element savedElement = zusammenAdaptor.saveElement(context, elementContext,
 
  87         VspZusammenUtil.aggregateElements(componentElement, mibsElement, mibElement),
 
  88         "Create monitoring upload");
 
  89     entity.setId(savedElement.getSubElements().iterator().next()
 
  90         .getSubElements().iterator().next().getElementId().getValue());
 
  94   public void delete(ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
 
  96     ZusammenElement mibElement = buildMibElementStructure(componentMonitoringUploadEntity);
 
  97     mibElement.setElementId(new Id(componentMonitoringUploadEntity.getId()));
 
  98     SessionContext context = createSessionContext();
 
  99     ElementContext elementContext =
 
 100         new ElementContext(componentMonitoringUploadEntity.getVspId(),
 
 101             componentMonitoringUploadEntity.getVersion().getId());
 
 103     zusammenAdaptor.saveElement(context, elementContext, mibElement,
 
 104         String.format("Delete mib with id %s", componentMonitoringUploadEntity.getId()));
 
 110   public Collection<ComponentMonitoringUploadEntity> list(
 
 111       ComponentMonitoringUploadEntity mibEntity) {
 
 112     SessionContext context = createSessionContext();
 
 113     ElementContext elementContext =
 
 114         new ElementContext(mibEntity.getVspId(), mibEntity.getVersion().getId());
 
 115     ElementToComponentMonitoringUploadConvertor
 
 116         convertor = new ElementToComponentMonitoringUploadConvertor();
 
 117     return zusammenAdaptor
 
 118         .listElementsByName(context, elementContext, new Id(mibEntity.getComponentId()),
 
 119             ElementType.Mibs.toString()).stream()
 
 120         .map(elementInfo -> convertor.convert(elementInfo))
 
 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     /*ZusammenElement mibsElement =
 
 133         buildStructuralElement(ElementType.Mibs, Action.DELETE);
 
 135     ZusammenElement componentElement = buildComponentElement(componentMonitoringUploadEntity);
 
 137     SessionContext context = createSessionContext();
 
 138     ElementContext elementContext =
 
 139         new ElementContext(componentMonitoringUploadEntity.getVspId(),
 
 140             componentMonitoringUploadEntity.getVersion().getId());
 
 142     zusammenAdaptor.saveElement(context, elementContext,
 
 143         VspaggregateElements(componentElement, mibsElement), "Delete mibs");
 
 146     SessionContext context = createSessionContext();
 
 147     ElementContext elementContext =
 
 148         new ElementContext(componentMonitoringUploadEntity.getVspId(),
 
 149             componentMonitoringUploadEntity.getVersion().getId());
 
 151     Optional<Element> optionalElement = zusammenAdaptor.getElementByName(context,
 
 152         elementContext, new Id(componentMonitoringUploadEntity.getComponentId()), ElementType.Mibs
 
 155     if (optionalElement.isPresent()) {
 
 156       Element mibsElement = optionalElement.get();
 
 157       Collection<Element> mibs = mibsElement.getSubElements();
 
 159       mibs.forEach(mib -> {
 
 160         ZusammenElement mibZusammenElement = buildElement(mib.getElementId(), Action.DELETE);
 
 161         zusammenAdaptor.saveElement(context, elementContext, mibZusammenElement,
 
 162             "Delete mib with id " + mib.getElementId());
 
 168   public Collection<ComponentMonitoringUploadEntity> listArtifacts(
 
 169       ComponentMonitoringUploadEntity monitoringUploadEntity) {
 
 170     SessionContext context = createSessionContext();
 
 171     ElementContext elementContext = new ElementContext(monitoringUploadEntity.getVspId(),
 
 172         monitoringUploadEntity.getVersion().getId());
 
 174     final Optional<Element> elementByName =
 
 175         zusammenAdaptor.getElementByName(context, elementContext,
 
 176             new Id(monitoringUploadEntity.getComponentId()), ElementType.Mibs.name());
 
 178     if (!elementByName.isPresent()) {
 
 181       final Id elementId = elementByName.get().getElementId();
 
 182       return zusammenAdaptor.listElementData(context, elementContext, elementId).stream()
 
 183           .map(element -> buildMibEntity(element, monitoringUploadEntity))
 
 184           .collect(Collectors.toList());
 
 188   private ComponentMonitoringUploadEntity buildMibEntity(Element element,
 
 189                                                          ComponentMonitoringUploadEntity monitoringUploadEntity) {
 
 190     final String componentId = monitoringUploadEntity.getComponentId();
 
 191     ComponentMonitoringUploadEntity
 
 192         createdMib = new ComponentMonitoringUploadEntity(monitoringUploadEntity.getVspId(),
 
 193         monitoringUploadEntity.getVersion(),
 
 196     createdMib.setArtifactName((String) element.getInfo().getProperties().get(ARTIFACT_NAME));
 
 197     createdMib.setArtifact(ByteBuffer.wrap(FileUtils.toByteArray(element.getData())));
 
 198     createdMib.setType(MonitoringUploadType.valueOf(element.getInfo().getName()));
 
 202   private ZusammenElement buildMibElement(
 
 203       ComponentMonitoringUploadEntity monitoringUploadEntity) {
 
 205     ZusammenElement monitoringElement = buildMibElementStructure(monitoringUploadEntity);
 
 206     monitoringElement.getInfo().getProperties()
 
 207         .put(ARTIFACT_NAME, monitoringUploadEntity.getArtifactName());
 
 209         .setData(new ByteArrayInputStream(monitoringUploadEntity.getArtifact().array()));
 
 210     return monitoringElement;
 
 213   private ZusammenElement buildMibElementStructure(
 
 214       ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
 
 215     ZusammenElement monitoringElement =
 
 216         buildStructuralElement(getMonitoringStructuralElement(componentMonitoringUploadEntity.getType()),
 
 218     return monitoringElement;
 
 221   private ElementType getMonitoringStructuralElement(MonitoringUploadType type)
 
 222       throws IllegalArgumentException {
 
 225         return ElementType.SNMP_POLL;
 
 227         return ElementType.SNMP_TRAP;
 
 229         return ElementType.VES_EVENTS;
 
 231         throw new IllegalArgumentException();