Unit Tests
[sdc.git] / openecomp-be / lib / openecomp-core-lib / openecomp-zusammen-lib / openecomp-zusammen-plugin / src / main / java / org / openecomp / core / zusammen / plugin / dao / impl / cassandra / VersionSynchronizationStateRepositoryImpl.java
1 package org.openecomp.core.zusammen.plugin.dao.impl.cassandra;
2
3 import com.amdocs.zusammen.datatypes.Id;
4 import com.amdocs.zusammen.datatypes.SessionContext;
5 import com.datastax.driver.core.ResultSet;
6 import com.datastax.driver.core.Row;
7 import com.datastax.driver.mapping.annotations.Accessor;
8 import com.datastax.driver.mapping.annotations.Query;
9 import org.openecomp.core.zusammen.plugin.dao.VersionSynchronizationStateRepository;
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.ArrayList;
15 import java.util.Date;
16 import java.util.List;
17 import java.util.Optional;
18 import java.util.stream.Collectors;
19
20 public class VersionSynchronizationStateRepositoryImpl
21     implements VersionSynchronizationStateRepository {
22
23   @Override
24   public void create(SessionContext context, VersionContext entityContext,
25                      SynchronizationStateEntity syncStateEntity) {
26     updatePublishTime(context, entityContext, syncStateEntity);
27   }
28
29   @Override
30   public void updatePublishTime(SessionContext context, VersionContext entityContext,
31                                 SynchronizationStateEntity syncStateEntity) {
32     getAccessor(context)
33         .updatePublishTime(syncStateEntity.getPublishTime(), entityContext.getSpace(),
34             entityContext.getItemId().toString(), syncStateEntity.getId().toString(),
35             syncStateEntity.getRevisionId().getValue());
36   }
37
38   @Override
39   public List<SynchronizationStateEntity> list(SessionContext context, VersionContext
40       entityContext, VersionEntity versionEntity) {
41
42     List<Row> rows = getAccessor(context).list(entityContext.getSpace(), entityContext.getItemId().toString
43         (),versionEntity.getId().toString()).all();
44     return rows == null ? new ArrayList<>():
45         rows.stream().map(VersionSynchronizationStateRepositoryImpl::getSynchronizationStateEntity).collect(Collectors.toList());
46   }
47
48
49
50   /*@Override
51   public List<SynchronizationStateEntity> listRevisions(SessionContext context,
52                                                         VersionContext entityContext,
53                                                         SynchronizationStateEntity syncStateEntity) {
54     List<Row> rows = getAccessor(context).list(entityContext.getSpace(), entityContext.getItemId()
55         .toString(), syncStateEntity.getId().toString()).all();
56     return rows == null ? new ArrayList<>() :rows.stream()
57         .map(VersionSynchronizationStateRepositoryImpl::getSynchronizationStateEntity)
58         .collect(Collectors.toList());
59
60
61
62
63     //forEach(row -> getSynchronizationStateEntity(syncStateEntity.getId(), row));
64
65
66   }*/
67
68
69   @Override
70   public void delete(SessionContext context, VersionContext entityContext,
71                      SynchronizationStateEntity syncStateEntity) {
72     // done by version dao
73   }
74
75   @Override
76   public Optional<SynchronizationStateEntity> get(SessionContext context,
77                                                   VersionContext entityContext,
78                                                   SynchronizationStateEntity syncStateEntity) {
79     Row row =
80         getAccessor(context).get(entityContext.getSpace(), entityContext.getItemId().toString(),
81             syncStateEntity.getId().toString(), syncStateEntity.getRevisionId().getValue()).one();
82
83     return row == null ? Optional.empty()
84         : Optional.of(getSynchronizationStateEntity(syncStateEntity.getId(), row));
85   }
86
87   private SynchronizationStateEntity getSynchronizationStateEntity(Id entityId, Row row) {
88     SynchronizationStateEntity syncStateEntity = new SynchronizationStateEntity(entityId,
89         new Id(row.getString(REVISION_ID_FIELD)));
90     syncStateEntity.setPublishTime(row.getDate(PUBLISH_TIME_FIELD));
91     syncStateEntity.setDirty(!row.getSet(DIRTY_ELEMENT_FIELD, String.class).isEmpty());
92     return syncStateEntity;
93   }
94
95   private static SynchronizationStateEntity getSynchronizationStateEntity(Row row) {
96     Id entityId = new Id(row.getColumnDefinitions().contains("version_id") ? row.getString
97         ("version_id") : row.getString("element_id"));
98     SynchronizationStateEntity syncStateEntity = new SynchronizationStateEntity(entityId,
99         new Id(row.getString(REVISION_ID_FIELD)));
100     syncStateEntity.setPublishTime(row.getDate(PUBLISH_TIME_FIELD));
101     syncStateEntity.setDirty(!row.getSet(DIRTY_ELEMENT_FIELD, String.class).isEmpty());
102     syncStateEntity.setRevisionId(new Id(row.getString(REVISION_ID_FIELD)));
103     syncStateEntity.setUser(row.getString(USER));
104     syncStateEntity.setMessage(row.getString(MESSAGE));
105     return syncStateEntity;
106   }
107
108   private VersionSyncStateAccessor getAccessor(SessionContext context) {
109     return CassandraDaoUtils.getAccessor(context, VersionSyncStateAccessor.class);
110   }
111
112   @Accessor
113   interface VersionSyncStateAccessor {
114     @Query(
115         "UPDATE version_elements SET publish_time=? WHERE space=? AND item_id=? AND version_id=? " +
116             "AND revision_id=? ")
117     void updatePublishTime(Date publishTime, String space, String itemId, String versionId, String
118         revisionId);
119
120     @Query("SELECT version_id,revision_id,publish_time, dirty_element_ids FROM version_elements " +
121         "WHERE space=? AND item_id=? AND version_id=? AND revision_id=? ")
122     ResultSet get(String space, String itemId, String versionId, String revisionId);
123
124     @Query("SELECT version_id,revision_id,publish_time,user,message, dirty_element_ids FROM " +
125         "version_elements " +
126         "WHERE space=? AND item_id=? AND version_id=? ")
127     ResultSet list(String space, String itemId, String versionId);
128
129   }
130
131
132   private static final String PUBLISH_TIME_FIELD = "publish_time";
133   private static final String DIRTY_ELEMENT_FIELD = "dirty_element_ids";
134   private static final String REVISION_ID_FIELD = "revision_id";
135   private static final String USER = "user";
136   private static final String MESSAGE = "message";
137 }