1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
 
   4 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
 
   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 com.amdocs.zusammen.datatypes.item.Info;
 
  11 import org.openecomp.core.utilities.file.FileUtils;
 
  12 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
 
  13 import org.openecomp.sdc.datatypes.model.ElementType;
 
  14 import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
 
  15 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToImageConvertor;
 
  16 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
 
  17 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
 
  18 import org.openecomp.sdc.versioning.dao.types.Version;
 
  19 import org.openecomp.types.ElementPropertyName;
 
  21 import java.io.ByteArrayInputStream;
 
  22 import java.util.Collection;
 
  23 import java.util.Collections;
 
  24 import java.util.Optional;
 
  25 import java.util.stream.Collectors;
 
  27 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildElement;
 
  28 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
 
  29 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
 
  31 public class ImageDaoZusammenImpl implements ImageDao {
 
  33   private ZusammenAdaptor zusammenAdaptor;
 
  35   public ImageDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
 
  36     this.zusammenAdaptor = zusammenAdaptor;
 
  40   public void registerVersioning(String versionableEntityType) {
 
  44   public Collection<ImageEntity> list(ImageEntity image) {
 
  45     SessionContext context = createSessionContext();
 
  46     ElementContext elementContext =
 
  47         new ElementContext(image.getVspId(), image.getVersion().getId());
 
  49     return listImages(context, elementContext, image);
 
  52   private Collection<ImageEntity> listImages(SessionContext context,
 
  53                                              ElementContext elementContext, ImageEntity image) {
 
  54     ElementToImageConvertor convertor = new ElementToImageConvertor();
 
  55     return zusammenAdaptor
 
  56         .listElementsByName(context, elementContext, new Id(image.getComponentId()),
 
  57             ElementType.Images.name())
 
  58         .stream().map(convertor::convert)
 
  60           imageEntity.setComponentId(image.getComponentId());
 
  61           imageEntity.setVspId(image.getVspId());
 
  62           imageEntity.setVersion(image.getVersion());
 
  65         .collect(Collectors.toList());
 
  69   public void create(ImageEntity image) {
 
  70     ZusammenElement imageElement = imageToZusammen(image, Action.CREATE);
 
  72     ZusammenElement imagesElement =
 
  73         buildStructuralElement(ElementType.Images, Action.IGNORE);
 
  74     imagesElement.setSubElements(Collections.singletonList(imageElement));
 
  76     ZusammenElement componentElement = buildElement(new Id(image.getComponentId()), Action.IGNORE);
 
  77     componentElement.setSubElements(Collections.singletonList(imagesElement));
 
  79     SessionContext context = createSessionContext();
 
  80     ElementContext elementContext =
 
  81         new ElementContext(image.getVspId(), image.getVersion().getId());
 
  83     Element savedElement =
 
  84         zusammenAdaptor.saveElement(context, elementContext, componentElement, "Create image");
 
  85     image.setId(savedElement.getSubElements().iterator().next()
 
  86         .getSubElements().iterator().next().getElementId().getValue());
 
  90   public void update(ImageEntity image) {
 
  91     ZusammenElement imageElement = imageToZusammen(image, Action.UPDATE);
 
  93     SessionContext context = createSessionContext();
 
  94     ElementContext elementContext =
 
  95         new ElementContext(image.getVspId(), image.getVersion().getId());
 
  96     zusammenAdaptor.saveElement(context, elementContext, imageElement,
 
  97         String.format("Update image with id %s", image.getId()));
 
 101   public ImageEntity get(ImageEntity image) {
 
 102     SessionContext context = createSessionContext();
 
 104     ElementContext elementContext =
 
 105         new ElementContext(image.getVspId(), image.getVersion().getId());
 
 106     Optional<Element> element = zusammenAdaptor.getElement(context, elementContext, image.getId());
 
 108     if (element.isPresent()) {
 
 109       ElementToImageConvertor convertor = new ElementToImageConvertor();
 
 110       ImageEntity entity = convertor.convert(element.get());
 
 111       entity.setComponentId(image.getComponentId());
 
 112       entity.setVspId(image.getVspId());
 
 113       entity.setVersion(image.getVersion());
 
 121   public void delete(ImageEntity image) {
 
 122     ZusammenElement imageElement = buildElement(new Id(image.getId()), Action.DELETE);
 
 124     SessionContext context = createSessionContext();
 
 125     ElementContext elementContext =
 
 126         new ElementContext(image.getVspId(), image.getVersion().getId());
 
 127     zusammenAdaptor.saveElement(context, elementContext, imageElement,
 
 128         String.format("Delete image with id %s", image.getId()));
 
 132   public void deleteByVspId(String vspId, Version version) {
 
 133     SessionContext context = createSessionContext();
 
 134     ElementContext elementContext = new ElementContext(vspId, version.getId());
 
 136     Optional<Element> elementOptional = zusammenAdaptor.getElementByName(context, elementContext,
 
 137         null, ElementType.Images.name());
 
 139     if (elementOptional.isPresent()) {
 
 140       Element ImagesElement = elementOptional.get();
 
 141       Collection<Element> Images = ImagesElement.getSubElements();
 
 142       Images.forEach(image -> {
 
 143         ZusammenElement imageZusammenElement = buildElement(image.getElementId(), Action.DELETE);
 
 144         zusammenAdaptor.saveElement(context, elementContext, imageZusammenElement, "Delete image " +
 
 145             "with id " + image.getElementId());
 
 151   public Collection<ImageEntity> listByVsp(String vspId, Version version) {
 
 152     SessionContext context = createSessionContext();
 
 153     ElementContext elementContext = new ElementContext(vspId, version.getId());
 
 155     Collection<ComponentEntity> components = ComponentDaoZusammenImpl
 
 156         .listComponents(zusammenAdaptor, context, vspId, version);
 
 158     return components.stream()
 
 160             listImages(context, elementContext,
 
 161                 new ImageEntity(vspId, version, component.getId(), null)).stream()
 
 162                 .map(image -> getQuestionnaire(context, elementContext, image))
 
 163                 .collect(Collectors.toList()))
 
 164         .flatMap(Collection::stream)
 
 165         .collect(Collectors.toList());
 
 169   public ImageEntity getQuestionnaireData(String vspId, Version version, String componentId,
 
 171     SessionContext context = createSessionContext();
 
 172     ElementContext elementContext = new ElementContext(vspId, version.getId());
 
 174     return getQuestionnaire(context, elementContext,
 
 175         new ImageEntity(vspId, version, componentId, imageId));
 
 178   private ImageEntity getQuestionnaire(SessionContext context, ElementContext elementContext,
 
 180     Optional<Element> questionnaireElement = zusammenAdaptor
 
 181         .getElementByName(context, elementContext, new Id(image.getId()),
 
 182             ElementType.ImageQuestionnaire.name());
 
 183     return questionnaireElement.map(
 
 184         element -> element.getData() == null
 
 186             : new String(FileUtils.toByteArray(element.getData())))
 
 187         .map(questionnaireData -> {
 
 188           image.setQuestionnaireData(questionnaireData);
 
 195   public void updateQuestionnaireData(String vspId, Version version, String componentId,
 
 196                                       String imageId, String questionnaireData) {
 
 197     ZusammenElement questionnaireElement =
 
 198         imageQuestionnaireToZusammen(questionnaireData, Action.UPDATE);
 
 200     ZusammenElement imageElement = buildElement(new Id(imageId), Action.IGNORE);
 
 201     imageElement.setSubElements(Collections.singletonList(questionnaireElement));
 
 203     SessionContext context = createSessionContext();
 
 204     ElementContext elementContext = new ElementContext(vspId, version.getId());
 
 205     zusammenAdaptor.saveElement(context, elementContext, imageElement, "Update image "
 
 210   private ZusammenElement imageToZusammen(ImageEntity image, Action action) {
 
 211     ZusammenElement imageElement = buildImageElement(image, action);
 
 212     if (action == Action.CREATE) {
 
 213       imageElement.setSubElements(Collections.singletonList(
 
 214           imageQuestionnaireToZusammen(image.getQuestionnaireData(), Action.CREATE)));
 
 219   private ZusammenElement imageQuestionnaireToZusammen(String questionnaireData,
 
 221     ZusammenElement questionnaireElement =
 
 222         buildStructuralElement(ElementType.ImageQuestionnaire, action);
 
 223     questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
 
 224     return questionnaireElement;
 
 227   private ZusammenElement buildImageElement(ImageEntity image, Action action) {
 
 228     ZusammenElement imageElement =
 
 229         buildElement(image.getId() == null ? null : new Id(image.getId()), action);
 
 230     Info info = new Info();
 
 231     info.addProperty(ElementPropertyName.elementType.name(), ElementType.Image);
 
 232     info.addProperty(ElementPropertyName.compositionData.name(), image.getCompositionData());
 
 233     imageElement.setInfo(info);
 
 234     imageElement.setData(new ByteArrayInputStream(image.getCompositionData().getBytes()));