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 org.openecomp.core.zusammen.plugin.dao.types.ElementEntity;
 
   7 import org.openecomp.core.zusammen.plugin.dao.types.StageEntity;
 
   8 import org.openecomp.core.zusammen.plugin.dao.types.VersionEntity;
 
  10 import java.util.Collection;
 
  11 import java.util.Optional;
 
  13 public class CommitStagingService {
 
  15   private VersionPrivateStore versionPrivateStore;
 
  16   private VersionStageStore versionStageStore;
 
  17   private ElementPrivateStore elementPrivateStore;
 
  18   private ElementStageStore elementStageStore;
 
  20   public CommitStagingService(VersionPrivateStore versionPrivateStore,
 
  21                               VersionStageStore versionStageStore,
 
  22                               ElementPrivateStore elementPrivateStore,
 
  23                               ElementStageStore elementStageStore) {
 
  24     this.versionPrivateStore = versionPrivateStore;
 
  25     this.versionStageStore = versionStageStore;
 
  26     this.elementPrivateStore = elementPrivateStore;
 
  27     this.elementStageStore = elementStageStore;
 
  30   public void commitStaging(SessionContext context, Id itemId, Id versionId) {
 
  31     Optional<StageEntity<VersionEntity>> versionStage =
 
  32         versionStageStore.get(context, itemId, new VersionEntity(versionId));
 
  34     final ElementContext elementContext = new ElementContext(itemId, versionId, Id.ZERO);
 
  35     Collection<ElementEntity> stagedElementIds = elementStageStore.listIds(context, elementContext);
 
  37     if ((!versionStage.isPresent() && stagedElementIds.isEmpty()) ||
 
  38         elementStageStore.hasConflicts(context, elementContext)) {
 
  42     versionStage.ifPresent(verStage -> commitVersionStage(context, itemId, verStage));
 
  43     commitElementsStage(context, elementContext, stagedElementIds);
 
  46   private void commitVersionStage(SessionContext context, Id itemId,
 
  47                                   StageEntity<VersionEntity> versionStage) {
 
  48     switch (versionStage.getAction()) {
 
  50         versionPrivateStore.commitStagedCreate(context, itemId, versionStage.getEntity(),
 
  51             versionStage.getPublishTime());
 
  54         versionPrivateStore.commitStagedUpdate(context, itemId, versionStage.getEntity(),
 
  55             versionStage.getPublishTime());
 
  58         versionPrivateStore.commitStagedIgnore(context, itemId, versionStage.getEntity(),
 
  59             versionStage.getPublishTime());
 
  62         throw new UnsupportedOperationException(
 
  63             "Version change other then Create/Update/Ignore is not supported");
 
  66     versionStageStore.delete(context, itemId, versionStage.getEntity());
 
  69   private void commitElementsStage(SessionContext context, ElementContext elementContext,
 
  70                                    Collection<ElementEntity> stagedElementIds) {
 
  71     for (ElementEntity stagedElementId : stagedElementIds) {
 
  72       StageEntity<ElementEntity> stagedElement =
 
  73           elementStageStore.get(context, elementContext, stagedElementId)
 
  75                   () -> new IllegalStateException("Element id returned by list must exist"));
 
  76       switch (stagedElement.getAction()) {
 
  78           elementPrivateStore.commitStagedCreate(context, elementContext, stagedElement.getEntity(),
 
  79               stagedElement.getPublishTime());
 
  82           elementPrivateStore.commitStagedUpdate(context, elementContext, stagedElement.getEntity(),
 
  83               stagedElement.getPublishTime());
 
  87               .commitStagedDelete(context, elementContext, stagedElement.getEntity());
 
  90           elementPrivateStore.commitStagedIgnore(context, elementContext, stagedElement.getEntity(),
 
  91               stagedElement.getPublishTime());
 
  94           throw new UnsupportedOperationException(
 
  95               "Element change other then Create/Update/Delete/Ignore is not supported");
 
  97       elementStageStore.delete(context, elementContext, stagedElement.getEntity());