[SDC] Onboarding 1710 rebase.
[sdc.git] / openecomp-be / lib / openecomp-core-lib / openecomp-zusammen-lib / openecomp-zusammen-plugin / src / main / java / org / openecomp / core / zusammen / plugin / collaboration / ElementCollaborationStore.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.item.ElementContext;
6 import com.amdocs.zusammen.plugin.statestore.cassandra.dao.types.ElementEntityContext;
7 import com.amdocs.zusammen.sdk.collaboration.types.CollaborationElement;
8 import org.openecomp.core.zusammen.plugin.ZusammenPluginConstants;
9 import org.openecomp.core.zusammen.plugin.ZusammenPluginUtil;
10 import org.openecomp.core.zusammen.plugin.dao.ElementRepository;
11 import org.openecomp.core.zusammen.plugin.dao.ElementRepositoryFactory;
12 import org.openecomp.core.zusammen.plugin.dao.types.ElementEntity;
13
14 import java.util.Collection;
15 import java.util.HashSet;
16 import java.util.Objects;
17 import java.util.Optional;
18 import java.util.stream.Collectors;
19
20 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getSpaceName;
21
22
23 public class ElementCollaborationStore {
24
25   public Collection<CollaborationElement> listElements(SessionContext context,
26                                                        ElementContext elementContext,
27                                                        Id elementId) {
28     ElementEntityContext elementEntityContext =
29         new ElementEntityContext(ZusammenPluginUtil.getPrivateSpaceName(context), elementContext);
30
31     if (elementId == null) {
32       elementId = ZusammenPluginConstants.ROOT_ELEMENTS_PARENT_ID;
33     }
34
35     ElementRepository elementRepository = getElementRepository(context);
36     return elementRepository.get(context, elementEntityContext, new ElementEntity(elementId))
37         .map(ElementEntity::getSubElementIds).orElse(new HashSet<>()).stream()
38         .map(subElementId -> elementRepository
39             .get(context, elementEntityContext, new ElementEntity(subElementId)).get())
40         .filter(Objects::nonNull)
41         .map(subElement -> ZusammenPluginUtil
42             .getCollaborationElement(elementEntityContext, subElement))
43         .collect(Collectors.toList());
44   }
45
46   public CollaborationElement getElement(SessionContext context, ElementContext elementContext,
47                                          Id elementId) {
48     ElementEntityContext elementEntityContext =
49         new ElementEntityContext(ZusammenPluginUtil.getPrivateSpaceName(context), elementContext);
50     return getElementRepository(context)
51         .get(context, elementEntityContext, new ElementEntity(elementId))
52         .map(elementEntity -> ZusammenPluginUtil
53             .getCollaborationElement(elementEntityContext, elementEntity))
54         .orElse(null);
55   }
56
57   public void createElement(SessionContext context, CollaborationElement element) {
58     getElementRepository(context)
59         .create(context,
60             new ElementEntityContext(getSpaceName(context, element.getSpace()),
61                 element.getItemId(), element.getVersionId()),
62             ZusammenPluginUtil.getElementEntity(element));
63   }
64
65   public void updateElement(SessionContext context, CollaborationElement element) {
66     getElementRepository(context)
67         .update(context,
68             new ElementEntityContext(getSpaceName(context, element.getSpace()),
69                 element.getItemId(), element.getVersionId()),
70             ZusammenPluginUtil.getElementEntity(element));
71   }
72
73   public void deleteElement(SessionContext context, CollaborationElement element) {
74     deleteElementHierarchy(getElementRepository(context),
75         context,
76         new ElementEntityContext(getSpaceName(context, element.getSpace()),
77             element.getItemId(), element.getVersionId()),
78         ZusammenPluginUtil.getElementEntity(element));
79   }
80
81   public boolean checkHealth(SessionContext sessionContext){
82     return getElementRepository(sessionContext).checkHealth(sessionContext);
83   }
84
85   private void deleteElementHierarchy(ElementRepository elementRepository, SessionContext context,
86                                       ElementEntityContext elementEntityContext,
87                                       ElementEntity elementEntity) {
88     Optional<ElementEntity> retrieved =
89         elementRepository.get(context, elementEntityContext, elementEntity);
90     if (!retrieved.isPresent()) {
91       return;
92     }
93     retrieved.get().getSubElementIds().stream()
94         .map(ElementEntity::new)
95         .forEach(subElementEntity -> deleteElementHierarchy(
96             elementRepository, context, elementEntityContext, subElementEntity));
97
98     // only for the first one the parentId will populated (so it'll be removed from its parent)
99     elementRepository.delete(context, elementEntityContext, elementEntity);
100   }
101
102   protected ElementRepository getElementRepository(SessionContext context) {
103     return ElementRepositoryFactory.getInstance().createInterface(context);
104   }
105 }