1 package org.openecomp.core.zusammen.plugin.collaboration.impl;
3 import com.amdocs.zusammen.datatypes.Id;
4 import com.amdocs.zusammen.datatypes.SessionContext;
5 import com.amdocs.zusammen.datatypes.Space;
6 import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions;
7 import com.amdocs.zusammen.datatypes.itemversion.Revision;
8 import org.openecomp.core.zusammen.plugin.collaboration.VersionPublicStore;
9 import org.openecomp.core.zusammen.plugin.dao.VersionDao;
10 import org.openecomp.core.zusammen.plugin.dao.VersionDaoFactory;
11 import org.openecomp.core.zusammen.plugin.dao.VersionSynchronizationStateRepository;
12 import org.openecomp.core.zusammen.plugin.dao.VersionSynchronizationStateRepositoryFactory;
13 import org.openecomp.core.zusammen.plugin.dao.types.SynchronizationStateEntity;
14 import org.openecomp.core.zusammen.plugin.dao.types.VersionContext;
15 import org.openecomp.core.zusammen.plugin.dao.types.VersionEntity;
17 import java.util.Comparator;
18 import java.util.Date;
19 import java.util.List;
21 import java.util.Optional;
23 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getSpaceName;
25 public class VersionPublicStoreImpl implements VersionPublicStore {
27 public Optional<VersionEntity> get(SessionContext context, Id itemId, Id versionId) {
28 return getVersionDao(context)
29 .get(context, getSpaceName(context, Space.PUBLIC), itemId, versionId);
33 public Optional<SynchronizationStateEntity> getSynchronizationState(SessionContext context,
34 Id itemId, Id versionId) {
35 Id revisionId = getLastItemVersionRevision(context, itemId,
37 if (revisionId == null) {
38 return Optional.empty();
41 return getVersionSyncStateRepository(context)
42 .get(context, new VersionContext(getSpaceName(context, Space.PUBLIC), itemId),
43 new SynchronizationStateEntity(versionId, revisionId));
48 public void create(SessionContext context, Id itemId, VersionEntity version, Id revisionId,
49 Map<Id, Id> versionElementIds, Date
50 publishTime, String message) {
51 String publicSpace = getSpaceName(context, Space.PUBLIC);
53 getVersionDao(context).create(context, publicSpace, itemId, version);
55 getVersionDao(context).createVersionElements(context, publicSpace, itemId, version.getId(),
56 revisionId, versionElementIds, publishTime,message);
58 getVersionSyncStateRepository(context).create(context, new VersionContext(publicSpace,
60 new SynchronizationStateEntity(version.getId(), revisionId, publishTime, false));
64 public void update(SessionContext context, Id itemId, VersionEntity version,
65 Id revisionId, Map<Id, Id> versionElementIds, Date publishTime, String message) {
66 String publicSpace = getSpaceName(context, Space.PUBLIC);
68 getVersionDao(context).
69 createVersionElements(context, publicSpace, itemId, version.getId(),
70 revisionId, versionElementIds, publishTime,message);
72 getVersionSyncStateRepository(context).
73 updatePublishTime(context, new VersionContext(publicSpace, itemId),
74 new SynchronizationStateEntity(version.getId(), revisionId, publishTime, false));
78 public boolean checkHealth(SessionContext context) {
79 return getVersionDao(context).checkHealth(context);
83 public ItemVersionRevisions listItemVersionRevisions(SessionContext context, Id itemId,
85 VersionContext entityContext = new VersionContext(getSpaceName(context, Space.PUBLIC), itemId);
86 List<SynchronizationStateEntity> versionRevisions = getVersionSyncStateRepository(context)
87 .list(context, entityContext, new VersionEntity(versionId));
89 if (versionRevisions == null || versionRevisions.size() == 0) {
93 versionRevisions.sort(new Comparator<SynchronizationStateEntity>() {
95 public int compare(SynchronizationStateEntity o1, SynchronizationStateEntity o2) {
96 if (o1.getPublishTime().after(o2.getPublishTime())) {
103 ItemVersionRevisions itemVersionRevisions = new ItemVersionRevisions();
104 versionRevisions.forEach(synchronizationStateEntity -> itemVersionRevisions.addChange
105 (convertSyncState2Revision(synchronizationStateEntity)));
106 return itemVersionRevisions;
109 private Revision convertSyncState2Revision(
110 SynchronizationStateEntity synchronizationStateEntity) {
111 Revision revision = new Revision();
112 revision.setRevisionId(synchronizationStateEntity.getRevisionId());
113 revision.setTime(synchronizationStateEntity.getPublishTime());
114 revision.setMessage(synchronizationStateEntity.getMessage());
115 revision.setUser(synchronizationStateEntity.getUser());
120 private Id getLastItemVersionRevision(SessionContext context, Id itemId, Id versionId) {
122 ItemVersionRevisions versionRevisions = listItemVersionRevisions(context, itemId, versionId);
123 if(versionRevisions ==null ) return null;
124 return versionRevisions.getItemVersionRevisions().get(0).getRevisionId();
127 protected VersionDao getVersionDao(SessionContext context) {
128 return VersionDaoFactory.getInstance().createInterface(context);
131 protected VersionSynchronizationStateRepository getVersionSyncStateRepository(
132 SessionContext context) {
133 return VersionSynchronizationStateRepositoryFactory.getInstance().createInterface(context);