From 8e9c0653dd6c6862123c9609ae34e1206d86456e Mon Sep 17 00:00:00 2001 From: talig Date: Wed, 20 Dec 2017 14:30:43 +0200 Subject: Add collaboration feature Issue-ID: SDC-767 Change-Id: I14fb4c1f54086ed03a56a7ff7fab9ecd40381795 Signed-off-by: talig --- .../core/zusammen/db/ZusammenConnector.java | 52 ++++- .../zusammen/db/impl/ZusammenConnectorImpl.java | 260 ++++++++++++++++++--- .../core/zusammen/impl/ZusammenAdaptorImpl.java | 219 ++++++++++++----- 3 files changed, 425 insertions(+), 106 deletions(-) (limited to 'openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core') diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/db/ZusammenConnector.java b/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/db/ZusammenConnector.java index 6381b2efd2..9005bb84c3 100644 --- a/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/db/ZusammenConnector.java +++ b/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/db/ZusammenConnector.java @@ -1,7 +1,9 @@ package org.openecomp.core.zusammen.db; import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementConflict; import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ItemVersionConflict; import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement; import com.amdocs.zusammen.commons.health.data.HealthInfo; import com.amdocs.zusammen.datatypes.Id; @@ -11,22 +13,31 @@ import com.amdocs.zusammen.datatypes.item.Info; import com.amdocs.zusammen.datatypes.item.Item; import com.amdocs.zusammen.datatypes.item.ItemVersion; import com.amdocs.zusammen.datatypes.item.ItemVersionData; +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.Tag; -import com.amdocs.zusammen.datatypes.response.Response; import java.util.Collection; -import java.util.Optional; public interface ZusammenConnector { + Collection checkHealth(SessionContext sessionContext); + + String getVersion(SessionContext sessionContext); + Collection listItems(SessionContext context); + Item getItem(SessionContext context, Id itemId); + Id createItem(SessionContext context, Info info); void updateItem(SessionContext context, Id itemId, Info info); - Collection listVersions(SessionContext context, Id itemId); + Collection listPublicVersions(SessionContext context, Id itemId); + + ItemVersion getPublicVersion(SessionContext context, Id itemId, Id versionId); Id createVersion(SessionContext context, Id itemId, Id baseVersionId, ItemVersionData itemVersionData); @@ -34,23 +45,42 @@ public interface ZusammenConnector { void updateVersion(SessionContext context, Id itemId, Id versionId, ItemVersionData itemVersionData); + ItemVersion getVersion(SessionContext context, Id itemId, Id versionId); + + ItemVersionStatus getVersionStatus(SessionContext context, Id itemId, Id versionId); + void tagVersion(SessionContext context, Id itemId, Id versionId, Tag tag); - void resetVersionHistory(SessionContext context, Id itemId, Id versionId, String changeRef); + void resetVersionRevision(SessionContext context, Id itemId, Id versionId, Id revisionId); + + void revertVersionRevision(SessionContext context, Id itemId, Id versionId, Id revisionId); + + ItemVersionRevisions listVersionRevisions(SessionContext context, Id itemId, Id versionId); + + void publishVersion(SessionContext context, Id itemId, Id versionId, String message); + + void syncVersion(SessionContext context, Id itemId, Id versionId); + + void forceSyncVersion(SessionContext context, Id itemId, Id versionId); + + ItemVersionConflict getVersionConflict(SessionContext context, Id itemId, Id versionId); Collection listElements(SessionContext context, ElementContext elementContext, Id parentElementId); - Response getElementInfo(SessionContext context, ElementContext elementContext, Id - elementId); + ElementInfo getElementInfo(SessionContext context, ElementContext elementContext, Id elementId); - Response getElement(SessionContext context, ElementContext elementContext, Id elementId); + Element getElement(SessionContext context, ElementContext elementContext, Id elementId); - Optional saveElement(SessionContext context, ElementContext elementContext, - ZusammenElement element, String message); + ElementConflict getElementConflict(SessionContext context, ElementContext elementContext, + Id elementId); - Collection checkHealth(SessionContext sessionContext); + Element saveElement(SessionContext context, ElementContext elementContext, + ZusammenElement element, String message); - String getVersion(SessionContext sessionContext); + void resolveElementConflict(SessionContext context, ElementContext elementContext, + ZusammenElement element, Resolution resolution); + + void resetVersionHistory(SessionContext context, Id itemId, Id versionId, String changeRef); } diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/db/impl/ZusammenConnectorImpl.java b/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/db/impl/ZusammenConnectorImpl.java index deb5ffde35..1d387b939f 100644 --- a/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/db/impl/ZusammenConnectorImpl.java +++ b/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/db/impl/ZusammenConnectorImpl.java @@ -1,11 +1,14 @@ package org.openecomp.core.zusammen.db.impl; +import com.amdocs.zusammen.adaptor.inbound.api.health.HealthAdaptorFactory; import com.amdocs.zusammen.adaptor.inbound.api.item.ElementAdaptorFactory; import com.amdocs.zusammen.adaptor.inbound.api.item.ItemAdaptorFactory; import com.amdocs.zusammen.adaptor.inbound.api.item.ItemVersionAdaptorFactory; -import com.amdocs.zusammen.adaptor.inbound.api.health.HealthAdaptorFactory; import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementConflict; import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ItemVersionConflict; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.MergeResult; import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement; import com.amdocs.zusammen.commons.health.data.HealthInfo; import com.amdocs.zusammen.datatypes.Id; @@ -16,6 +19,9 @@ import com.amdocs.zusammen.datatypes.item.Info; import com.amdocs.zusammen.datatypes.item.Item; import com.amdocs.zusammen.datatypes.item.ItemVersion; import com.amdocs.zusammen.datatypes.item.ItemVersionData; +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.Tag; import com.amdocs.zusammen.datatypes.response.Response; import com.amdocs.zusammen.datatypes.response.ReturnCode; @@ -28,14 +34,18 @@ import org.openecomp.sdc.logging.types.LoggerConstants; import org.openecomp.sdc.logging.types.LoggerErrorCode; import java.util.Collection; -import java.util.Optional; public class ZusammenConnectorImpl implements ZusammenConnector { + private static final String GET_ELEMENT_ERR_MSG = + "Failed to get element. Item Id: %s, version Id: %s, element Id: %s message: %s"; + private static final String GET_ELEMENT_IN_REV_ERR_MSG = + "Failed to get element. Item Id: %s, version Id: %s, revision Id: %s, element Id: %s message: %s"; private ItemAdaptorFactory itemAdaptorFactory; private ItemVersionAdaptorFactory versionAdaptorFactory; private ElementAdaptorFactory elementAdaptorFactory; private HealthAdaptorFactory healthAdaptorFactory; + public ZusammenConnectorImpl( ItemAdaptorFactory itemAdaptorFactory, ItemVersionAdaptorFactory versionAdaptorFactory, @@ -68,15 +78,24 @@ public class ZusammenConnectorImpl implements ZusammenConnector { return response.getValue(); } + @Override + public Item getItem(SessionContext context, Id itemId) { + Response response = itemAdaptorFactory.createInterface(context).get(context, itemId); + if (!response.isSuccessful()) { + throw new RuntimeException( + "Failed to get Item. message:" + response.getReturnCode().toString()); + } + return response.getValue(); + } + @Override public Id createItem(SessionContext context, Info info) { Response response = itemAdaptorFactory.createInterface(context).create(context, info); - if (response.isSuccessful()) { - return response.getValue(); - } else { + if (!response.isSuccessful()) { throw new RuntimeException( - "failed to create Item. message:" + response.getReturnCode().toString()); + "Failed to create Item. message:" + response.getReturnCode().toString()); } + return response.getValue(); } @Override @@ -91,17 +110,29 @@ public class ZusammenConnectorImpl implements ZusammenConnector { } @Override - public Collection listVersions(SessionContext context, Id itemId) { + public Collection listPublicVersions(SessionContext context, Id itemId) { Response> versions = - versionAdaptorFactory.createInterface(context).list(context, Space.PRIVATE, itemId); + versionAdaptorFactory.createInterface(context).list(context, Space.PUBLIC, itemId); if (!versions.isSuccessful()) { logErrorMessageToMdc(ItemElementLoggerTargetServiceName.ITEM_VERSION_RETRIEVAL, versions .getReturnCode()); - throw new RuntimeException(versions.getReturnCode().toString()); // TODO: 3/26/2017 + throw new RuntimeException(versions.getReturnCode().toString()); } return versions.getValue(); } + @Override + public ItemVersion getPublicVersion(SessionContext context, Id itemId, Id versionId) { + Response response = versionAdaptorFactory.createInterface(context) + .get(context, Space.PUBLIC, itemId, versionId); + if (!response.isSuccessful()) { + throw new RuntimeException( + String.format("failed to get public Item Version. ItemId: %s, versionId: %s, message: %s", + itemId.getValue(), versionId.getValue(), response.getReturnCode().toString())); + } + return response.getValue(); + } + @Override public Id createVersion(SessionContext context, Id itemId, Id baseVersionId, ItemVersionData itemVersionData) { @@ -110,10 +141,9 @@ public class ZusammenConnectorImpl implements ZusammenConnector { if (response.isSuccessful()) { return response.getValue(); } else { - throw new RuntimeException("failed to create Item Version. ItemId:" + itemId + " based " + - "on:" + baseVersionId + - " message:" + response - .getReturnCode().toString()); + throw new RuntimeException(String.format( + "failed to create Item Version. ItemId: %s, base versionId: %s, message: %s", + itemId.getValue(), baseVersionId.getValue(), response.getReturnCode().toString())); } } @@ -124,9 +154,33 @@ public class ZusammenConnectorImpl implements ZusammenConnector { .update(context, itemId, versionId, itemVersionData); if (!response.isSuccessful()) { throw new RuntimeException( - String.format("failed to create Item Version. ItemId: %s, versionId: %s, message: %s", + String.format("failed to update Item Version. ItemId: %s, versionId: %s, message: %s", + itemId.getValue(), versionId.getValue(), response.getReturnCode().toString())); + } + } + + @Override + public ItemVersion getVersion(SessionContext context, Id itemId, Id versionId) { + Response response = versionAdaptorFactory.createInterface(context) + .get(context, Space.PRIVATE, itemId, versionId); + if (!response.isSuccessful()) { + throw new RuntimeException( + String.format("failed to get Item Version. ItemId: %s, versionId: %s, message: %s", itemId.getValue(), versionId.getValue(), response.getReturnCode().toString())); } + return response.getValue(); + } + + @Override + public ItemVersionStatus getVersionStatus(SessionContext context, Id itemId, Id versionId) { + Response response = + versionAdaptorFactory.createInterface(context).getStatus(context, itemId, versionId); + if (!response.isSuccessful()) { + throw new RuntimeException( + String.format("failed to get Item Version status. ItemId: %s, versionId: %s, message: %s", + itemId.getValue(), versionId.getValue(), response.getReturnCode().toString())); + } + return response.getValue(); } @Override @@ -136,65 +190,197 @@ public class ZusammenConnectorImpl implements ZusammenConnector { if (!response.isSuccessful()) { throw new RuntimeException(String.format( "failed to tag Item Version with tag %s. ItemId: %s, versionId: %s, message: %s", - tag.getName(), itemId.getValue(), versionId.getValue(), response.getReturnCode() - .getMessage())); + tag.getName(), itemId.getValue(), versionId.getValue(), + response.getReturnCode().toString())); } } @Override - public void resetVersionHistory(SessionContext context, Id itemId, Id versionId, - String changeRef) { + public void resetVersionRevision(SessionContext context, Id itemId, Id versionId, + Id revisionId) { Response response = versionAdaptorFactory.createInterface(context) - .resetHistory(context, itemId, versionId, changeRef); + .resetRevision(context, itemId, versionId, revisionId); if (!response.isSuccessful()) { throw new RuntimeException(String.format( - "failed to reset Item Version back to %s. ItemId: %s, versionId: %s, message: %s", - changeRef, itemId.getValue(), versionId.getValue(), + "failed to reset Item Version back to revision: %s. ItemId: %s, versionId: %s, message:" + + " %s", + revisionId.getValue(), itemId.getValue(), versionId.getValue(), response.getReturnCode().toString())); } } + @Override + public void revertVersionRevision(SessionContext context, Id itemId, Id versionId, + Id revisionId) { + Response response = versionAdaptorFactory.createInterface(context) + .revertRevision(context, itemId, versionId, revisionId); + if (!response.isSuccessful()) { + throw new RuntimeException(String.format( + "failed to revert Item Version back to revision: %s. ItemId: %s, versionId: %s, " + + "message: %s", + revisionId.getValue(), itemId.getValue(), versionId.getValue(), + response.getReturnCode().toString())); + } + } + + @Override + public ItemVersionRevisions listVersionRevisions(SessionContext context, Id itemId, + Id versionId) { + Response response = + versionAdaptorFactory.createInterface(context) + .listRevisions(context, itemId, versionId); + if (!response.isSuccessful()) { + throw new RuntimeException(String.format( + "failed to list revisions of Item Version. ItemId: %s, versionId: %s, message: %s", + itemId.getValue(), versionId.getValue(), response.getReturnCode().toString())); + } + return response.getValue(); + } + + + @Override + public void publishVersion(SessionContext context, Id itemId, Id versionId, String message) { + Response response = + versionAdaptorFactory.createInterface(context).publish(context, itemId, versionId, message); + if (!response.isSuccessful()) { + throw new RuntimeException(String.format( + "failed to publish item Version. ItemId: %s, versionId: %s, message: %s", + itemId.getValue(), versionId.getValue(), response.getReturnCode().toString())); + } + } + + @Override + public void syncVersion(SessionContext context, Id itemId, Id versionId) { + Response response = + versionAdaptorFactory.createInterface(context).sync(context, itemId, versionId); + if (!response.isSuccessful()) { + throw new RuntimeException(String.format( + "failed to sync item Version. ItemId: %s, versionId: %s, message: %s", + itemId.getValue(), versionId.getValue(), response.getReturnCode().toString())); + } + } + + @Override + public void forceSyncVersion(SessionContext context, Id itemId, Id versionId) { + Response response = + versionAdaptorFactory.createInterface(context).forceSync(context, itemId, versionId); + if (!response.isSuccessful()) { + throw new RuntimeException(String.format( + "failed to force sync item Version. ItemId: %s, versionId: %s, message: %s", + itemId.getValue(), versionId.getValue(), response.getReturnCode().toString())); + } + } + + @Override + public ItemVersionConflict getVersionConflict(SessionContext context, Id itemId, Id versionId) { + Response response = + versionAdaptorFactory.createInterface(context).getConflict(context, itemId, versionId); + if (!response.isSuccessful()) { + throw new RuntimeException(String + .format("failed to get Item Version conflict. ItemId: %s, versionId: %s, message: %s", + itemId.getValue(), versionId.getValue(), response.getReturnCode().toString())); + } + return response.getValue(); + } + @Override public Collection listElements(SessionContext context, ElementContext elementContext, Id parentElementId) { - Response> elementInfosResponse = elementAdaptorFactory + Response> response = elementAdaptorFactory .createInterface(context).list(context, elementContext, parentElementId); - if (elementInfosResponse.isSuccessful()) { - return elementInfosResponse.getValue(); + if (response.isSuccessful()) { + return response.getValue(); } else { logErrorMessageToMdc(ItemElementLoggerTargetServiceName.ELEMENT_GET_BY_PROPERTY, - elementInfosResponse.getReturnCode()); - throw new RuntimeException(elementInfosResponse.getReturnCode().toString()); + response.getReturnCode()); + throw new RuntimeException(response.getReturnCode().toString()); } } + @Override - public Response getElementInfo(SessionContext context, ElementContext elementContext, - Id elementId) { - return elementAdaptorFactory.createInterface(context) - .getInfo(context, elementContext, elementId); + public ElementInfo getElementInfo(SessionContext context, ElementContext elementContext, + Id elementId) { + Response response = + elementAdaptorFactory.createInterface(context).getInfo(context, elementContext, elementId); + if (!response.isSuccessful()) { + throw buildGetElementException(elementContext, elementId, + response.getReturnCode().toString()); + + } + return response.getValue(); } + @Override + public Element getElement(SessionContext context, ElementContext elementContext, + Id elementId) { + Response response = + elementAdaptorFactory.createInterface(context).get(context, elementContext, elementId); + if (!response.isSuccessful()) { + throw buildGetElementException(elementContext, elementId, + response.getReturnCode().toString()); + } + return response.getValue(); + } @Override - public Response getElement(SessionContext context, ElementContext elementContext, - Id elementId) { - return elementAdaptorFactory.createInterface(context).get(context, elementContext, elementId); + public ElementConflict getElementConflict(SessionContext context, ElementContext elementContext, + Id elementId) { + Response response = elementAdaptorFactory.createInterface(context) + .getConflict(context, elementContext, elementId); + if (!response.isSuccessful()) { + throw new RuntimeException(String.format( + "Failed to get element conflict. Item Id: %s, version Id: %s, element Id: %s message: %s", + elementContext.getItemId().getValue(), elementContext.getVersionId().getValue(), + elementId.getValue(), response.getReturnCode().toString())); + } + return response.getValue(); } @Override - public Optional saveElement(SessionContext context, ElementContext elementContext, - ZusammenElement element, String message) { + public Element saveElement(SessionContext context, ElementContext elementContext, + ZusammenElement element, String message) { Response response = elementAdaptorFactory.createInterface(context) .save(context, elementContext, element, message); if (!response.isSuccessful()) { throw new RuntimeException(String - .format("Failed to save element %s. ItemId: %s, versionId: %s, message: %s", + .format("Failed to create element %s. ItemId: %s, versionId: %s, message: %s", element.getElementId().getValue(), elementContext.getItemId().getValue(), elementContext.getVersionId().getValue(), response.getReturnCode().toString())); } - return Optional.of(response.getValue()); + return response.getValue(); + } + + @Override + public void resolveElementConflict(SessionContext context, ElementContext elementContext, + ZusammenElement element, + Resolution resolution) { + Response response = elementAdaptorFactory.createInterface(context) + .resolveConflict(context, elementContext, element, resolution); + if (!response.isSuccessful()) { + throw new RuntimeException( + "Failed to resolve conflict. message:" + response.getReturnCode().toString()); + } + } + + @Override + public void resetVersionHistory(SessionContext context, Id itemId, Id versionId, + String revision_id) { + + } + + private RuntimeException buildGetElementException(ElementContext elementContext, Id elementId, + String zusammenErrorMessage) { + if (elementContext.getRevisionId() == null) { + return new RuntimeException(String.format(GET_ELEMENT_ERR_MSG, + elementContext.getItemId().getValue(), elementContext.getVersionId().getValue(), + elementId.getValue(), zusammenErrorMessage)); + } + return new RuntimeException(String.format(GET_ELEMENT_IN_REV_ERR_MSG, + elementContext.getItemId().getValue(), elementContext.getVersionId().getValue(), + elementContext.getRevisionId().getValue(), + elementId.getValue(), zusammenErrorMessage)); } private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/impl/ZusammenAdaptorImpl.java b/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/impl/ZusammenAdaptorImpl.java index 41ce0283a1..9bdbfd681c 100644 --- a/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/impl/ZusammenAdaptorImpl.java +++ b/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/impl/ZusammenAdaptorImpl.java @@ -1,24 +1,30 @@ package org.openecomp.core.zusammen.impl; import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementConflict; import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; +import com.amdocs.zusammen.adaptor.inbound.api.types.item.ItemVersionConflict; import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement; import com.amdocs.zusammen.commons.health.data.HealthInfo; import com.amdocs.zusammen.datatypes.Id; import com.amdocs.zusammen.datatypes.SessionContext; -import com.amdocs.zusammen.datatypes.item.*; +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.Item; +import com.amdocs.zusammen.datatypes.item.ItemVersion; +import com.amdocs.zusammen.datatypes.item.ItemVersionData; +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.Tag; -import com.amdocs.zusammen.datatypes.response.Response; -import com.amdocs.zusammen.datatypes.response.ReturnCode; import org.openecomp.core.zusammen.api.ZusammenAdaptor; import org.openecomp.core.zusammen.db.ZusammenConnector; -import org.openecomp.sdc.datatypes.error.ErrorLevel; -import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage; -import org.openecomp.sdc.logging.types.LoggerConstants; -import org.openecomp.sdc.logging.types.LoggerErrorCode; +import org.openecomp.sdc.versioning.dao.types.Revision; import java.util.ArrayList; import java.util.Collection; +import java.util.Comparator; import java.util.List; import java.util.Optional; import java.util.function.Predicate; @@ -32,31 +38,16 @@ public class ZusammenAdaptorImpl implements ZusammenAdaptor { this.connector = connector; } - @Override - public Optional getFirstVersion(SessionContext context, Id itemId) { - Collection versions = connector.listVersions(context, itemId); - if(versions == null || versions.size()==0) { - return Optional.empty(); - } - List itemVersions = new ArrayList<>(versions); - sortItemVersionListByModificationTimeDescOrder(itemVersions); - ItemVersion itemVersion = itemVersions.iterator().next(); - - return Optional.ofNullable(itemVersion); - } - @Override public Optional getElementInfo(SessionContext context, ElementContext elementContext, Id elementId) { - Response response = connector.getElementInfo(context, elementContext, elementId); - return response.isSuccessful() ? Optional.ofNullable(response.getValue()) : Optional.empty(); + return Optional.ofNullable(connector.getElementInfo(context, elementContext, elementId)); } @Override public Optional getElement(SessionContext context, ElementContext elementContext, String elementId) { - Response response = connector.getElement(context, elementContext, new Id(elementId)); - return response.isSuccessful() ? Optional.ofNullable(response.getValue()) : Optional.empty(); + return Optional.ofNullable(connector.getElement(context, elementContext, new Id(elementId))); } @Override @@ -82,16 +73,14 @@ public class ZusammenAdaptorImpl implements ZusammenAdaptor { public Collection listElementData(SessionContext context, ElementContext elementContext, Id parentElementId) { - Collection elementInfoList = connector.listElements(context, elementContext, parentElementId); - if (elementInfoList != null) { - return elementInfoList.stream().map(elementInfo -> connector.getElement(context, - elementContext, elementInfo.getId()).getValue()).collect(Collectors.toList()); - } - - return new ArrayList<>(); + return elementInfoList == null + ? new ArrayList<>() + : elementInfoList.stream() + .map(elementInfo -> connector.getElement(context, elementContext, elementInfo.getId())) + .collect(Collectors.toList()); } @@ -119,12 +108,24 @@ public class ZusammenAdaptorImpl implements ZusammenAdaptor { } @Override - public Optional saveElement(SessionContext context, ElementContext elementContext, - ZusammenElement element, String message) { + public Optional getElementConflict(SessionContext context, ElementContext elementContext, + Id elementId) { + return Optional.ofNullable(connector.getElementConflict(context, elementContext, elementId)); + } + + @Override + public Element saveElement(SessionContext context, ElementContext elementContext, + ZusammenElement element, String message) { enrichElementHierarchyRec(context, elementContext, null, element); return connector.saveElement(context, elementContext, element, message); } + @Override + public void resolveElementConflict(SessionContext context, ElementContext elementContext, + ZusammenElement element, Resolution resolution) { + connector.resolveElementConflict(context, elementContext, element, resolution); + } + private void enrichElementHierarchyRec(SessionContext context, ElementContext elementContext, Id parentElementId, ZusammenElement element) { if (element.getAction() == Action.CREATE) { @@ -160,20 +161,14 @@ public class ZusammenAdaptorImpl implements ZusammenAdaptor { .findFirst(); } - private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName - itemElementLoggerTargetServiceName, - ReturnCode returnCode) { - logErrorMessageToMdc(itemElementLoggerTargetServiceName, returnCode.toString()); + @Override + public Collection listItems(SessionContext context) { + return connector.listItems(context); } - private void logErrorMessageToMdc(ItemElementLoggerTargetServiceName - itemElementLoggerTargetServiceName, - String message) { - MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB, - itemElementLoggerTargetServiceName.getDescription(), - ErrorLevel.ERROR.name(), - LoggerErrorCode.BUSINESS_PROCESS_ERROR.getErrorCode(), - message); + @Override + public Item getItem(SessionContext context, Id itemId) { + return connector.getItem(context, itemId); } @Override @@ -182,15 +177,52 @@ public class ZusammenAdaptorImpl implements ZusammenAdaptor { } @Override - public Id createVersion(SessionContext context, Id itemId, Id baseVersionId, ItemVersionData - itemVersionData) { - return connector.createVersion(context, itemId, baseVersionId, itemVersionData); + public void updateItem(SessionContext context, Id itemId, Info info) { + connector.updateItem(context, itemId, info); + } + @Override + public Optional getFirstVersion(SessionContext context, Id itemId) { + Collection versions = connector.listPublicVersions(context, itemId); + if (versions == null || versions.size() == 0) { + return Optional.empty(); + } + List itemVersions = new ArrayList<>(versions); + sortItemVersionListByModificationTimeDescOrder(itemVersions); + ItemVersion itemVersion = itemVersions.iterator().next(); + + return Optional.ofNullable(itemVersion); } @Override - public Collection listItems(SessionContext context) { - return connector.listItems(context); + public Collection listPublicVersions(SessionContext context, Id itemId) { + return connector.listPublicVersions(context, itemId); + } + + @Override + public ItemVersion getPublicVersion(SessionContext context, Id itemId, Id versionId) { + return connector.getPublicVersion(context, itemId, versionId); + } + + @Override + public ItemVersion getVersion(SessionContext context, Id itemId, Id versionId) { + return connector.getVersion(context, itemId, versionId); + } + + @Override + public ItemVersionStatus getVersionStatus(SessionContext context, Id itemId, Id versionId) { + return connector.getVersionStatus(context, itemId, versionId); + } + + @Override + public ItemVersionConflict getVersionConflict(SessionContext context, Id itemId, Id versionId) { + return connector.getVersionConflict(context, itemId, versionId); + } + + @Override + public Id createVersion(SessionContext context, Id itemId, Id baseVersionId, ItemVersionData + itemVersionData) { + return connector.createVersion(context, itemId, baseVersionId, itemVersionData); } @Override @@ -210,25 +242,96 @@ public class ZusammenAdaptorImpl implements ZusammenAdaptor { connector.resetVersionHistory(context, itemId, versionId, changeRef); } + /*@Override + public void revertVersionToRevision(SessionContext context, Id itemId, Id versionId, + Id revisionId) { + connector.resetVersionRevision(context, itemId, versionId, revisionId); + }*/ + + /*@Override + public ItemVersionRevisions listVersionRevisions(SessionContext context, Id itemId, Id + versionId) { + return connector.listVersionRevisions(context, itemId, versionId); + }*/ + @Override - public void updateItem(SessionContext context, Id itemId, Info info) { - connector.updateItem(context, itemId, info); + public void publishVersion(SessionContext context, Id itemId, Id versionId, String message) { + connector.publishVersion(context, itemId, versionId, message); + } + + @Override + public void syncVersion(SessionContext context, Id itemId, Id versionId) { + connector.syncVersion(context, itemId, versionId); } + @Override + public void forceSyncVersion(SessionContext context, Id itemId, Id versionId) { + connector.forceSyncVersion(context, itemId, versionId); + } @Override public Collection checkHealth(SessionContext context) { return connector.checkHealth(context); } - private static void sortItemVersionListByModificationTimeDescOrder( - List itemVersions) { - itemVersions.sort((o1, o2) -> ((Integer)o2.getId().getValue().length()) - .compareTo( (o1.getId().getValue().length()))); - } - @Override public String getVersion(SessionContext sessionContext) { return connector.getVersion(sessionContext); } + + @Override + public void revert(SessionContext sessionContext, String itemId, String versionId, + String revisionId) { + connector.revertVersionRevision(sessionContext, new Id(itemId), new Id(versionId), + new Id(revisionId)); + } + + @Override + public List listRevisions(SessionContext sessionContext, String itemId, + String versionId) { + List revisions = new ArrayList<>(); + ItemVersionRevisions itemVersionRevisions = + connector.listVersionRevisions(sessionContext, new Id(itemId), new Id + (versionId)); + if(itemVersionRevisions == null || itemVersionRevisions.getItemVersionRevisions()==null || + itemVersionRevisions.getItemVersionRevisions().size()==0) { + return revisions; + } + else{ + revisions = itemVersionRevisions.getItemVersionRevisions().stream().map + (revision -> { + Revision rev = new Revision(); + rev.setId(revision.getRevisionId().getValue()); + rev.setTime(revision.getTime()); + rev.setUser(revision.getUser()); + rev.setMessage(revision.getMessage()); + return rev; + }).collect(Collectors.toList()); + revisions.sort(new Comparator() { + @Override + public int compare(Revision o1, Revision o2) { + if(o1.getTime().before(o2.getTime())) return 1; + else return -1; + } + }); + // when creating a new item an initial version is created with + // invalid data. this revision is not an applicable revision. + //the logic of identifying this revision is: + //1- only the first version of item has this issue + //2- only in the first item version there are 2 revisions created + //3- the second revision is in format "Initial {vlm/vsp}: {name of the vlm/vsp} + //4- only if a revision in this format exists we remove the first revision. + if(revisions.size()>1 && revisions.get(revisions.size()-2).getMessage().matches("Initial " + + ".*:.*")){ + revisions.remove(revisions.size()-1); + } + return revisions; + } + } + + private static void sortItemVersionListByModificationTimeDescOrder( + List itemVersions) { + itemVersions.sort((o1, o2) -> ((Integer) o2.getId().getValue().length()) + .compareTo((o1.getId().getValue().length()))); + } } -- cgit 1.2.3-korg