1 package org.openecomp.sdc.versioning.dao.impl.zusammen;
3 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
5 import com.amdocs.zusammen.datatypes.Id;
6 import com.amdocs.zusammen.datatypes.SessionContext;
7 import com.amdocs.zusammen.datatypes.item.*;
8 import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions;
9 import java.util.ArrayList;
10 import java.util.List;
11 import java.util.Optional;
12 import java.util.stream.Collectors;
13 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
14 import org.openecomp.sdc.common.errors.CoreException;
15 import org.openecomp.sdc.common.errors.ErrorCategory;
16 import org.openecomp.sdc.common.errors.ErrorCode;
17 import org.openecomp.sdc.versioning.dao.VersionDao;
18 import org.openecomp.sdc.versioning.dao.impl.zusammen.convertor.ItemVersionToVersionConvertor;
19 import org.openecomp.sdc.versioning.dao.types.Revision;
20 import org.openecomp.sdc.versioning.dao.types.SynchronizationState;
21 import org.openecomp.sdc.versioning.dao.types.Version;
22 import org.openecomp.sdc.versioning.dao.types.VersionState;
24 public class VersionZusammenDaoImpl implements VersionDao {
26 public static final class ZusammenProperty {
27 public static final String LABEL = "label";
28 public static final String STATUS = "status";
30 private ZusammenProperty() {
31 throw new IllegalStateException("Constants class");
35 private ZusammenAdaptor zusammenAdaptor;
37 public VersionZusammenDaoImpl(ZusammenAdaptor zusammenAdaptor) {
38 this.zusammenAdaptor = zusammenAdaptor;
42 public List<Version> list(String itemId) {
43 ItemVersionToVersionConvertor convertor = new ItemVersionToVersionConvertor();
44 return zusammenAdaptor.listPublicVersions(createSessionContext(), new Id(itemId)).stream()
45 .map(convertor::convert)
46 .collect(Collectors.toList());
50 public void create(String itemId, Version version) {
52 zusammenAdaptor.createVersion(createSessionContext(), new Id(itemId),
53 version.getBaseId() == null ? null : new Id(version.getBaseId()),
54 mapToZusammenVersion(version));
56 version.setId(versionId.getValue());
60 public void update(String itemId, Version version) {
61 zusammenAdaptor.updateVersion(createSessionContext(), new Id(itemId), new Id(version.getId()),
62 mapToZusammenVersion(version));
66 public Optional<Version> get(String itemId, Version version) {
67 SessionContext context = createSessionContext();
68 Id itemIdObj = new Id(itemId);
69 Id versionId = new Id(version.getId());
70 ItemVersion itemVersion = zusammenAdaptor.getVersion(context, itemIdObj, versionId);
72 if (itemVersion == null) {
73 return Optional.empty();
76 VersionState versionState =
77 convertState(zusammenAdaptor.getVersionStatus(context, itemIdObj, versionId));
78 updateVersionStatus(context, itemIdObj, versionId, versionState, itemVersion);
80 Version result = new ItemVersionToVersionConvertor().convert(itemVersion);
81 result.setState(versionState);
82 return Optional.of(result);
86 public void delete(String itemId, Version version) {
87 throw new UnsupportedOperationException("Delete version operation is not yet supported.");
91 public void publish(String itemId, Version version, String message) {
93 .publishVersion(createSessionContext(), new Id(itemId), new Id(version.getId()), message);
97 public void sync(String itemId, Version version) {
99 .syncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
103 public void forceSync(String itemId, Version version) {
105 .forceSyncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
109 public void clean(String itemId, Version version) {
110 zusammenAdaptor.cleanVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
114 public void revert(String itemId, Version version, String revisionId) {
115 zusammenAdaptor.revert(createSessionContext(), new Id(itemId), new Id(version.getId()),
120 public List<Revision> listRevisions(String itemId, Version version) {
121 ItemVersionRevisions itemVersionRevisions = zusammenAdaptor
122 .listRevisions(createSessionContext(), new Id(itemId), new Id(version.getId()));
124 return itemVersionRevisions == null || itemVersionRevisions.getItemVersionRevisions() == null ||
125 itemVersionRevisions.getItemVersionRevisions().isEmpty()
127 : itemVersionRevisions.getItemVersionRevisions().stream()
128 .map(this::convertRevision)
129 .sorted(this::compareRevisionsTime)
130 .collect(Collectors.toList());
133 private void updateVersionStatus(SessionContext context, Id itemId, Id versionId,
134 VersionState versionState, ItemVersion itemVersion) {
135 if (versionState.getSynchronizationState() != SynchronizationState.UpToDate) {
136 String versionStatus = zusammenAdaptor.getPublicVersion(context, itemId, versionId)
137 .getData().getInfo().getProperty(ZusammenProperty.STATUS);
138 itemVersion.getData().getInfo().addProperty(ZusammenProperty.STATUS, versionStatus);
142 private ItemVersionData mapToZusammenVersion(Version version) {
143 Info info = new Info();
144 info.addProperty(ZusammenProperty.LABEL, version.toString());
145 info.addProperty(ZusammenProperty.STATUS, version.getStatus().name());
146 info.setName(version.getName());
147 info.setDescription(version.getDescription());
149 ItemVersionData itemVersionData = new ItemVersionData();
150 itemVersionData.setInfo(info);
151 return itemVersionData;
154 private VersionState convertState(ItemVersionStatus versionStatus) {
155 VersionState state = new VersionState();
156 state.setSynchronizationState(getSyncState(versionStatus.getSynchronizationStatus()));
157 state.setDirty(versionStatus.isDirty());
161 private SynchronizationState getSyncState(SynchronizationStatus synchronizationStatus) {
162 switch (synchronizationStatus) {
164 return SynchronizationState.UpToDate;
166 return SynchronizationState.OutOfSync;
168 return SynchronizationState.Merging;
170 throw new CoreException(new ErrorCode.ErrorCodeBuilder()
171 .withCategory(ErrorCategory.APPLICATION)
172 .withId("UNKNOWN_VERSION_STATE")
173 .withMessage("Version state is unknown").build());
177 private Revision convertRevision(
178 com.amdocs.zusammen.datatypes.itemversion.Revision zusammenRevision) {
179 Revision revision = new Revision();
180 revision.setId(zusammenRevision.getRevisionId().getValue());
181 revision.setTime(zusammenRevision.getTime());
182 revision.setUser(zusammenRevision.getUser());
183 revision.setMessage(zusammenRevision.getMessage());
187 private int compareRevisionsTime(Revision revision1, Revision revision2) {
188 return revision1.getTime().before(revision2.getTime()) ? 1 : -1;