[SDC-29] Amdocs OnBoard 1707 initial commit.
[sdc.git] / openecomp-be / lib / openecomp-core-lib / openecomp-zusammen-lib / openecomp-zusammen-plugin / src / main / java / org / openecomp / core / zusammen / plugin / collaboration / VersionCollaborationStore.java
1 package org.openecomp.core.zusammen.plugin.collaboration;
2
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.Action;
7 import com.amdocs.zusammen.datatypes.itemversion.Tag;
8 import com.amdocs.zusammen.plugin.statestore.cassandra.dao.types.ElementEntityContext;
9 import com.amdocs.zusammen.sdk.collaboration.types.CollaborationElementChange;
10 import com.amdocs.zusammen.sdk.collaboration.types.CollaborationMergeChange;
11 import org.openecomp.core.zusammen.plugin.ZusammenPluginUtil;
12 import org.openecomp.core.zusammen.plugin.dao.ElementRepository;
13 import org.openecomp.core.zusammen.plugin.dao.ElementRepositoryFactory;
14 import org.openecomp.core.zusammen.plugin.dao.types.ElementEntity;
15
16 import java.util.Collection;
17
18 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getSpaceName;
19
20 public class VersionCollaborationStore {
21
22   public void tagItemVersion(SessionContext context, Id itemId, Id versionId, Id changeId,
23                              Tag tag) {
24     if (changeId != null) {
25       throw new UnsupportedOperationException(
26           "In this plugin implementation tag is supported only on versionId");
27     }
28     copyElements(context, getSpaceName(context, Space.PRIVATE), itemId, versionId, tag.getName());
29   }
30
31   public CollaborationMergeChange resetItemVersionHistory(SessionContext context, Id itemId,
32                                                           Id versionId, String changeRef) {
33     ElementRepository elementRepository = getElementRepository(context);
34     ElementEntityContext elementContext =
35         new ElementEntityContext(getSpaceName(context, Space.PRIVATE), itemId, versionId);
36
37     CollaborationMergeChange resetChange = new CollaborationMergeChange();
38
39     Collection<ElementEntity> versionElements = elementRepository.list(context, elementContext);
40     versionElements.stream()
41         .map(elementEntity ->
42             convertElementEntityToElementChange(elementEntity, elementContext, Action.DELETE))
43         .forEach(resetChange.getChangedElements()::add);
44
45     elementContext.setChangeRef(changeRef);
46     Collection<ElementEntity> changeRefElements = elementRepository.list(context, elementContext);
47     changeRefElements.stream()
48         .map(elementEntity ->
49             convertElementEntityToElementChange(elementEntity, elementContext, Action.CREATE))
50         .forEach(resetChange.getChangedElements()::add);
51
52     return resetChange; // TODO: 4/19/2017 version change...
53   }
54
55   private void copyElements(SessionContext context, String space, Id itemId, Id sourceVersionId,
56                             String targetTag) {
57     ElementRepository elementRepository = getElementRepository(context);
58     ElementEntityContext elementContext = new ElementEntityContext(space, itemId, sourceVersionId);
59
60     Collection<ElementEntity> versionElements = elementRepository.list(context, elementContext);
61
62     elementContext.setChangeRef(targetTag);
63     versionElements
64         .forEach(elementEntity -> elementRepository.create(context, elementContext, elementEntity));
65   }
66
67   private CollaborationElementChange convertElementEntityToElementChange(
68       ElementEntity elementEntity, ElementEntityContext elementContext, Action action) {
69     CollaborationElementChange elementChange = new CollaborationElementChange();
70     elementChange
71         .setElement(ZusammenPluginUtil.getCollaborationElement(elementContext, elementEntity));
72     elementChange.setAction(action);
73     return elementChange;
74   }
75
76   protected ElementRepository getElementRepository(SessionContext context) {
77     return ElementRepositoryFactory.getInstance().createInterface(context);
78   }
79 }