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.Info;
8 import com.amdocs.zusammen.datatypes.item.ItemVersion;
9 import com.amdocs.zusammen.datatypes.item.ItemVersionData;
10 import com.amdocs.zusammen.datatypes.item.ItemVersionStatus;
11 import com.amdocs.zusammen.datatypes.item.SynchronizationStatus;
12 import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions;
13 import java.util.ArrayList;
14 import java.util.List;
15 import java.util.Optional;
16 import java.util.stream.Collectors;
17 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
18 import org.openecomp.sdc.common.errors.CoreException;
19 import org.openecomp.sdc.common.errors.ErrorCategory;
20 import org.openecomp.sdc.common.errors.ErrorCode;
21 import org.openecomp.sdc.versioning.dao.VersionDao;
22 import org.openecomp.sdc.versioning.dao.impl.zusammen.convertor.ItemVersionToVersionConvertor;
23 import org.openecomp.sdc.versioning.dao.types.Revision;
24 import org.openecomp.sdc.versioning.dao.types.SynchronizationState;
25 import org.openecomp.sdc.versioning.dao.types.Version;
26 import org.openecomp.sdc.versioning.dao.types.VersionState;
28 public class VersionZusammenDaoImpl implements VersionDao {
30 public static final class ZusammenProperty {
31 public static final String LABEL = "label";
32 public static final String STATUS = "status";
34 private ZusammenProperty() {
35 throw new IllegalStateException("Constants class");
39 private ZusammenAdaptor zusammenAdaptor;
41 public VersionZusammenDaoImpl(ZusammenAdaptor zusammenAdaptor) {
42 this.zusammenAdaptor = zusammenAdaptor;
46 public List<Version> list(String itemId) {
47 ItemVersionToVersionConvertor convertor = new ItemVersionToVersionConvertor();
48 return zusammenAdaptor.listPublicVersions(createSessionContext(), new Id(itemId)).stream()
49 .map(convertor::convert)
50 .collect(Collectors.toList());
54 public void create(String itemId, Version version) {
56 zusammenAdaptor.createVersion(createSessionContext(), new Id(itemId),
57 version.getBaseId() == null ? null : new Id(version.getBaseId()),
58 mapToZusammenVersion(version));
60 version.setId(versionId.getValue());
64 public void update(String itemId, Version version) {
65 zusammenAdaptor.updateVersion(createSessionContext(), new Id(itemId), new Id(version.getId()),
66 mapToZusammenVersion(version));
70 public Optional<Version> get(String itemId, Version version) {
71 SessionContext context = createSessionContext();
72 Id itemIdObj = new Id(itemId);
73 Id versionId = new Id(version.getId());
74 ItemVersion itemVersion = zusammenAdaptor.getVersion(context, itemIdObj, versionId);
76 if (itemVersion == null) {
77 return Optional.empty();
80 VersionState versionState =
81 convertState(zusammenAdaptor.getVersionStatus(context, itemIdObj, versionId));
82 updateVersionStatus(context, itemIdObj, versionId, versionState, itemVersion);
84 Version result = new ItemVersionToVersionConvertor().convert(itemVersion);
85 result.setState(versionState);
86 return Optional.of(result);
90 public void delete(String itemId, Version version) {
91 throw new UnsupportedOperationException("Delete version operation is not yet supported.");
95 public void publish(String itemId, Version version, String message) {
97 .publishVersion(createSessionContext(), new Id(itemId), new Id(version.getId()), message);
101 public void sync(String itemId, Version version) {
103 .syncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
107 public void forceSync(String itemId, Version version) {
109 .forceSyncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
113 public void clean(String itemId, Version version) {
114 zusammenAdaptor.cleanVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
118 public void revert(String itemId, Version version, String revisionId) {
119 zusammenAdaptor.revert(createSessionContext(), new Id(itemId), new Id(version.getId()),
124 public List<Revision> listRevisions(String itemId, Version version) {
125 ItemVersionRevisions itemVersionRevisions = zusammenAdaptor
126 .listRevisions(createSessionContext(), new Id(itemId), new Id(version.getId()));
128 return itemVersionRevisions == null || itemVersionRevisions.getItemVersionRevisions() == null ||
129 itemVersionRevisions.getItemVersionRevisions().isEmpty()
131 : itemVersionRevisions.getItemVersionRevisions().stream()
132 .map(this::convertRevision)
133 .sorted(this::compareRevisionsTime)
134 .collect(Collectors.toList());
137 private void updateVersionStatus(SessionContext context, Id itemId, Id versionId,
138 VersionState versionState, ItemVersion itemVersion) {
139 if (versionState.getSynchronizationState() != SynchronizationState.UpToDate) {
140 String versionStatus = zusammenAdaptor.getPublicVersion(context, itemId, versionId)
141 .getData().getInfo().getProperty(ZusammenProperty.STATUS);
142 itemVersion.getData().getInfo().addProperty(ZusammenProperty.STATUS, versionStatus);
146 private ItemVersionData mapToZusammenVersion(Version version) {
147 Info info = new Info();
148 info.addProperty(ZusammenProperty.LABEL, version.toString());
149 info.addProperty(ZusammenProperty.STATUS, version.getStatus().name());
150 info.setName(version.getName());
151 info.setDescription(version.getDescription());
153 ItemVersionData itemVersionData = new ItemVersionData();
154 itemVersionData.setInfo(info);
155 return itemVersionData;
158 private VersionState convertState(ItemVersionStatus versionStatus) {
159 VersionState state = new VersionState();
160 state.setSynchronizationState(getSyncState(versionStatus.getSynchronizationStatus()));
161 state.setDirty(versionStatus.isDirty());
165 private SynchronizationState getSyncState(SynchronizationStatus synchronizationStatus) {
166 switch (synchronizationStatus) {
168 return SynchronizationState.UpToDate;
170 return SynchronizationState.OutOfSync;
172 return SynchronizationState.Merging;
174 throw new CoreException(new ErrorCode.ErrorCodeBuilder()
175 .withCategory(ErrorCategory.APPLICATION)
176 .withId("UNKNOWN_VERSION_STATE")
177 .withMessage("Version state is unknown").build());
181 private Revision convertRevision(
182 com.amdocs.zusammen.datatypes.itemversion.Revision zusammenRevision) {
183 Revision revision = new Revision();
184 revision.setId(zusammenRevision.getRevisionId().getValue());
185 revision.setTime(zusammenRevision.getTime());
186 revision.setUser(zusammenRevision.getUser());
187 revision.setMessage(zusammenRevision.getMessage());
191 private int compareRevisionsTime(Revision revision1, Revision revision2) {
192 return revision1.getTime().before(revision2.getTime()) ? 1 : -1;