1 package org.openecomp.core.zusammen.plugin.dao.impl.cassandra;
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;
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;
20 public class VersionSynchronizationStateRepositoryImpl
21 implements VersionSynchronizationStateRepository {
24 public void create(SessionContext context, VersionContext entityContext,
25 SynchronizationStateEntity syncStateEntity) {
26 updatePublishTime(context, entityContext, syncStateEntity);
30 public void updatePublishTime(SessionContext context, VersionContext entityContext,
31 SynchronizationStateEntity syncStateEntity) {
33 .updatePublishTime(syncStateEntity.getPublishTime(), entityContext.getSpace(),
34 entityContext.getItemId().toString(), syncStateEntity.getId().toString(),
35 syncStateEntity.getRevisionId().getValue());
39 public List<SynchronizationStateEntity> list(SessionContext context, VersionContext
40 entityContext, VersionEntity versionEntity) {
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());
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());
63 //forEach(row -> getSynchronizationStateEntity(syncStateEntity.getId(), row));
70 public void delete(SessionContext context, VersionContext entityContext,
71 SynchronizationStateEntity syncStateEntity) {
72 // done by version dao
76 public Optional<SynchronizationStateEntity> get(SessionContext context,
77 VersionContext entityContext,
78 SynchronizationStateEntity syncStateEntity) {
80 getAccessor(context).get(entityContext.getSpace(), entityContext.getItemId().toString(),
81 syncStateEntity.getId().toString(), syncStateEntity.getRevisionId().getValue()).one();
83 return row == null ? Optional.empty()
84 : Optional.of(getSynchronizationStateEntity(syncStateEntity.getId(), row));
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;
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;
108 private VersionSyncStateAccessor getAccessor(SessionContext context) {
109 return CassandraDaoUtils.getAccessor(context, VersionSyncStateAccessor.class);
113 interface VersionSyncStateAccessor {
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
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);
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);
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";