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 / VersionPrivateStoreImpl.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 org.openecomp.core.zusammen.plugin.collaboration.VersionPrivateStore;
6 import org.openecomp.core.zusammen.plugin.dao.VersionDao;
7 import org.openecomp.core.zusammen.plugin.dao.VersionDaoFactory;
8 import org.openecomp.core.zusammen.plugin.dao.VersionSynchronizationStateRepository;
9 import org.openecomp.core.zusammen.plugin.dao.VersionSynchronizationStateRepositoryFactory;
10 import org.openecomp.core.zusammen.plugin.dao.types.SynchronizationStateEntity;
11 import org.openecomp.core.zusammen.plugin.dao.types.VersionContext;
12 import org.openecomp.core.zusammen.plugin.dao.types.VersionEntity;
13
14 import java.util.Date;
15 import java.util.Optional;
16
17 import static org.openecomp.core.zusammen.plugin.ZusammenPluginUtil.getPrivateSpaceName;
18
19 public class VersionPrivateStoreImpl implements VersionPrivateStore {
20
21   Id revisionId = Id.ZERO;
22
23   @Override
24   public Optional<VersionEntity> get(SessionContext context, Id itemId, Id versionId) {
25     return getVersionDao(context).get(context, getPrivateSpaceName(context), itemId, versionId);
26   }
27
28   @Override
29   public Optional<SynchronizationStateEntity> getSynchronizationState(SessionContext context,
30                                                                       Id itemId, Id versionId) {
31
32     return getVersionSyncStateRepository(context)
33         .get(context, new VersionContext(getPrivateSpaceName(context), itemId),
34             new SynchronizationStateEntity(versionId, revisionId));
35   }
36
37   @Override
38   public void create(SessionContext context, Id itemId, VersionEntity version) {
39     String privateSpace = getPrivateSpaceName(context);
40
41
42     getVersionDao(context).create(context, privateSpace, itemId, version);
43     getVersionSyncStateRepository(context).create(context, new VersionContext(privateSpace,
44             itemId),
45         new SynchronizationStateEntity(version.getId(), revisionId, null, true));
46   }
47
48   @Override
49   public void update(SessionContext context, Id itemId, VersionEntity version) {
50
51     getVersionDao(context)
52         .updateModificationTime(context, getPrivateSpaceName(context), itemId, version.getId(),
53             version.getModificationTime());
54   }
55
56   @Override
57   public void update(SessionContext context, Id itemId, VersionEntity version, Date publishTime,
58                      boolean dirty) {
59     getVersionSyncStateRepository(context).updatePublishTime(context,
60         new VersionContext(getPrivateSpaceName(context), itemId),
61         new SynchronizationStateEntity(version.getId(), revisionId, publishTime, dirty));
62   }
63
64   @Override
65   public void delete(SessionContext context, Id itemId, VersionEntity version) {
66     String privateSpace = getPrivateSpaceName(context);
67
68     getVersionDao(context).delete(context, privateSpace, itemId, version.getId());
69     getVersionSyncStateRepository(context).delete(context, new VersionContext(privateSpace,
70             itemId),
71         new SynchronizationStateEntity(version.getId(), revisionId));
72   }
73
74   @Override
75   public void markAsPublished(SessionContext context, Id itemId, Id versionId, Date publishTime) {
76     getVersionSyncStateRepository(context)
77         .updatePublishTime(context, new VersionContext(getPrivateSpaceName(context), itemId),
78             new SynchronizationStateEntity(versionId, revisionId, publishTime, false));
79   }
80
81   @Override
82   public void commitStagedCreate(SessionContext context, Id itemId, VersionEntity version,
83                                  Date publishTime) {
84     String privateSpace = getPrivateSpaceName(context);
85
86     getVersionDao(context).create(context, privateSpace, itemId, version);
87     getVersionSyncStateRepository(context).create(context, new VersionContext(privateSpace,
88             itemId),
89         new SynchronizationStateEntity(version.getId(), revisionId, publishTime, false));
90   }
91
92   @Override
93   public void commitStagedUpdate(SessionContext context, Id itemId, VersionEntity version,
94                                  Date publishTime) {
95     update(context, itemId, version, publishTime, false);
96   }
97
98   @Override
99   public void commitStagedIgnore(SessionContext context, Id itemId, VersionEntity version,
100                                  Date publishTime) {
101     getVersionSyncStateRepository(context).updatePublishTime(context,
102         new VersionContext(getPrivateSpaceName(context), itemId),
103         new SynchronizationStateEntity(version.getId(), revisionId, publishTime, false));
104   }
105
106
107
108
109   protected VersionDao getVersionDao(SessionContext context) {
110     return VersionDaoFactory.getInstance().createInterface(context);
111   }
112
113   protected VersionSynchronizationStateRepository getVersionSyncStateRepository(
114       SessionContext context) {
115     return VersionSynchronizationStateRepositoryFactory.getInstance().createInterface(context);
116   }
117 }