diff options
Diffstat (limited to 'versioning-lib/src/main/java/org/onap/sdc/common/versioning/persistence/zusammen/VersionZusammenDao.java')
-rw-r--r-- | versioning-lib/src/main/java/org/onap/sdc/common/versioning/persistence/zusammen/VersionZusammenDao.java | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/versioning-lib/src/main/java/org/onap/sdc/common/versioning/persistence/zusammen/VersionZusammenDao.java b/versioning-lib/src/main/java/org/onap/sdc/common/versioning/persistence/zusammen/VersionZusammenDao.java new file mode 100644 index 0000000..cb062c7 --- /dev/null +++ b/versioning-lib/src/main/java/org/onap/sdc/common/versioning/persistence/zusammen/VersionZusammenDao.java @@ -0,0 +1,202 @@ +package org.onap.sdc.common.versioning.persistence.zusammen; + + +import com.amdocs.zusammen.datatypes.Id; +import com.amdocs.zusammen.datatypes.SessionContext; +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.ItemVersionStatus; +import com.amdocs.zusammen.datatypes.item.SynchronizationStatus; +import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import org.onap.sdc.common.versioning.persistence.VersionDao; +import org.onap.sdc.common.versioning.persistence.types.InternalVersion; +import org.onap.sdc.common.versioning.services.exceptions.VersioningException; +import org.onap.sdc.common.versioning.services.types.Revision; +import org.onap.sdc.common.versioning.services.types.SynchronizationState; +import org.onap.sdc.common.versioning.services.types.VersionState; +import org.onap.sdc.common.versioning.services.types.VersionStatus; +import org.onap.sdc.common.zusammen.services.ZusammenAdaptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +@Repository +public class VersionZusammenDao implements VersionDao { + + private static final String STATUS_PROPERTY = "status"; + + private final ZusammenSessionContextCreator contextCreator; + private final ZusammenAdaptor zusammenAdaptor; + + @Autowired + public VersionZusammenDao(ZusammenSessionContextCreator contextCreator, ZusammenAdaptor zusammenAdaptor) { + this.contextCreator = contextCreator; + this.zusammenAdaptor = zusammenAdaptor; + } + + @Override + public List<InternalVersion> list(String itemId) { + return zusammenAdaptor.listPublicVersions(contextCreator.create(), new Id(itemId)).stream() + .map(VersionZusammenDao::convertFromZusammen).collect(Collectors.toList()); + } + + @Override + public InternalVersion create(String itemId, InternalVersion version) { + Id versionId = zusammenAdaptor.createVersion(contextCreator.create(), new Id(itemId), + version.getBaseId() == null ? null : new Id(version.getBaseId()), mapToZusammenVersion(version)); + + version.setId(versionId.getValue()); + return version; + } + + @Override + public void update(String itemId, InternalVersion version) { + zusammenAdaptor.updateVersion(contextCreator.create(), new Id(itemId), new Id(version.getId()), + mapToZusammenVersion(version)); + } + + @Override + public Optional<InternalVersion> get(String itemId, String versionId) { + SessionContext context = contextCreator.create(); + Id itemIdObj = new Id(itemId); + Id versionIdObj = new Id(versionId); + ItemVersion itemVersion = zusammenAdaptor.getVersion(context, itemIdObj, versionIdObj); + + if (itemVersion == null) { + return Optional.empty(); + } + + VersionState versionState = convertState(zusammenAdaptor.getVersionStatus(context, itemIdObj, versionIdObj)); + updateVersionStatus(context, itemIdObj, versionIdObj, versionState, itemVersion); + + InternalVersion result = convertFromZusammen(itemVersion); + result.setState(versionState); + return Optional.of(result); + } + + @Override + public void delete(String itemId, String versionId) { + throw new UnsupportedOperationException("Delete version operation is not yet supported."); + } + + @Override + public void publish(String itemId, String versionId, String message) { + zusammenAdaptor.publishVersion(contextCreator.create(), new Id(itemId), new Id(versionId), message); + } + + @Override + public void sync(String itemId, String versionId) { + zusammenAdaptor.syncVersion(contextCreator.create(), new Id(itemId), new Id(versionId)); + } + + @Override + public void forceSync(String itemId, String versionId) { + zusammenAdaptor.forceSyncVersion(contextCreator.create(), new Id(itemId), new Id(versionId)); + } + + @Override + public void clean(String itemId, String versionId) { + zusammenAdaptor.cleanVersion(contextCreator.create(), new Id(itemId), new Id(versionId)); + } + + @Override + public void revert(String itemId, String versionId, String revisionId) { + zusammenAdaptor.revert(contextCreator.create(), new Id(itemId), new Id(versionId), new Id(revisionId)); + } + + @Override + public List<Revision> listRevisions(String itemId, String versionId) { + ItemVersionRevisions itemVersionRevisions = + zusammenAdaptor.listRevisions(contextCreator.create(), new Id(itemId), new Id(versionId)); + + return itemVersionRevisions == null || itemVersionRevisions.getItemVersionRevisions() == null + || itemVersionRevisions.getItemVersionRevisions().isEmpty() ? new ArrayList<>() : + itemVersionRevisions.getItemVersionRevisions().stream().map(this::convertRevision) + .sorted(this::compareRevisionsTime).collect(Collectors.toList()); + } + + private void updateVersionStatus(SessionContext context, Id itemId, Id versionId, VersionState versionState, + ItemVersion itemVersion) { + if (versionState.getSynchronizationState() != SynchronizationState.UpToDate) { + String versionStatus = zusammenAdaptor.getPublicVersion(context, itemId, versionId).getData().getInfo() + .getProperty(STATUS_PROPERTY); + itemVersion.getData().getInfo().addProperty(STATUS_PROPERTY, versionStatus); + } + } + + private ItemVersionData mapToZusammenVersion(InternalVersion version) { + Info info = new Info(); + info.addProperty(STATUS_PROPERTY, version.getStatus().name()); + info.setName(version.getName()); + info.setDescription(version.getDescription()); + version.getProperties().forEach(info::addProperty); + ItemVersionData itemVersionData = new ItemVersionData(); + itemVersionData.setInfo(info); + return itemVersionData; + } + + private VersionState convertState(ItemVersionStatus versionStatus) { + VersionState state = new VersionState(); + state.setSynchronizationState(getSyncState(versionStatus.getSynchronizationStatus())); + state.setDirty(versionStatus.isDirty()); + return state; + } + + private SynchronizationState getSyncState(SynchronizationStatus synchronizationStatus) { + switch (synchronizationStatus) { + case UP_TO_DATE: + return SynchronizationState.UpToDate; + case OUT_OF_SYNC: + return SynchronizationState.OutOfSync; + case MERGING: + return SynchronizationState.Merging; + default: + throw new VersioningException("Version state is unknown"); + } + } + + private Revision convertRevision(com.amdocs.zusammen.datatypes.itemversion.Revision zusammenRevision) { + Revision revision = new Revision(); + revision.setId(zusammenRevision.getRevisionId().getValue()); + revision.setTime(zusammenRevision.getTime()); + revision.setUser(zusammenRevision.getUser()); + revision.setMessage(zusammenRevision.getMessage()); + return revision; + } + + private int compareRevisionsTime(Revision revision1, Revision revision2) { + return revision1.getTime().before(revision2.getTime()) ? 1 : -1; + } + + private static InternalVersion convertFromZusammen(ItemVersion itemVersion) { + if (itemVersion == null) { + return null; + } + InternalVersion version = new InternalVersion(); + version.setId(itemVersion.getId().getValue()); + if (itemVersion.getBaseId() != null) { + version.setBaseId(itemVersion.getBaseId().getValue()); + } + version.setName(itemVersion.getData().getInfo().getName()); + version.setDescription(itemVersion.getData().getInfo().getDescription()); + version.setCreationTime(itemVersion.getCreationTime()); + version.setModificationTime(itemVersion.getModificationTime()); + + itemVersion.getData().getInfo().getProperties() + .forEach((key, value) -> addPropertyToVersion(key, value, version)); + + return version; + } + + private static void addPropertyToVersion(String propertyKey, Object propertyValue, InternalVersion version) { + if (STATUS_PROPERTY.equals(propertyKey)) { + version.setStatus(VersionStatus.valueOf((String) propertyValue)); + } else { + version.addProperty(propertyKey, propertyValue); + } + } +} |