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 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;
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;
20 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getSpaceName;
23 public class ElementCollaborationStore {
25 public Collection<CollaborationElement> listElements(SessionContext context,
26 ElementContext elementContext,
28 ElementEntityContext elementEntityContext =
29 new ElementEntityContext(ZusammenPluginUtil.getPrivateSpaceName(context), elementContext);
31 if (elementId == null) {
32 elementId = ZusammenPluginConstants.ROOT_ELEMENTS_PARENT_ID;
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());
46 public CollaborationElement getElement(SessionContext context, ElementContext elementContext,
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))
57 public void createElement(SessionContext context, CollaborationElement element) {
58 getElementRepository(context)
60 new ElementEntityContext(getSpaceName(context, element.getSpace()),
61 element.getItemId(), element.getVersionId()),
62 ZusammenPluginUtil.getElementEntity(element));
65 public void updateElement(SessionContext context, CollaborationElement element) {
66 getElementRepository(context)
68 new ElementEntityContext(getSpaceName(context, element.getSpace()),
69 element.getItemId(), element.getVersionId()),
70 ZusammenPluginUtil.getElementEntity(element));
73 public void deleteElement(SessionContext context, CollaborationElement element) {
74 deleteElementHierarchy(getElementRepository(context),
76 new ElementEntityContext(getSpaceName(context, element.getSpace()),
77 element.getItemId(), element.getVersionId()),
78 ZusammenPluginUtil.getElementEntity(element));
81 public boolean checkHealth(SessionContext sessionContext){
82 return getElementRepository(sessionContext).checkHealth(sessionContext);
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()) {
93 retrieved.get().getSubElementIds().stream()
94 .map(ElementEntity::new)
95 .forEach(subElementEntity -> deleteElementHierarchy(
96 elementRepository, context, elementEntityContext, subElementEntity));
98 // only for the first one the parentId will populated (so it'll be removed from its parent)
99 elementRepository.delete(context, elementEntityContext, elementEntity);
102 protected ElementRepository getElementRepository(SessionContext context) {
103 return ElementRepositoryFactory.getInstance().createInterface(context);