1 package org.openecomp.sdc.versioning.dao.impl.zusammen;
3 import com.amdocs.zusammen.datatypes.Id;
4 import com.amdocs.zusammen.datatypes.SessionContext;
5 import com.amdocs.zusammen.datatypes.item.Info;
6 import com.amdocs.zusammen.datatypes.item.ItemVersion;
7 import com.amdocs.zusammen.datatypes.item.ItemVersionData;
8 import com.amdocs.zusammen.datatypes.item.ItemVersionStatus;
9 import com.amdocs.zusammen.datatypes.item.SynchronizationStatus;
10 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
11 import org.openecomp.sdc.common.errors.CoreException;
12 import org.openecomp.sdc.common.errors.ErrorCategory;
13 import org.openecomp.sdc.common.errors.ErrorCode;
14 import org.openecomp.sdc.versioning.dao.VersionDao;
15 import org.openecomp.sdc.versioning.dao.impl.zusammen.convertor.ItemVersionToVersionConvertor;
16 import org.openecomp.sdc.versioning.dao.types.Revision;
17 import org.openecomp.sdc.versioning.dao.types.SynchronizationState;
18 import org.openecomp.sdc.versioning.dao.types.Version;
19 import org.openecomp.sdc.versioning.dao.types.VersionState;
21 import java.util.List;
22 import java.util.Optional;
23 import java.util.stream.Collectors;
25 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
27 public class VersionZusammenDaoImpl implements VersionDao {
29 public static final class ZusammenProperty {
30 public static final String LABEL = "label";
31 public static final String STATUS = "status";
33 private ZusammenProperty() {
34 throw new IllegalStateException("Constants class");
38 private ZusammenAdaptor zusammenAdaptor;
40 public VersionZusammenDaoImpl(ZusammenAdaptor zusammenAdaptor) {
41 this.zusammenAdaptor = zusammenAdaptor;
45 public List<Version> list(String itemId) {
46 ItemVersionToVersionConvertor convertor = new ItemVersionToVersionConvertor();
47 return zusammenAdaptor.listPublicVersions(createSessionContext(), new Id(itemId)).stream()
48 .map(convertor::convert)
49 .collect(Collectors.toList());
53 public void create(String itemId, Version version) {
55 zusammenAdaptor.createVersion(createSessionContext(), new Id(itemId),
56 version.getBaseId() == null ? null : new Id(version.getBaseId()),
57 mapToZusammenVersion(version));
59 version.setId(versionId.getValue());
63 public void update(String itemId, Version version) {
64 zusammenAdaptor.updateVersion(createSessionContext(), new Id(itemId), new Id(version.getId()),
65 mapToZusammenVersion(version));
69 public Optional<Version> get(String itemId, Version version) {
70 SessionContext context = createSessionContext();
71 Id itemIdObj = new Id(itemId);
72 Id versionId = new Id(version.getId());
73 ItemVersion itemVersion = zusammenAdaptor.getVersion(context, itemIdObj, versionId);
75 if (itemVersion == null) {
76 return Optional.empty();
79 VersionState versionState =
80 convertState(zusammenAdaptor.getVersionStatus(context, itemIdObj, versionId));
81 updateVersionStatus(context, itemIdObj, versionId, versionState, itemVersion);
83 Version result = new ItemVersionToVersionConvertor().convert(itemVersion);
84 result.setState(versionState);
85 return Optional.of(result);
89 public void delete(String itemId, Version version) {
90 throw new UnsupportedOperationException("Delete version operation is not yet supported.");
94 public void publish(String itemId, Version version, String message) {
96 .publishVersion(createSessionContext(), new Id(itemId), new Id(version.getId()), message);
100 public void sync(String itemId, Version version) {
102 .syncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
106 public void forceSync(String itemId, Version version) {
108 .forceSyncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
112 public void revert(String itemId, Version version, String revisionId) {
113 zusammenAdaptor.revert(createSessionContext(), itemId, version.getId(), revisionId);
117 public List<Revision> listRevisions(String itemId, Version version) {
118 return zusammenAdaptor.listRevisions(createSessionContext(), itemId, version.getId());
121 private void updateVersionStatus(SessionContext context, Id itemId, Id versionId,
122 VersionState versionState, ItemVersion itemVersion) {
123 if (versionState.getSynchronizationState() != SynchronizationState.UpToDate ||
124 versionState.isDirty()) {
125 String versionStatus = zusammenAdaptor.getPublicVersion(context, itemId, versionId)
126 .getData().getInfo().getProperty(ZusammenProperty.STATUS);
127 itemVersion.getData().getInfo().addProperty(ZusammenProperty.STATUS, versionStatus);
131 private ItemVersionData mapToZusammenVersion(Version version) {
132 Info info = new Info();
133 info.addProperty(ZusammenProperty.LABEL, version.toString());
134 info.addProperty(ZusammenProperty.STATUS, version.getStatus().name());
135 info.setName(version.getName());
136 info.setDescription(version.getDescription());
138 ItemVersionData itemVersionData = new ItemVersionData();
139 itemVersionData.setInfo(info);
140 return itemVersionData;
143 private VersionState convertState(ItemVersionStatus versionStatus) {
144 VersionState state = new VersionState();
145 state.setSynchronizationState(getSyncState(versionStatus.getSynchronizationStatus()));
146 state.setDirty(versionStatus.isDirty());
150 private SynchronizationState getSyncState(SynchronizationStatus synchronizationStatus) {
151 switch (synchronizationStatus) {
153 return SynchronizationState.UpToDate;
155 return SynchronizationState.OutOfSync;
157 return SynchronizationState.Merging;
159 throw new CoreException(new ErrorCode.ErrorCodeBuilder()
160 .withCategory(ErrorCategory.APPLICATION)
161 .withId("UNKNOWN_VERSION_STATE")
162 .withMessage("Version state is unknown").build());