1 package org.openecomp.core.zusammen.plugin.dao.impl.cassandra;
 
   3 import com.amdocs.zusammen.datatypes.SessionContext;
 
   4 import com.amdocs.zusammen.datatypes.item.Action;
 
   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.VersionStageRepository;
 
  10 import org.openecomp.core.zusammen.plugin.dao.types.StageEntity;
 
  11 import org.openecomp.core.zusammen.plugin.dao.types.VersionContext;
 
  12 import org.openecomp.core.zusammen.plugin.dao.types.VersionEntity;
 
  14 import java.util.Date;
 
  15 import java.util.Optional;
 
  17 public class VersionStageRepositoryImpl implements VersionStageRepository {
 
  20   public Optional<StageEntity<VersionEntity>> get(SessionContext context,
 
  21                                                   VersionContext entityContext,
 
  22                                                   VersionEntity entity) {
 
  23     Row row = getAccessor(context)
 
  24         .get(entityContext.getSpace(), entityContext.getItemId().toString(),
 
  25             entity.getId().toString()).one();
 
  26     return row == null ? Optional.empty() : Optional.of(convertToVersionStage(entity, row));
 
  30   public void create(SessionContext context, VersionContext entityContext,
 
  31                      StageEntity<VersionEntity> stageEntity) {
 
  32     VersionEntity entity = stageEntity.getEntity();
 
  33     getAccessor(context).create(entityContext.getSpace(),
 
  34         entityContext.getItemId().toString(),
 
  35         entity.getId().toString(),
 
  36         entity.getBaseId() == null ? null : entity.getBaseId().toString(),
 
  37         entity.getCreationTime() == null ? null : entity.getCreationTime(),
 
  38         entity.getModificationTime() == null ? null : entity.getModificationTime(),
 
  39         stageEntity.getPublishTime(),
 
  40         stageEntity.getAction());
 
  44   public void delete(SessionContext context, VersionContext entityContext, VersionEntity entity) {
 
  45     getAccessor(context).delete(entityContext.getSpace(), entityContext.getItemId().toString(),
 
  46         entity.getId().toString());
 
  49   private StageEntity<VersionEntity> convertToVersionStage(VersionEntity version, Row row) {
 
  50     StageEntity<VersionEntity> versionStage =
 
  51         new StageEntity<>(VersionDaoImpl.enrichVersionEntity(version, row),
 
  52             row.getDate(VersionStageField.PUBLISH_TIME));
 
  53     versionStage.setAction(Action.valueOf(row.getString(VersionStageField.ACTION)));
 
  57   private VersionStageAccessor getAccessor(SessionContext context) {
 
  58     return CassandraDaoUtils.getAccessor(context, VersionStageAccessor.class);
 
  62   interface VersionStageAccessor {
 
  64     @Query("INSERT INTO version_stage (space, item_id, version_id, base_version_id, " +
 
  65         "creation_time, modification_time, publish_time, action) " +
 
  66         "VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
 
  67     void create(String space, String itemId, String versionId, String baseVersionId,
 
  68                 Date creationTime, Date modificationTime, Date publishTime, Action action);
 
  70     @Query("DELETE FROM version_stage WHERE space=? AND item_id=? AND version_id=?")
 
  71     void delete(String space, String itemId, String versionId);
 
  73     @Query("SELECT base_version_id, creation_time, modification_time, publish_time, action " +
 
  74         "FROM  version_stage WHERE space=? AND item_id=? AND version_id=?")
 
  75     ResultSet get(String space, String itemId, String versionId);
 
  78   private static final class VersionStageField {
 
  79     private static final String PUBLISH_TIME = "publish_time";
 
  80     private static final String ACTION = "action";