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.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;
16 import java.util.Collection;
17 import java.util.List;
18 import java.util.stream.Collectors;
20 import static org.openecomp.core.zusammen.plugin.ZusammenPluginConstants.ROOT_ELEMENTS_PARENT_ID;
21 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getSpaceName;
23 public class VersionCollaborationStore {
25 public void tagItemVersion(SessionContext context, Id itemId, Id versionId, Id changeId,
27 if (changeId != null) {
28 throw new UnsupportedOperationException(
29 "In this plugin implementation tag is supported only on versionId");
31 String space = getSpaceName(context, Space.PRIVATE);
32 ElementEntityContext targetContext = new ElementEntityContext(space, itemId, versionId);
33 targetContext.setChangeRef(tag.getName());
34 copyElements(context, new ElementEntityContext(space, itemId, versionId), targetContext,
35 getElementRepository(context));
38 public CollaborationMergeChange resetItemVersionHistory(SessionContext context, Id itemId,
39 Id versionId, String changeRef) {
40 ElementRepository elementRepository = getElementRepository(context);
42 String spaceName = getSpaceName(context, Space.PRIVATE);
43 ElementEntityContext versionContext = new ElementEntityContext(spaceName, itemId, versionId);
45 Collection<ElementEntity> deletedElements =
46 deleteElements(context, versionContext, elementRepository);
48 ElementEntityContext changeRefContext = new ElementEntityContext(spaceName, itemId, versionId);
49 changeRefContext.setChangeRef(changeRef);
51 Collection<ElementEntity> createdElements =
52 copyElements(context, changeRefContext, versionContext, elementRepository);
54 // TODO: 4/19/2017 version change...
55 return createCollaborationMergeChange(versionContext, deletedElements, createdElements);
58 private Collection<ElementEntity> deleteElements(SessionContext context,
59 ElementEntityContext elementContext,
60 ElementRepository elementRepository) {
61 Collection<ElementEntity> elements = elementRepository.list(context, elementContext);
62 elements.forEach(element -> elementRepository
63 .delete(context, elementContext, new ElementEntity(element.getId())));
64 elementRepository.delete(context, elementContext, new ElementEntity(ROOT_ELEMENTS_PARENT_ID));
68 private Collection<ElementEntity> copyElements(SessionContext context,
69 ElementEntityContext sourceElementContext,
70 ElementEntityContext targetElementContext,
71 ElementRepository elementRepository) {
72 Collection<ElementEntity> elements = elementRepository.list(context, sourceElementContext);
73 elements.forEach(elementEntity ->
74 elementRepository.create(context, targetElementContext, elementEntity));
78 private CollaborationMergeChange createCollaborationMergeChange(
79 ElementEntityContext versionContext,
80 Collection<ElementEntity> deletedElements,
81 Collection<ElementEntity> createdElements) {
82 CollaborationMergeChange mergeChange = new CollaborationMergeChange();
83 mergeChange.getChangedElements().addAll(
84 convertToCollaborationElementChanges(versionContext, deletedElements, Action.DELETE));
85 mergeChange.getChangedElements().addAll(
86 convertToCollaborationElementChanges(versionContext, createdElements, Action.CREATE));
90 private List<CollaborationElementChange> convertToCollaborationElementChanges(
91 ElementEntityContext elementContext, Collection<ElementEntity> changedElements,
93 return changedElements.stream()
94 .map(element -> convertToCollaborationElementChange(element, elementContext, action))
95 .collect(Collectors.toList());
98 private CollaborationElementChange convertToCollaborationElementChange(
99 ElementEntity elementEntity, ElementEntityContext elementContext, Action action) {
100 CollaborationElementChange elementChange = new CollaborationElementChange();
102 .setElement(ZusammenPluginUtil.getCollaborationElement(elementContext, elementEntity));
103 elementChange.setAction(action);
104 return elementChange;
107 protected ElementRepository getElementRepository(SessionContext context) {
108 return ElementRepositoryFactory.getInstance().createInterface(context);