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());