Add collaboration feature
[sdc.git] / openecomp-be / lib / openecomp-core-lib / openecomp-zusammen-lib / openecomp-zusammen-plugin / src / main / java / org / openecomp / core / zusammen / plugin / collaboration / impl / VersionPublicStoreImpl.java
1 package org.openecomp.core.zusammen.plugin.collaboration.impl;
2
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;
16
17 import java.util.Comparator;
18 import java.util.Date;
19 import java.util.List;
20 import java.util.Map;
21 import java.util.Optional;
22
23 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getSpaceName;
24
25 public class VersionPublicStoreImpl implements VersionPublicStore {
26   @Override
27   public Optional<VersionEntity> get(SessionContext context, Id itemId, Id versionId) {
28     return getVersionDao(context)
29         .get(context, getSpaceName(context, Space.PUBLIC), itemId, versionId);
30   }
31
32   @Override
33   public Optional<SynchronizationStateEntity> getSynchronizationState(SessionContext context,
34                                                                       Id itemId, Id versionId) {
35     Id revisionId = getLastItemVersionRevision(context, itemId,
36         versionId);
37     if (revisionId == null) {
38       return Optional.empty();
39     }
40
41     return getVersionSyncStateRepository(context)
42         .get(context, new VersionContext(getSpaceName(context, Space.PUBLIC), itemId),
43             new SynchronizationStateEntity(versionId, revisionId));
44   }
45
46
47   @Override
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);
52
53     getVersionDao(context).create(context, publicSpace, itemId, version);
54
55     getVersionDao(context).createVersionElements(context, publicSpace, itemId, version.getId(),
56         revisionId, versionElementIds, publishTime,message);
57
58     getVersionSyncStateRepository(context).create(context, new VersionContext(publicSpace,
59             itemId),
60         new SynchronizationStateEntity(version.getId(), revisionId, publishTime, false));
61   }
62
63   @Override
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);
67
68     getVersionDao(context).
69         createVersionElements(context, publicSpace, itemId, version.getId(),
70             revisionId, versionElementIds, publishTime,message);
71
72     getVersionSyncStateRepository(context).
73         updatePublishTime(context, new VersionContext(publicSpace, itemId),
74             new SynchronizationStateEntity(version.getId(), revisionId, publishTime, false));
75   }
76
77   @Override
78   public boolean checkHealth(SessionContext context) {
79     return getVersionDao(context).checkHealth(context);
80   }
81
82   @Override
83   public ItemVersionRevisions listItemVersionRevisions(SessionContext context, Id itemId,
84                                                        Id versionId) {
85     VersionContext entityContext = new VersionContext(getSpaceName(context, Space.PUBLIC), itemId);
86     List<SynchronizationStateEntity> versionRevisions = getVersionSyncStateRepository(context)
87         .list(context, entityContext, new VersionEntity(versionId));
88
89     if (versionRevisions == null || versionRevisions.size() == 0) {
90       return null;
91     }
92
93     versionRevisions.sort(new Comparator<SynchronizationStateEntity>() {
94       @Override
95       public int compare(SynchronizationStateEntity o1, SynchronizationStateEntity o2) {
96         if (o1.getPublishTime().after(o2.getPublishTime())) {
97           return -1;
98         } else {
99           return 1;
100         }
101       }
102     });
103     ItemVersionRevisions itemVersionRevisions = new ItemVersionRevisions();
104     versionRevisions.forEach(synchronizationStateEntity -> itemVersionRevisions.addChange
105         (convertSyncState2Revision(synchronizationStateEntity)));
106     return itemVersionRevisions;
107   }
108
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());
116     return revision;
117   }
118
119
120   private Id getLastItemVersionRevision(SessionContext context, Id itemId, Id versionId) {
121
122     ItemVersionRevisions versionRevisions = listItemVersionRevisions(context, itemId, versionId);
123     if(versionRevisions ==null ) return null;
124     return versionRevisions.getItemVersionRevisions().get(0).getRevisionId();
125   }
126
127   protected VersionDao getVersionDao(SessionContext context) {
128     return VersionDaoFactory.getInstance().createInterface(context);
129   }
130
131   protected VersionSynchronizationStateRepository getVersionSyncStateRepository(
132       SessionContext context) {
133     return VersionSynchronizationStateRepositoryFactory.getInstance().createInterface(context);
134   }
135 }