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.VersionDao;
10 import org.openecomp.core.zusammen.plugin.dao.types.VersionEntity;
12 import java.util.ArrayList;
13 import java.util.Collection;
14 import java.util.Date;
15 import java.util.List;
17 import java.util.Optional;
18 import java.util.stream.Collectors;
20 import static java.util.stream.Collectors.toMap;
22 public class VersionDaoImpl implements VersionDao {
25 public void create(SessionContext context, String space, Id itemId, VersionEntity version) {
26 String baseVersion = version.getBaseId() != null ? version.getBaseId().toString() : null;
29 .create(space, itemId.toString(), version.getId().toString(),
31 version.getCreationTime(), version.getModificationTime());
36 public void delete(SessionContext context, String space, Id itemId, Id versionId) {
38 getAccessor(context).delete(space, itemId.toString(), versionId.toString());
42 public void updateModificationTime(SessionContext context, String space, Id itemId,
43 Id versionId, Date modificationTime) {
45 .updateModificationTime(modificationTime, space, itemId.toString(), versionId.toString());
50 public Collection<VersionEntity> list(SessionContext context, String space, Id itemId) {
51 List<Row> rows = getAccessor(context).list(space, itemId.toString()).all();
52 return rows == null ? new ArrayList<>() :
53 rows.stream().map(VersionDaoImpl::convertToVersionEntity).collect(Collectors.toList());
58 public Optional<VersionEntity> get(SessionContext context, String space, Id itemId,
62 row = getAccessor(context).get(space, itemId.toString(), versionId.toString()).one();
65 return row == null ? Optional.empty() : Optional.of(convertToVersionEntity(row));
69 public boolean checkHealth(SessionContext context) {
70 return getAccessor(context).checkHealth().getColumnDefinitions()
71 .contains(VersionField.VERSION_ID);
75 public void createVersionElements(SessionContext context, String space, Id itemId,
76 Id versionId, Id revisionId, Map<Id, Id> versionElementIds,
77 Date publishTime, String message) {
78 Map<String, String> elementIds = versionElementIds==null?null:versionElementIds.
81 collect(toMap((Map.Entry<Id, Id>entry)->entry.getKey().getValue(),
82 (Map.Entry<Id, Id>entry)->entry.getValue().getValue()));
84 getVersionElementsAccessor(context).create(space,itemId.toString(),versionId.toString(),
85 revisionId.getValue(),elementIds,publishTime,message,context.getUser().getUserName());
89 private static VersionEntity convertToVersionEntity(Row row) {
91 /*Id revisionId = row.getColumnDefinitions().contains("revision_id")?new Id(row.getString
92 (VersionField.REVISION_ID)):null;*/
94 VersionEntity version = new VersionEntity(new Id(row.getString(VersionField.VERSION_ID)));
95 return enrichVersionEntity(version, row);
98 static VersionEntity enrichVersionEntity(VersionEntity version, Row row) {
99 version.setBaseId(new Id(row.getString(VersionField.BASE_VERSION_ID)));
100 version.setCreationTime(row.getDate(VersionField.CREATION_TIME));
101 version.setModificationTime(row.getDate(VersionField.MODIFICATION_TIME));
105 private VersionAccessor getAccessor(SessionContext context) {
106 return CassandraDaoUtils.getAccessor(context, VersionAccessor.class);
109 private VersionElementsAccessor getVersionElementsAccessor(SessionContext context) {
110 return CassandraDaoUtils.getAccessor(context, VersionElementsAccessor.class);
114 interface VersionAccessor {
117 "INSERT INTO version (space, item_id, version_id, base_version_id, " +
119 "modification_time) " +
120 "VALUES (?, ?, ?, ?, ?, ?)")
121 void create(String space, String itemId, String versionId, String baseVersionId,
122 Date creationTime, Date modificationTime);
124 @Query("UPDATE version SET modification_time=? WHERE space=? AND item_id=? AND version_id=? ")
125 void updateModificationTime(Date modificationTime, String space, String itemId,
128 @Query("DELETE FROM version WHERE space=? AND item_id=? AND version_id=? ")
129 void delete(String space, String itemId, String versionId);
131 @Query("SELECT version_id, base_version_id, creation_time, modification_time " +
132 "FROM version WHERE space=? AND item_id=? AND version_id=? ")
133 ResultSet get(String space, String itemId, String versionId);
135 /*@Query("SELECT version_id, base_version_id, creation_time, modification_time " +
136 "FROM version WHERE space=? AND item_id=? AND version_id=? ")
137 ResultSet get(String space, String itemId, String versionId);*/
140 @Query("SELECT version_id, base_version_id, creation_time, modification_time " +
141 "FROM version WHERE space=? AND item_id=?")
142 ResultSet list(String space, String itemId);
144 @Query("SELECT version_id FROM version LIMIT 1")
145 ResultSet checkHealth();
148 private static final class VersionField {
149 private static final String VERSION_ID = "version_id";
150 private static final String BASE_VERSION_ID = "base_version_id";
151 private static final String CREATION_TIME = "creation_time";
152 private static final String MODIFICATION_TIME = "modification_time";
153 //private static final String REVISION_ID = "revision_id";
157 interface VersionElementsAccessor {
159 @Query("INSERT INTO version_elements (space,item_id,version_id,revision_id,element_ids," +
160 "publish_time,message,user) " +
161 "VALUES (?,?,?,?,?,?,?,?)")
162 void create(String space,
165 String versionRevisionId,
166 Map<String,String> elementIds,
175 /* public static final class VersionElementsField {
176 private static final String SPACE = "space";
177 private static final String ITEM_ID = "item_id";
178 private static final String VERSION_ID = "version_id";
179 private static final String ELEMENT_IDS = "element_ids";
180 private static final String REVISION_ID = "revision_id";