diff options
Diffstat (limited to 'openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/main/CassandraCollaborationStorePluginImpl.java')
-rw-r--r-- | openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/main/CassandraCollaborationStorePluginImpl.java | 521 |
1 files changed, 0 insertions, 521 deletions
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/main/CassandraCollaborationStorePluginImpl.java b/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/main/CassandraCollaborationStorePluginImpl.java deleted file mode 100644 index f9b65224e0..0000000000 --- a/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/main/CassandraCollaborationStorePluginImpl.java +++ /dev/null @@ -1,521 +0,0 @@ -/* - * Copyright © 2016-2017 European Support Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.openecomp.core.zusammen.plugin.main; - -import com.amdocs.zusammen.commons.health.data.HealthInfo; -import com.amdocs.zusammen.commons.health.data.HealthStatus; -import com.amdocs.zusammen.datatypes.Id; -import com.amdocs.zusammen.datatypes.Namespace; -import com.amdocs.zusammen.datatypes.SessionContext; -import com.amdocs.zusammen.datatypes.Space; -import com.amdocs.zusammen.datatypes.item.Action; -import com.amdocs.zusammen.datatypes.item.ElementContext; -import com.amdocs.zusammen.datatypes.item.Info; -import com.amdocs.zusammen.datatypes.item.ItemVersion; -import com.amdocs.zusammen.datatypes.item.ItemVersionData; -import com.amdocs.zusammen.datatypes.item.ItemVersionDataConflict; -import com.amdocs.zusammen.datatypes.item.ItemVersionStatus; -import com.amdocs.zusammen.datatypes.item.Resolution; -import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions; -import com.amdocs.zusammen.datatypes.itemversion.Revision; -import com.amdocs.zusammen.datatypes.itemversion.Tag; -import com.amdocs.zusammen.datatypes.response.ErrorCode; -import com.amdocs.zusammen.datatypes.response.Module; -import com.amdocs.zusammen.datatypes.response.Response; -import com.amdocs.zusammen.datatypes.response.ReturnCode; -import com.amdocs.zusammen.datatypes.response.ZusammenException; -import com.amdocs.zusammen.sdk.collaboration.CollaborationStore; -import com.amdocs.zusammen.sdk.collaboration.types.CollaborationElement; -import com.amdocs.zusammen.sdk.collaboration.types.CollaborationElementChange; -import com.amdocs.zusammen.sdk.collaboration.types.CollaborationElementConflict; -import com.amdocs.zusammen.sdk.collaboration.types.CollaborationItemVersionConflict; -import com.amdocs.zusammen.sdk.collaboration.types.CollaborationMergeChange; -import com.amdocs.zusammen.sdk.collaboration.types.CollaborationMergeResult; -import com.amdocs.zusammen.sdk.collaboration.types.CollaborationPublishResult; -import com.amdocs.zusammen.sdk.types.ElementConflictDescriptor; -import com.amdocs.zusammen.sdk.types.ElementDescriptor; -import org.openecomp.core.zusammen.plugin.ZusammenPluginUtil; -import org.openecomp.core.zusammen.plugin.collaboration.CommitStagingService; -import org.openecomp.core.zusammen.plugin.collaboration.ElementPrivateStore; -import org.openecomp.core.zusammen.plugin.collaboration.ElementPublicStore; -import org.openecomp.core.zusammen.plugin.collaboration.ElementStageStore; -import org.openecomp.core.zusammen.plugin.collaboration.PublishService; -import org.openecomp.core.zusammen.plugin.collaboration.RevertService; -import org.openecomp.core.zusammen.plugin.collaboration.SyncService; -import org.openecomp.core.zusammen.plugin.collaboration.VersionPrivateStore; -import org.openecomp.core.zusammen.plugin.collaboration.VersionPublicStore; -import org.openecomp.core.zusammen.plugin.collaboration.VersionStageStore; -import org.openecomp.core.zusammen.plugin.collaboration.impl.ElementPrivateStoreImpl; -import org.openecomp.core.zusammen.plugin.collaboration.impl.ElementPublicStoreImpl; -import org.openecomp.core.zusammen.plugin.collaboration.impl.ElementStageStoreImpl; -import org.openecomp.core.zusammen.plugin.collaboration.impl.VersionPrivateStoreImpl; -import org.openecomp.core.zusammen.plugin.collaboration.impl.VersionPublicStoreImpl; -import org.openecomp.core.zusammen.plugin.collaboration.impl.VersionStageStoreImpl; -import org.openecomp.core.zusammen.plugin.dao.types.ElementEntity; -import org.openecomp.core.zusammen.plugin.dao.types.StageEntity; -import org.openecomp.core.zusammen.plugin.dao.types.SynchronizationStateEntity; -import org.openecomp.core.zusammen.plugin.dao.types.VersionDataElement; -import org.openecomp.core.zusammen.plugin.dao.types.VersionEntity; - -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import static com.amdocs.zusammen.datatypes.item.SynchronizationStatus.MERGING; -import static com.amdocs.zusammen.datatypes.item.SynchronizationStatus.OUT_OF_SYNC; -import static com.amdocs.zusammen.datatypes.item.SynchronizationStatus.UP_TO_DATE; -import static org.openecomp.core.zusammen.plugin.ZusammenPluginConstants.ROOT_ELEMENTS_PARENT_ID; -import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.convertToCollaborationElement; -import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.convertToElementChange; -import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.convertToElementDescriptor; -import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.convertToElementEntity; -import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.convertToItemVersion; -import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.convertToVersionData; -import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.convertToVersionEntity; - -public class CassandraCollaborationStorePluginImpl implements CollaborationStore { - // TODO: 8/15/2017 inject - - private VersionPrivateStore versionPrivateStore = new VersionPrivateStoreImpl(); - private VersionPublicStore versionPublicStore = new VersionPublicStoreImpl(); - private VersionStageStore versionStageStore = new VersionStageStoreImpl(); - - private ElementPrivateStore elementPrivateStore = new ElementPrivateStoreImpl(); - private ElementPublicStore elementPublicStore = new ElementPublicStoreImpl(); - private ElementStageStore elementStageStore = new ElementStageStoreImpl(); - - // TODO: 9/4/2017 - private CommitStagingService commitStagingService = - new CommitStagingService(versionPrivateStore, versionStageStore, elementPrivateStore, - elementStageStore); - private PublishService publishService = - new PublishService(versionPublicStore, versionPrivateStore, elementPublicStore, - elementPrivateStore); - private SyncService syncService = - new SyncService(versionPublicStore, versionPrivateStore, versionStageStore, - elementPublicStore, elementPrivateStore, elementStageStore); - - private RevertService revertService = - new RevertService(elementPublicStore, elementPrivateStore); - - @Override - public Response<Void> createItem(SessionContext context, Id itemId, Info info) { - // done by state store - return new Response(Void.TYPE); - } - - @Override - public Response<Void> deleteItem(SessionContext context, Id itemId) { - // done by state store - return new Response(Void.TYPE); - } - - @Override - public Response<Void> createItemVersion(SessionContext context, Id itemId, Id baseVersionId, - Id versionId, ItemVersionData itemVersionData) { - Date creationTime = new Date(); - versionPrivateStore.create(context, itemId, - convertToVersionEntity(versionId, baseVersionId, creationTime, creationTime)); - - ElementContext elementContext = new ElementContext(itemId, versionId); - VersionDataElement versionData = new VersionDataElement(itemVersionData); - - if (baseVersionId == null) { - elementPrivateStore.create(context, elementContext, versionData); - } else { - copyElements(context, new ElementContext(itemId, baseVersionId), elementContext); - elementPrivateStore.update(context, elementContext, versionData); - } - - return new Response(Void.TYPE); - } - - @Override - public Response<Void> updateItemVersion(SessionContext context, Id itemId, Id versionId, - ItemVersionData itemVersionData) { - - if (elementPrivateStore.update(context, new ElementContext(itemId, versionId), - new VersionDataElement(itemVersionData))) { - - VersionEntity version = new VersionEntity(versionId); - version.setModificationTime(new Date()); - versionPrivateStore.update(context, itemId, version); - } - - return new Response(Void.TYPE); - } - - @Override - public Response<Void> deleteItemVersion(SessionContext context, Id itemId, Id versionId) { - elementPrivateStore - .delete(context, new ElementContext(itemId, versionId), new VersionDataElement()); - - versionPrivateStore.delete(context, itemId, new VersionEntity(versionId)); - return new Response(Void.TYPE); - } - - @Override - public Response<ItemVersionStatus> getItemVersionStatus(SessionContext context, Id itemId, - Id versionId) { - if (versionStageStore.get(context, itemId, new VersionEntity(versionId)).isPresent()) { - return new Response<>(new ItemVersionStatus(MERGING, true)); - } - - Optional<SynchronizationStateEntity> publicSyncState = - versionPublicStore.getSynchronizationState(context, itemId, versionId); - - if (!publicSyncState.isPresent()) { - return new Response<>(new ItemVersionStatus(UP_TO_DATE, true)); - } - - SynchronizationStateEntity privateSyncState = - versionPrivateStore.getSynchronizationState(context, itemId, versionId) - // TODO: 7/18/2017 ? - .orElseThrow(() -> new IllegalStateException("private version must exist")); - - return new Response<>(new ItemVersionStatus( - privateSyncState.getPublishTime().equals(publicSyncState.get().getPublishTime()) - ? UP_TO_DATE - : OUT_OF_SYNC, - privateSyncState.isDirty())); - } - - @Override - public Response<Void> tagItemVersion(SessionContext context, Id itemId, Id versionId, - Id revisionId, - Tag tag) { - /* if (revisionId != null) { - throw new UnsupportedOperationException( - "In this plugin implementation tag is supported only on versionId"); - } - - copyElements(context, - new ElementContext(itemId, versionId), - new ElementContext(itemId, versionId, tag.getName()));*/ - - return new Response(Void.TYPE); - } - - @Override - public Response<CollaborationPublishResult> publishItemVersion(SessionContext context, - Id itemId, Id versionId, - String message) { - try { - return new Response<>(publishService.publish(context, itemId, versionId, message)); - } catch (ZusammenException ze) { - return new Response<>( - new ReturnCode(ErrorCode.CL_ITEM_VERSION_PUBLISH, Module.ZCSP, null, ze.getReturnCode())); - } - } - - @Override - public Response<CollaborationMergeResult> syncItemVersion(SessionContext context, Id itemId, - Id versionId) { - CollaborationMergeResult result = syncService.sync(context, itemId, versionId, false); - commitStagingService.commitStaging(context, itemId, versionId); - - return new Response<>(result); - } - - @Override - public Response<CollaborationMergeResult> forceSyncItemVersion(SessionContext context, Id itemId, - Id versionId) { - CollaborationMergeResult result = syncService.sync(context, itemId, versionId, true); - commitStagingService.commitStaging(context, itemId, versionId); - - return new Response<>(result); - } - - @Override - public Response<CollaborationMergeResult> mergeItemVersion(SessionContext context, Id itemId, - Id versionId, Id sourceVersionId) { - throw new UnsupportedOperationException("mergeItemVersion"); - } - - @Override - public Response<CollaborationItemVersionConflict> getItemVersionConflict(SessionContext context, - Id itemId, - Id versionId) { - ElementContext elementContext = new ElementContext(itemId, versionId, Id.ZERO); - - Collection<StageEntity<ElementEntity>> conflictedStagedElementDescriptors = - elementStageStore.listConflictedDescriptors(context, elementContext); - - CollaborationItemVersionConflict result = new CollaborationItemVersionConflict(); - for (StageEntity<ElementEntity> stagedElementDescriptor : conflictedStagedElementDescriptors) { - if (ROOT_ELEMENTS_PARENT_ID.equals(stagedElementDescriptor.getEntity().getId())) { - result.setVersionDataConflict( - getVersionDataConflict(context, elementContext, stagedElementDescriptor)); - } else { - result.getElementConflictDescriptors() - .add(getElementConflictDescriptor(context, elementContext, stagedElementDescriptor)); - } - } - return new Response<>(result); - } - - @Override - public Response<ItemVersionRevisions> listItemVersionRevisions(SessionContext context, Id itemId, - Id versionId) { - return new Response<>(versionPublicStore.listItemVersionRevisions(context, itemId, versionId)); - } - - @Override - public Response<Revision> getItemVersionRevision(SessionContext context, Id itemId, Id versionId, - Id revisionId) { - throw new UnsupportedOperationException( - "get revision is not supported in the current cassandra plugin"); - } - - @Override - public Response<CollaborationMergeChange> resetItemVersionRevision(SessionContext context, - Id itemId, Id versionId, - Id revisionId) { - throw new UnsupportedOperationException("resetItemVersionRevision function not supported"); - - } - - @Override - public Response<CollaborationMergeChange> revertItemVersionRevision(SessionContext context, - Id itemId, Id versionId, - Id revisionId) { - Optional<ItemVersion> itemVersion = getItemVersion(context, itemId, versionId, revisionId); - if (!itemVersion.isPresent()) { - throw new RuntimeException(String - .format("Item %s, version %s: Cannot revert to revision %s since it is not found", - itemId, versionId, revisionId)); - } - - // TODO: 12/4/2017 force sync is done in order to clear dirty element on private - // this is temp solution that should be fixed. - forceSyncItemVersion(context, itemId, versionId); - - //updateItemVersion(context, itemId, versionId, itemVersion.get().getData()); - revertService.revert(context, itemId, versionId, revisionId); - - return new Response<>(new CollaborationMergeChange()); - } - - - @Override - public Response<Void> commitElements(SessionContext context, Id itemId, Id versionId, String s) { - // not needed - return new Response(Void.TYPE); - } - - @Override - public Response<Collection<CollaborationElement>> listElements(SessionContext context, - ElementContext elementContext, - Namespace namespace, - Id elementId) { - return new Response<>(elementPrivateStore.listSubs(context, elementContext, elementId).stream() - .map(elementEntity -> convertToCollaborationElement(elementContext, elementEntity)) - .collect(Collectors.toList())); - } - - @Override - public Response<CollaborationElement> getElement(SessionContext context, - ElementContext elementContext, - Namespace namespace, Id elementId) { - return new Response<>(elementPrivateStore.get(context, elementContext, elementId) - .map(elementEntity -> convertToCollaborationElement(elementContext, elementEntity)) - .orElse(null)); - } - - @Override - public Response<CollaborationElementConflict> getElementConflict(SessionContext context, - ElementContext elementContext, - Namespace namespace, - Id elementId) { - Optional<StageEntity<ElementEntity>> conflictedStagedElement = - elementStageStore - .getConflicted(context, elementContext, new ElementEntity(elementId)); - - return new Response<>(conflictedStagedElement - .map(stagedElement -> getElementConflict(context, elementContext, stagedElement)) - .orElse(null)); - } - - @Override - public Response<Void> createElement(SessionContext context, CollaborationElement element) { - elementPrivateStore.create(context, - new ElementContext(element.getItemId(), element.getVersionId()), - convertToElementEntity(element)); - return new Response(Void.TYPE); - } - - @Override - public Response<Void> updateElement(SessionContext context, CollaborationElement element) { - elementPrivateStore.update(context, - new ElementContext(element.getItemId(), element.getVersionId()), - convertToElementEntity(element)); - return new Response(Void.TYPE); - } - - @Override - public Response<Void> deleteElement(SessionContext context, CollaborationElement element) { - elementPrivateStore - .delete(context, new ElementContext(element.getItemId(), element.getVersionId()), - convertToElementEntity(element)); - - return new Response(Void.TYPE); - } - - @Override - public Response<CollaborationMergeResult> resolveElementConflict(SessionContext context, - CollaborationElement element, - Resolution resolution) { - ElementContext elementContext = new ElementContext(element.getItemId(), element.getVersionId()); - elementStageStore - .resolveConflict(context, elementContext, convertToElementEntity(element), resolution); - commitStagingService.commitStaging(context, element.getItemId(), element.getVersionId()); - - return new Response<>(new CollaborationMergeResult()); - } - - @Override - public Response<ItemVersion> getItemVersion(SessionContext context, Space space, Id itemId, - Id versionId, Id revisionId) { - return new Response<>(getItemVersion(context, itemId, versionId, revisionId).orElse(null)); - } - - @Override - public Response<HealthInfo> checkHealth(SessionContext context) throws ZusammenException { - HealthInfo healthInfo = versionPublicStore.checkHealth(context) - ? new HealthInfo(Module.ZCSP.getDescription(), HealthStatus.UP, "") - : new HealthInfo(Module.ZCSP.getDescription(), HealthStatus.DOWN, "No Schema Available"); - - return new Response<>(healthInfo); - } - - private Optional<ItemVersion> getItemVersion(SessionContext context, Id itemId, Id versionId, - Id revisionId) { - // since revisions are kept only on public - get from there - Optional<VersionEntity> versionEntity = versionPublicStore.get(context, itemId, versionId); - if (!versionEntity.isPresent()) { - return Optional.empty(); - } - - return elementPublicStore - .getDescriptor(context, new ElementContext(itemId, versionId, revisionId), - ROOT_ELEMENTS_PARENT_ID) - .map(ZusammenPluginUtil::convertToVersionData) - .map(itemVersionData -> convertToItemVersion(versionEntity.get(), itemVersionData)); - } - - private List<ElementEntity> listVersionElements(SessionContext context, - ElementContext elementContext) { - return elementPrivateStore.listIds(context, elementContext).entrySet().stream() // TODO: - // 9/5/2017 parallel - .map(entry -> elementPrivateStore.get(context, elementContext, entry.getKey()).get()) - .collect(Collectors.toList()); - } - - private void copyElements(SessionContext context, - ElementContext sourceContext, ElementContext targetContext) { - listVersionElements(context, sourceContext).forEach(element -> { - // publishTime copied as is and dirty is off - Date publishTime = - elementPrivateStore.getSynchronizationState(context, sourceContext, element.getId()) - .get().getPublishTime(); - elementPrivateStore.commitStagedCreate(context, targetContext, element, publishTime); - }); - } - - private ItemVersionDataConflict getVersionDataConflict(SessionContext context, - ElementContext elementContext, - StageEntity<ElementEntity> stagedElementDescriptor) { - ItemVersionDataConflict versionConflict = new ItemVersionDataConflict(); - versionConflict.setRemoteData(convertToVersionData(stagedElementDescriptor.getEntity())); - if (stagedElementDescriptor.getAction() == Action.UPDATE) { - versionConflict.setLocalData(getPrivateVersionData(context, elementContext)); - } - return versionConflict; - } - - private ItemVersionData getPrivateVersionData(SessionContext context, - ElementContext elementContext) { - return elementPrivateStore.getDescriptor(context, elementContext, ROOT_ELEMENTS_PARENT_ID) - .map(ZusammenPluginUtil::convertToVersionData) - .orElseThrow(() -> new IllegalStateException("Version must have data")); - } - - private ElementConflictDescriptor getElementConflictDescriptor(SessionContext context, - ElementContext elementContext, - StageEntity<ElementEntity> stagedElementDescriptor) { - ElementDescriptor elementDescriptorFromStage = - convertToElementDescriptor(elementContext, (stagedElementDescriptor.getEntity())); - - ElementConflictDescriptor conflictDescriptor = new ElementConflictDescriptor(); - switch (stagedElementDescriptor.getAction()) { - case CREATE: - conflictDescriptor.setRemoteElementDescriptor(elementDescriptorFromStage); - break; - case UPDATE: - conflictDescriptor.setRemoteElementDescriptor(elementDescriptorFromStage); - conflictDescriptor.setLocalElementDescriptor(convertToElementDescriptor(elementContext, - elementPrivateStore - .getDescriptor(context, elementContext, stagedElementDescriptor.getEntity().getId()) - .orElse(null)));// updated on public while deleted from private - break; - case DELETE: - conflictDescriptor.setLocalElementDescriptor(elementDescriptorFromStage); - break; - default: - break; - } - return conflictDescriptor; - } - - private void addElementsToChangedElements(ElementContext elementContext, - Collection<ElementEntity> elements, - Collection<CollaborationElementChange> changedElements, - Action action) { - elements.stream() - .map(elementEntity -> convertToElementChange(elementContext, elementEntity, action)) - .forEach(changedElements::add); - } - - private CollaborationElementConflict getElementConflict(SessionContext context, - ElementContext entityContext, - StageEntity<ElementEntity> stagedElement) { - CollaborationElement elementFromStage = - convertToCollaborationElement(entityContext, (stagedElement.getEntity())); - - CollaborationElementConflict conflict = new CollaborationElementConflict(); - switch (stagedElement.getAction()) { - case CREATE: - conflict.setRemoteElement(elementFromStage); - break; - case UPDATE: - conflict.setRemoteElement(elementFromStage); - conflict.setLocalElement( - elementPrivateStore.get(context, entityContext, stagedElement.getEntity().getId()) - .map(element -> convertToCollaborationElement(entityContext, element)) - .orElse(null));// updated on public while deleted from private - break; - case DELETE: - conflict.setLocalElement(elementFromStage); - break; - default: - break; - } - return conflict; - } -}
\ No newline at end of file |