summaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-plugin/src/main/java/org/openecomp/core/zusammen/plugin/dao/impl/cassandra/VersionStageRepositoryImpl.java
blob: 353f37b91b2fb95ffaeb491baa55056f2bcbb377 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package org.openecomp.core.zusammen.plugin.dao.impl.cassandra;

import com.amdocs.zusammen.datatypes.SessionContext;
import com.amdocs.zusammen.datatypes.item.Action;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.mapping.annotations.Accessor;
import com.datastax.driver.mapping.annotations.Query;
import org.openecomp.core.zusammen.plugin.dao.VersionStageRepository;
import org.openecomp.core.zusammen.plugin.dao.types.StageEntity;
import org.openecomp.core.zusammen.plugin.dao.types.VersionContext;
import org.openecomp.core.zusammen.plugin.dao.types.VersionEntity;

import java.util.Date;
import java.util.Optional;

public class VersionStageRepositoryImpl implements VersionStageRepository {

  @Override
  public Optional<StageEntity<VersionEntity>> get(SessionContext context,
                                                  VersionContext entityContext,
                                                  VersionEntity entity) {
    Row row = getAccessor(context)
        .get(entityContext.getSpace(), entityContext.getItemId().toString(),
            entity.getId().toString()).one();
    return row == null ? Optional.empty() : Optional.of(convertToVersionStage(entity, row));
  }

  @Override
  public void create(SessionContext context, VersionContext entityContext,
                     StageEntity<VersionEntity> stageEntity) {
    VersionEntity entity = stageEntity.getEntity();
    getAccessor(context).create(entityContext.getSpace(),
        entityContext.getItemId().toString(),
        entity.getId().toString(),
        entity.getBaseId() == null ? null : entity.getBaseId().toString(),
        entity.getCreationTime() == null ? null : entity.getCreationTime(),
        entity.getModificationTime() == null ? null : entity.getModificationTime(),
        stageEntity.getPublishTime(),
        stageEntity.getAction());
  }

  @Override
  public void delete(SessionContext context, VersionContext entityContext, VersionEntity entity) {
    getAccessor(context).delete(entityContext.getSpace(), entityContext.getItemId().toString(),
        entity.getId().toString());
  }

  private StageEntity<VersionEntity> convertToVersionStage(VersionEntity version, Row row) {
    StageEntity<VersionEntity> versionStage =
        new StageEntity<>(VersionDaoImpl.enrichVersionEntity(version, row),
            row.getDate(VersionStageField.PUBLISH_TIME));
    versionStage.setAction(Action.valueOf(row.getString(VersionStageField.ACTION)));
    return versionStage;
  }

  private VersionStageAccessor getAccessor(SessionContext context) {
    return CassandraDaoUtils.getAccessor(context, VersionStageAccessor.class);
  }

  @Accessor
  interface VersionStageAccessor {

    @Query("INSERT INTO version_stage (space, item_id, version_id, base_version_id, " +
        "creation_time, modification_time, publish_time, action) " +
        "VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
    void create(String space, String itemId, String versionId, String baseVersionId,
                Date creationTime, Date modificationTime, Date publishTime, Action action);

    @Query("DELETE FROM version_stage WHERE space=? AND item_id=? AND version_id=?")
    void delete(String space, String itemId, String versionId);

    @Query("SELECT base_version_id, creation_time, modification_time, publish_time, action " +
        "FROM  version_stage WHERE space=? AND item_id=? AND version_id=?")
    ResultSet get(String space, String itemId, String versionId);
  }

  private static final class VersionStageField {
    private static final String PUBLISH_TIME = "publish_time";
    private static final String ACTION = "action";
  }
}