3b783d5d25e4d96566aebbc467da8f404ef20ba3
[sdc.git] /
1 package org.openecomp.sdc.versioning.dao.impl.zusammen;
2
3 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
4
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;
27
28 public class VersionZusammenDaoImpl implements VersionDao {
29
30   public static final class ZusammenProperty {
31     public static final String LABEL = "label";
32     public static final String STATUS = "status";
33
34     private ZusammenProperty() {
35       throw new IllegalStateException("Constants class");
36     }
37   }
38
39   private ZusammenAdaptor zusammenAdaptor;
40
41   public VersionZusammenDaoImpl(ZusammenAdaptor zusammenAdaptor) {
42     this.zusammenAdaptor = zusammenAdaptor;
43   }
44
45   @Override
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());
51   }
52
53   @Override
54   public void create(String itemId, Version version) {
55     Id versionId =
56         zusammenAdaptor.createVersion(createSessionContext(), new Id(itemId),
57             version.getBaseId() == null ? null : new Id(version.getBaseId()),
58             mapToZusammenVersion(version));
59
60     version.setId(versionId.getValue());
61   }
62
63   @Override
64   public void update(String itemId, Version version) {
65     zusammenAdaptor.updateVersion(createSessionContext(), new Id(itemId), new Id(version.getId()),
66         mapToZusammenVersion(version));
67   }
68
69   @Override
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);
75
76     if (itemVersion == null) {
77       return Optional.empty();
78     }
79
80     VersionState versionState =
81         convertState(zusammenAdaptor.getVersionStatus(context, itemIdObj, versionId));
82     updateVersionStatus(context, itemIdObj, versionId, versionState, itemVersion);
83
84     Version result = new ItemVersionToVersionConvertor().convert(itemVersion);
85     result.setState(versionState);
86     return Optional.of(result);
87   }
88
89   @Override
90   public void delete(String itemId, Version version) {
91     throw new UnsupportedOperationException("Delete version operation is not yet supported.");
92   }
93
94   @Override
95   public void publish(String itemId, Version version, String message) {
96     zusammenAdaptor
97         .publishVersion(createSessionContext(), new Id(itemId), new Id(version.getId()), message);
98   }
99
100   @Override
101   public void sync(String itemId, Version version) {
102     zusammenAdaptor
103         .syncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
104   }
105
106   @Override
107   public void forceSync(String itemId, Version version) {
108     zusammenAdaptor
109         .forceSyncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
110   }
111
112   @Override
113   public void clean(String itemId, Version version) {
114     zusammenAdaptor.cleanVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
115   }
116
117   @Override
118   public void revert(String itemId, Version version, String revisionId) {
119     zusammenAdaptor.revert(createSessionContext(), new Id(itemId), new Id(version.getId()),
120         new Id(revisionId));
121   }
122
123   @Override
124   public List<Revision> listRevisions(String itemId, Version version) {
125     ItemVersionRevisions itemVersionRevisions = zusammenAdaptor
126         .listRevisions(createSessionContext(), new Id(itemId), new Id(version.getId()));
127
128     return itemVersionRevisions == null || itemVersionRevisions.getItemVersionRevisions() == null ||
129         itemVersionRevisions.getItemVersionRevisions().isEmpty()
130         ? new ArrayList<>()
131         : itemVersionRevisions.getItemVersionRevisions().stream()
132             .map(this::convertRevision)
133             .sorted(this::compareRevisionsTime)
134             .collect(Collectors.toList());
135   }
136
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);
143     }
144   }
145
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());
152
153     ItemVersionData itemVersionData = new ItemVersionData();
154     itemVersionData.setInfo(info);
155     return itemVersionData;
156   }
157
158   private VersionState convertState(ItemVersionStatus versionStatus) {
159     VersionState state = new VersionState();
160     state.setSynchronizationState(getSyncState(versionStatus.getSynchronizationStatus()));
161     state.setDirty(versionStatus.isDirty());
162     return state;
163   }
164
165   private SynchronizationState getSyncState(SynchronizationStatus synchronizationStatus) {
166     switch (synchronizationStatus) {
167       case UP_TO_DATE:
168         return SynchronizationState.UpToDate;
169       case OUT_OF_SYNC:
170         return SynchronizationState.OutOfSync;
171       case MERGING:
172         return SynchronizationState.Merging;
173       default:
174         throw new CoreException(new ErrorCode.ErrorCodeBuilder()
175             .withCategory(ErrorCategory.APPLICATION)
176             .withId("UNKNOWN_VERSION_STATE")
177             .withMessage("Version state is unknown").build());
178     }
179   }
180
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());
188     return revision;
189   }
190
191   private int compareRevisionsTime(Revision revision1, Revision revision2) {
192     return revision1.getTime().before(revision2.getTime()) ? 1 : -1;
193   }
194 }