1 package org.openecomp.core.zusammen.plugin.collaboration.impl;
 
   3 import com.amdocs.zusammen.datatypes.Id;
 
   4 import com.amdocs.zusammen.datatypes.SessionContext;
 
   5 import com.amdocs.zusammen.datatypes.Space;
 
   6 import com.amdocs.zusammen.datatypes.item.ElementContext;
 
   7 import com.amdocs.zusammen.plugin.statestore.cassandra.dao.types.ElementEntityContext;
 
   8 import org.openecomp.core.zusammen.plugin.collaboration.ElementPublicStore;
 
   9 import org.openecomp.core.zusammen.plugin.dao.ElementRepository;
 
  10 import org.openecomp.core.zusammen.plugin.dao.ElementRepositoryFactory;
 
  11 import org.openecomp.core.zusammen.plugin.dao.ElementSynchronizationStateRepository;
 
  12 import org.openecomp.core.zusammen.plugin.dao.ElementSynchronizationStateRepositoryFactory;
 
  13 import org.openecomp.core.zusammen.plugin.dao.types.ElementEntity;
 
  14 import org.openecomp.core.zusammen.plugin.dao.types.SynchronizationStateEntity;
 
  16 import java.util.Collection;
 
  17 import java.util.Date;
 
  18 import java.util.HashSet;
 
  20 import java.util.Optional;
 
  22 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getSpaceName;
 
  24 public class ElementPublicStoreImpl implements ElementPublicStore {
 
  27   public Optional<ElementEntity> get(SessionContext context,
 
  28                                      ElementContext elementContext, Id elementId) {
 
  29     return getElementRepository(context)
 
  30         .get(context, new ElementEntityContext(getSpaceName(context, Space.PUBLIC), elementContext),
 
  31             new ElementEntity(elementId));
 
  35   public Optional<ElementEntity> getDescriptor(SessionContext context,
 
  36                                                ElementContext elementContext, Id elementId) {
 
  37     return getElementRepository(context).getDescriptor(context,
 
  38         new ElementEntityContext(getSpaceName(context, Space.PUBLIC), elementContext),
 
  39         new ElementEntity(elementId));
 
  43   public Collection<SynchronizationStateEntity> listSynchronizationStates(
 
  44       SessionContext context, ElementContext elementContext) {
 
  45     ElementEntityContext entityContext = new ElementEntityContext(getSpaceName
 
  46         (context, Space.PUBLIC), elementContext);
 
  48     ElementSynchronizationStateRepository elementSyncStateRepository =
 
  49         getElementSyncStateRepository(context);
 
  50     Map<Id, Id> ids = getElementRepository(context).listIds(context, entityContext);
 
  52     Collection<SynchronizationStateEntity> synchronizationStateEntities = new HashSet<>();
 
  53     for (Map.Entry<Id, Id> elementEntry : ids.entrySet()) {
 
  54       Optional<SynchronizationStateEntity> synchronizationStateEntity = elementSyncStateRepository.
 
  55           get(context, entityContext, new SynchronizationStateEntity(elementEntry.getKey(),
 
  56               elementEntry.getValue()));
 
  57       if (synchronizationStateEntity.isPresent()) {
 
  58         synchronizationStateEntities.add(synchronizationStateEntity.get());
 
  60         /*throw new IllegalStateException(String.format(
 
  61             "list Synchronization States error: " + "element %s revision %s, which appears as an " +
 
  64                 " %s version %s, does not exist",
 
  65             elementEntry.getKey(), elementEntry.getValue(), elementContext.getItemId().getValue(),
 
  66             elementContext.getVersionId().getValue()));*/
 
  70     return synchronizationStateEntities;
 
  74   public void create(SessionContext context, ElementContext elementContext,
 
  75                      ElementEntity element, Date publishTime) {
 
  76     ElementEntityContext publicContext =
 
  77         new ElementEntityContext(getSpaceName(context, Space.PUBLIC), elementContext);
 
  80     if (element.getParentId() != null) {
 
  81       createParentElement(context, elementContext, element.getParentId(), publishTime);
 
  83     getElementRepository(context).create(context, publicContext, element);
 
  84     getElementSyncStateRepository(context).create(context, publicContext,
 
  85         new SynchronizationStateEntity(element.getId(), elementContext.getRevisionId(),
 
  90   public void update(SessionContext context, ElementContext elementContext,
 
  91                      ElementEntity element, Date publishTime) {
 
  92     //todo - update in public should be create new entry with new revision_id in public - this is a
 
  94     ElementEntityContext publicContext =
 
  95         new ElementEntityContext(getSpaceName(context, Space.PUBLIC), elementContext);
 
  97     Optional<ElementEntity> publicElement = getElementRepository(context).get(context,
 
  98         publicContext, new ElementEntity(element.getId()));
 
  99     if (publicElement.isPresent()) {
 
 100       getElementRepository(context).update(context, publicContext, element);
 
 102        publicElement = get(context,new ElementContext(publicContext.getItemId(),publicContext
 
 103            .getVersionId()),element.getId());
 
 104        element.setSubElementIds(publicElement.get().getSubElementIds());
 
 105       getElementRepository(context).create(context, publicContext, element);
 
 107     getElementSyncStateRepository(context).update(context, publicContext,
 
 108         new SynchronizationStateEntity(element.getId(), elementContext.getRevisionId(), publishTime,
 
 113   public void delete(SessionContext context, ElementContext elementContext,
 
 114                      ElementEntity element, Date publishTime) {
 
 115     ElementEntityContext publicContext =
 
 116         new ElementEntityContext(getSpaceName(context, Space.PUBLIC), elementContext);
 
 118     if (element.getParentId() != null) {
 
 119       Optional<ElementEntity> parentElement = get(context, elementContext, element.getParentId());
 
 120       if (parentElement.isPresent()) {
 
 121         createParentElement(context, elementContext, element.getParentId(), publishTime);
 
 125     getElementRepository(context).delete(context, publicContext, element);
 
 126     getElementSyncStateRepository(context)
 
 127         .delete(context, publicContext, new SynchronizationStateEntity(element.getId(),
 
 128             elementContext.getRevisionId()));
 
 132   public Map<Id, Id> listIds(SessionContext context, ElementContext elementContext) {
 
 134     return getElementRepository(context)
 
 136             new ElementEntityContext(getSpaceName(context, Space.PUBLIC), elementContext));
 
 140   private void createParentElement(SessionContext context, ElementContext elementContext,
 
 141                                    Id parentElementId, Date publishTime
 
 143     ElementEntityContext publicContext =
 
 144         new ElementEntityContext(getSpaceName(context, Space.PUBLIC), elementContext);
 
 146     Optional<ElementEntity> parentElement =
 
 147         getElementRepository(context).get(context, new ElementEntityContext
 
 148                 (publicContext.getSpace(), publicContext.getItemId(), publicContext.getVersionId(),
 
 149                     elementContext.getRevisionId()),
 
 150             new ElementEntity(parentElementId));
 
 151     if(parentElement.isPresent()) {
 
 152       update(context, elementContext, parentElement.get(), publishTime);
 
 156    /* Id elementRevisionId = getElementRevision(context, publicContext, elementContext.getRevisionId()
 
 159     if (elementRevisionId != null && !elementRevisionId.equals(elementContext.getRevisionId())) {
 
 160       Optional<ElementEntity> parentElement =
 
 161           getElementRepository(context).get(context, new ElementEntityContext
 
 162                   (publicContext.getSpace(), publicContext.getItemId(), publicContext.getVersionId(),
 
 163                       elementContext.getRevisionId()),
 
 164               new ElementEntity(parentElementId));
 
 165       elementRevisionId = getElementRevision(context, publicContext, elementContext.getRevisionId()
 
 166           , parentElement.get().getId());
 
 167       if (elementRevisionId != null) {
 
 168         update(context, elementContext, parentElement.get(), publishTime);
 
 170         create(context, elementContext, parentElement.get(), publishTime);
 
 179   protected ElementRepository getElementRepository(SessionContext context) {
 
 180     return ElementRepositoryFactory.getInstance().createInterface(context);
 
 183   protected ElementSynchronizationStateRepository getElementSyncStateRepository(
 
 184       SessionContext context) {
 
 185     return ElementSynchronizationStateRepositoryFactory.getInstance().createInterface(context);