Unit Tests
[sdc.git] / 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
1 package org.openecomp.core.zusammen.plugin.dao.impl.cassandra;
2
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;
11
12 import java.util.ArrayList;
13 import java.util.Collection;
14 import java.util.Date;
15 import java.util.List;
16 import java.util.Map;
17 import java.util.Optional;
18 import java.util.stream.Collectors;
19
20 import static java.util.stream.Collectors.toMap;
21
22 public class VersionDaoImpl implements VersionDao {
23
24   @Override
25   public void create(SessionContext context, String space, Id itemId, VersionEntity version) {
26     String baseVersion = version.getBaseId() != null ? version.getBaseId().toString() : null;
27
28     getAccessor(context)
29         .create(space, itemId.toString(), version.getId().toString(),
30             baseVersion,
31             version.getCreationTime(), version.getModificationTime());
32
33   }
34
35   @Override
36   public void delete(SessionContext context, String space, Id itemId, Id versionId) {
37
38     getAccessor(context).delete(space, itemId.toString(), versionId.toString());
39   }
40
41   @Override
42   public void updateModificationTime(SessionContext context, String space, Id itemId,
43                                      Id versionId, Date modificationTime) {
44     getAccessor(context)
45         .updateModificationTime(modificationTime, space, itemId.toString(), versionId.toString());
46   }
47
48
49   @Override
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());
54   }
55
56
57   @Override
58   public Optional<VersionEntity> get(SessionContext context, String space, Id itemId,
59                                      Id versionId) {
60     Row row;
61
62     row = getAccessor(context).get(space, itemId.toString(), versionId.toString()).one();
63
64
65     return row == null ? Optional.empty() : Optional.of(convertToVersionEntity(row));
66   }
67
68   @Override
69   public boolean checkHealth(SessionContext context) {
70     return getAccessor(context).checkHealth().getColumnDefinitions()
71         .contains(VersionField.VERSION_ID);
72   }
73
74   @Override
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.
79         entrySet().
80         stream().
81         collect(toMap((Map.Entry<Id, Id>entry)->entry.getKey().getValue(),
82                       (Map.Entry<Id, Id>entry)->entry.getValue().getValue()));
83
84     getVersionElementsAccessor(context).create(space,itemId.toString(),versionId.toString(),
85         revisionId.getValue(),elementIds,publishTime,message,context.getUser().getUserName());
86   }
87
88
89   private static VersionEntity convertToVersionEntity(Row row) {
90
91     /*Id revisionId =  row.getColumnDefinitions().contains("revision_id")?new Id(row.getString
92         (VersionField.REVISION_ID)):null;*/
93
94     VersionEntity version = new VersionEntity(new Id(row.getString(VersionField.VERSION_ID)));
95     return enrichVersionEntity(version, row);
96   }
97
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));
102     return version;
103   }
104
105   private VersionAccessor getAccessor(SessionContext context) {
106     return CassandraDaoUtils.getAccessor(context, VersionAccessor.class);
107   }
108
109   private VersionElementsAccessor getVersionElementsAccessor(SessionContext context) {
110     return CassandraDaoUtils.getAccessor(context, VersionElementsAccessor.class);
111   }
112
113   @Accessor
114   interface VersionAccessor {
115
116     @Query(
117         "INSERT INTO version (space, item_id, version_id, base_version_id, " +
118             "creation_time, " +
119             "modification_time) " +
120             "VALUES (?, ?, ?, ?, ?, ?)")
121     void create(String space, String itemId, String versionId, String baseVersionId,
122                 Date creationTime, Date modificationTime);
123
124     @Query("UPDATE version SET modification_time=? WHERE space=? AND item_id=? AND version_id=? ")
125     void updateModificationTime(Date modificationTime, String space, String itemId,
126                                 String versionId);
127
128     @Query("DELETE FROM version WHERE space=? AND item_id=? AND version_id=? ")
129     void delete(String space, String itemId, String versionId);
130
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);
134
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);*/
138
139
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);
143
144     @Query("SELECT version_id FROM version LIMIT 1")
145     ResultSet checkHealth();
146   }
147
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";
154   }
155
156   @Accessor
157   interface VersionElementsAccessor {
158
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,
163                 String itemId,
164                 String versionId,
165                 String versionRevisionId,
166                 Map<String,String> elementIds,
167                 Date publishTime,
168                 String message,
169                 String user);
170
171
172
173   }
174
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";
181
182   }*/
183
184
185 }