From f4398a841ce8c4c185ab75abdf5e5a1c2d8ff784 Mon Sep 17 00:00:00 2001 From: talig Date: Mon, 23 Oct 2017 09:23:14 +0300 Subject: Fix onboarding undo checkout impl Fix reset in zusammen collaboration plugin, Throw explicit exception in case of zusammen db illegal state. Change-Id: Ic9463517b72c7a89a2de78b86da5679ac57371a6 Issue-ID: SDC-490 Signed-off-by: talig --- .../collaboration/VersionCollaborationStore.java | 81 +++++++++++++++------- 1 file changed, 56 insertions(+), 25 deletions(-) (limited to 'openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/collaboration/VersionCollaborationStore.java') diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/collaboration/VersionCollaborationStore.java b/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/collaboration/VersionCollaborationStore.java index ae23b6e8a9..db3066c313 100644 --- a/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/collaboration/VersionCollaborationStore.java +++ b/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/collaboration/VersionCollaborationStore.java @@ -14,7 +14,10 @@ import org.openecomp.core.zusammen.plugin.dao.ElementRepositoryFactory; import org.openecomp.core.zusammen.plugin.dao.types.ElementEntity; import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import static org.openecomp.core.zusammen.plugin.ZusammenPluginConstants.ROOT_ELEMENTS_PARENT_ID; import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getSpaceName; public class VersionCollaborationStore { @@ -25,46 +28,74 @@ public class VersionCollaborationStore { throw new UnsupportedOperationException( "In this plugin implementation tag is supported only on versionId"); } - copyElements(context, getSpaceName(context, Space.PRIVATE), itemId, versionId, tag.getName()); + String space = getSpaceName(context, Space.PRIVATE); + ElementEntityContext targetContext = new ElementEntityContext(space, itemId, versionId); + targetContext.setChangeRef(tag.getName()); + copyElements(context, new ElementEntityContext(space, itemId, versionId), targetContext, + getElementRepository(context)); } public CollaborationMergeChange resetItemVersionHistory(SessionContext context, Id itemId, Id versionId, String changeRef) { ElementRepository elementRepository = getElementRepository(context); - ElementEntityContext elementContext = - new ElementEntityContext(getSpaceName(context, Space.PRIVATE), itemId, versionId); - CollaborationMergeChange resetChange = new CollaborationMergeChange(); + String spaceName = getSpaceName(context, Space.PRIVATE); + ElementEntityContext versionContext = new ElementEntityContext(spaceName, itemId, versionId); - Collection versionElements = elementRepository.list(context, elementContext); - versionElements.stream() - .map(elementEntity -> - convertElementEntityToElementChange(elementEntity, elementContext, Action.DELETE)) - .forEach(resetChange.getChangedElements()::add); + Collection deletedElements = + deleteElements(context, versionContext, elementRepository); - elementContext.setChangeRef(changeRef); - Collection changeRefElements = elementRepository.list(context, elementContext); - changeRefElements.stream() - .map(elementEntity -> - convertElementEntityToElementChange(elementEntity, elementContext, Action.CREATE)) - .forEach(resetChange.getChangedElements()::add); + ElementEntityContext changeRefContext = new ElementEntityContext(spaceName, itemId, versionId); + changeRefContext.setChangeRef(changeRef); - return resetChange; // TODO: 4/19/2017 version change... + Collection createdElements = + copyElements(context, changeRefContext, versionContext, elementRepository); + + // TODO: 4/19/2017 version change... + return createCollaborationMergeChange(versionContext, deletedElements, createdElements); } - private void copyElements(SessionContext context, String space, Id itemId, Id sourceVersionId, - String targetTag) { - ElementRepository elementRepository = getElementRepository(context); - ElementEntityContext elementContext = new ElementEntityContext(space, itemId, sourceVersionId); + private Collection deleteElements(SessionContext context, + ElementEntityContext elementContext, + ElementRepository elementRepository) { + Collection elements = elementRepository.list(context, elementContext); + elements.forEach(element -> elementRepository + .delete(context, elementContext, new ElementEntity(element.getId()))); + elementRepository.delete(context, elementContext, new ElementEntity(ROOT_ELEMENTS_PARENT_ID)); + return elements; + } - Collection versionElements = elementRepository.list(context, elementContext); + private Collection copyElements(SessionContext context, + ElementEntityContext sourceElementContext, + ElementEntityContext targetElementContext, + ElementRepository elementRepository) { + Collection elements = elementRepository.list(context, sourceElementContext); + elements.forEach(elementEntity -> + elementRepository.create(context, targetElementContext, elementEntity)); + return elements; + } + + private CollaborationMergeChange createCollaborationMergeChange( + ElementEntityContext versionContext, + Collection deletedElements, + Collection createdElements) { + CollaborationMergeChange mergeChange = new CollaborationMergeChange(); + mergeChange.getChangedElements().addAll( + convertToCollaborationElementChanges(versionContext, deletedElements, Action.DELETE)); + mergeChange.getChangedElements().addAll( + convertToCollaborationElementChanges(versionContext, createdElements, Action.CREATE)); + return mergeChange; + } - elementContext.setChangeRef(targetTag); - versionElements - .forEach(elementEntity -> elementRepository.create(context, elementContext, elementEntity)); + private List convertToCollaborationElementChanges( + ElementEntityContext elementContext, Collection changedElements, + Action action) { + return changedElements.stream() + .map(element -> convertToCollaborationElementChange(element, elementContext, action)) + .collect(Collectors.toList()); } - private CollaborationElementChange convertElementEntityToElementChange( + private CollaborationElementChange convertToCollaborationElementChange( ElementEntity elementEntity, ElementEntityContext elementContext, Action action) { CollaborationElementChange elementChange = new CollaborationElementChange(); elementChange -- cgit 1.2.3-korg