1 package org.openecomp.core.zusammen.plugin.collaboration;
 
   3 import com.amdocs.zusammen.datatypes.Id;
 
   4 import com.amdocs.zusammen.datatypes.SessionContext;
 
   5 import com.amdocs.zusammen.datatypes.item.ElementContext;
 
   6 import com.amdocs.zusammen.plugin.statestore.cassandra.dao.types.ElementEntityContext;
 
   7 import com.amdocs.zusammen.sdk.collaboration.types.CollaborationElement;
 
   8 import org.openecomp.core.zusammen.plugin.ZusammenPluginConstants;
 
   9 import org.openecomp.core.zusammen.plugin.ZusammenPluginUtil;
 
  10 import org.openecomp.core.zusammen.plugin.dao.ElementRepository;
 
  11 import org.openecomp.core.zusammen.plugin.dao.ElementRepositoryFactory;
 
  12 import org.openecomp.core.zusammen.plugin.dao.types.ElementEntity;
 
  14 import java.util.Collection;
 
  15 import java.util.HashSet;
 
  16 import java.util.Objects;
 
  17 import java.util.Optional;
 
  18 import java.util.stream.Collectors;
 
  20 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getSpaceName;
 
  23 public class ElementCollaborationStore {
 
  25   public Collection<CollaborationElement> listElements(SessionContext context,
 
  26                                                        ElementContext elementContext,
 
  28     ElementEntityContext elementEntityContext =
 
  29         new ElementEntityContext(ZusammenPluginUtil.getPrivateSpaceName(context), elementContext);
 
  31     if (elementId == null) {
 
  32       elementId = ZusammenPluginConstants.ROOT_ELEMENTS_PARENT_ID;
 
  35     ElementRepository elementRepository = getElementRepository(context);
 
  36     return elementRepository.get(context, elementEntityContext, new ElementEntity(elementId))
 
  37         .map(ElementEntity::getSubElementIds).orElse(new HashSet<>()).stream()
 
  38         .map(subElementId -> elementRepository
 
  39             .get(context, elementEntityContext, new ElementEntity(subElementId)).get())
 
  40         .filter(Objects::nonNull)
 
  41         .map(subElement -> ZusammenPluginUtil
 
  42             .getCollaborationElement(elementEntityContext, subElement))
 
  43         .collect(Collectors.toList());
 
  46   public CollaborationElement getElement(SessionContext context, ElementContext elementContext,
 
  48     ElementEntityContext elementEntityContext =
 
  49         new ElementEntityContext(ZusammenPluginUtil.getPrivateSpaceName(context), elementContext);
 
  50     return getElementRepository(context)
 
  51         .get(context, elementEntityContext, new ElementEntity(elementId))
 
  52         .map(elementEntity -> ZusammenPluginUtil
 
  53             .getCollaborationElement(elementEntityContext, elementEntity))
 
  57   public void createElement(SessionContext context, CollaborationElement element) {
 
  58     getElementRepository(context)
 
  60             new ElementEntityContext(getSpaceName(context, element.getSpace()),
 
  61                 element.getItemId(), element.getVersionId()),
 
  62             ZusammenPluginUtil.getElementEntity(element));
 
  65   public void updateElement(SessionContext context, CollaborationElement element) {
 
  66     getElementRepository(context)
 
  68             new ElementEntityContext(getSpaceName(context, element.getSpace()),
 
  69                 element.getItemId(), element.getVersionId()),
 
  70             ZusammenPluginUtil.getElementEntity(element));
 
  73   public void deleteElement(SessionContext context, CollaborationElement element) {
 
  74     deleteElementHierarchy(getElementRepository(context),
 
  76         new ElementEntityContext(getSpaceName(context, element.getSpace()),
 
  77             element.getItemId(), element.getVersionId()),
 
  78         ZusammenPluginUtil.getElementEntity(element));
 
  81   private void deleteElementHierarchy(ElementRepository elementRepository, SessionContext context,
 
  82                                       ElementEntityContext elementEntityContext,
 
  83                                       ElementEntity elementEntity) {
 
  84     Optional<ElementEntity> retrieved =
 
  85         elementRepository.get(context, elementEntityContext, elementEntity);
 
  86     if (!retrieved.isPresent()) {
 
  89     retrieved.get().getSubElementIds().stream()
 
  90         .map(ElementEntity::new)
 
  91         .forEach(subElementEntity -> deleteElementHierarchy(
 
  92             elementRepository, context, elementEntityContext, subElementEntity));
 
  94     // only for the first one the parentId will populated (so it'll be removed from its parent)
 
  95     elementRepository.delete(context, elementEntityContext, elementEntity);
 
  98   protected ElementRepository getElementRepository(SessionContext context) {
 
  99     return ElementRepositoryFactory.getInstance().createInterface(context);