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";