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/VersionDaoImpl.java
blob: bba2ddf267582b0c34bfa67eae3e18d1c5fb4788 (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
package org.openecomp.core.zusammen.plugin.dao.impl.cassandra;

import com.amdocs.zusammen.datatypes.Id;
import com.amdocs.zusammen.datatypes.SessionContext;
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.VersionDao;
import org.openecomp.core.zusammen.plugin.dao.types.VersionEntity;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

import static java.util.stream.Collectors.toMap;

public class VersionDaoImpl implements VersionDao {

  @Override
  public void create(SessionContext context, String space, Id itemId, VersionEntity version) {
    String baseVersion = version.getBaseId() != null ? version.getBaseId().toString() : null;

    getAccessor(context)
        .create(space, itemId.toString(), version.getId().toString(),
            baseVersion,
            version.getCreationTime(), version.getModificationTime());

  }

  @Override
  public void delete(SessionContext context, String space, Id itemId, Id versionId) {

    getAccessor(context).delete(space, itemId.toString(), versionId.toString());
  }

  @Override
  public void updateModificationTime(SessionContext context, String space, Id itemId,
                                     Id versionId, Date modificationTime) {
    getAccessor(context)
        .updateModificationTime(modificationTime, space, itemId.toString(), versionId.toString());
  }


  @Override
  public Collection<VersionEntity> list(SessionContext context, String space, Id itemId) {
    List<Row> rows = getAccessor(context).list(space, itemId.toString()).all();
    return rows == null ? new ArrayList<>() :
        rows.stream().map(VersionDaoImpl::convertToVersionEntity).collect(Collectors.toList());
  }


  @Override
  public Optional<VersionEntity> get(SessionContext context, String space, Id itemId,
                                     Id versionId) {
    Row row;

    row = getAccessor(context).get(space, itemId.toString(), versionId.toString()).one();


    return row == null ? Optional.empty() : Optional.of(convertToVersionEntity(row));
  }

  @Override
  public boolean checkHealth(SessionContext context) {
    return getAccessor(context).checkHealth().getColumnDefinitions()
        .contains(VersionField.VERSION_ID);
  }

  @Override
  public void createVersionElements(SessionContext context, String space, Id itemId,
                                    Id versionId, Id revisionId, Map<Id, Id> versionElementIds,
                                    Date publishTime, String message) {
    Map<String, String> elementIds = versionElementIds==null?null:versionElementIds.
        entrySet().
        stream().
        collect(toMap((Map.Entry<Id, Id>entry)->entry.getKey().getValue(),
                      (Map.Entry<Id, Id>entry)->entry.getValue().getValue()));

    getVersionElementsAccessor(context).create(space,itemId.toString(),versionId.toString(),
        revisionId.getValue(),elementIds,publishTime,message,context.getUser().getUserName());
  }


  private static VersionEntity convertToVersionEntity(Row row) {

    /*Id revisionId =  row.getColumnDefinitions().contains("revision_id")?new Id(row.getString
        (VersionField.REVISION_ID)):null;*/

    VersionEntity version = new VersionEntity(new Id(row.getString(VersionField.VERSION_ID)));
    return enrichVersionEntity(version, row);
  }

  static VersionEntity enrichVersionEntity(VersionEntity version, Row row) {
    version.setBaseId(new Id(row.getString(VersionField.BASE_VERSION_ID)));
    version.setCreationTime(row.getDate(VersionField.CREATION_TIME));
    version.setModificationTime(row.getDate(VersionField.MODIFICATION_TIME));
    return version;
  }

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

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

  @Accessor
  interface VersionAccessor {

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

    @Query("UPDATE version SET modification_time=? WHERE space=? AND item_id=? AND version_id=? ")
    void updateModificationTime(Date modificationTime, String space, String itemId,
                                String versionId);

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

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

    /*@Query("SELECT version_id, base_version_id, creation_time, modification_time " +
        "FROM version WHERE space=? AND item_id=? AND version_id=? ")
    ResultSet get(String space, String itemId, String versionId);*/


    @Query("SELECT version_id, base_version_id, creation_time, modification_time " +
        "FROM version WHERE space=? AND item_id=?")
    ResultSet list(String space, String itemId);

    @Query("SELECT version_id FROM version LIMIT 1")
    ResultSet checkHealth();
  }

  private static final class VersionField {
    private static final String VERSION_ID = "version_id";
    private static final String BASE_VERSION_ID = "base_version_id";
    private static final String CREATION_TIME = "creation_time";
    private static final String MODIFICATION_TIME = "modification_time";
    //private static final String REVISION_ID = "revision_id";
  }

  @Accessor
  interface VersionElementsAccessor {

    @Query("INSERT INTO version_elements (space,item_id,version_id,revision_id,element_ids," +
        "publish_time,message,user) " +
        "VALUES (?,?,?,?,?,?,?,?)")
    void create(String space,
                String itemId,
                String versionId,
                String versionRevisionId,
                Map<String,String> elementIds,
                Date publishTime,
                String message,
                String user);



  }

 /* public static final class VersionElementsField {
    private static final String SPACE = "space";
    private static final String ITEM_ID = "item_id";
    private static final String VERSION_ID = "version_id";
    private static final String ELEMENT_IDS = "element_ids";
    private static final String REVISION_ID = "revision_id";

  }*/


}