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.amdocs.zusammen.plugin.statestore.cassandra.dao.types.ElementEntityContext;
6 import com.datastax.driver.core.ResultSet;
7 import com.datastax.driver.core.Row;
8 import com.datastax.driver.mapping.annotations.Accessor;
9 import com.datastax.driver.mapping.annotations.Query;
10 import org.openecomp.core.zusammen.plugin.dao.ElementSynchronizationStateRepository;
11 import org.openecomp.core.zusammen.plugin.dao.types.SynchronizationStateEntity;
13 import java.util.Collection;
14 import java.util.Collections;
15 import java.util.Date;
16 import java.util.HashSet;
17 import java.util.List;
18 import java.util.Optional;
20 import java.util.stream.Collectors;
22 public class ElementSynchronizationStateRepositoryImpl
23 implements ElementSynchronizationStateRepository {
26 public Collection<SynchronizationStateEntity> list(SessionContext context,
27 ElementEntityContext elementContext) {
28 List<Row> rows = getAccessor(context)
29 .list(elementContext.getSpace(),
30 elementContext.getItemId().toString(),
31 elementContext.getVersionId().toString()).all();
32 return rows == null ? new HashSet<>()
33 : rows.stream().map(this::getSynchronizationStateEntity).collect(Collectors.toSet());
38 public void create(SessionContext context, ElementEntityContext elementContext,
39 SynchronizationStateEntity elementSyncState) {
40 update(context, elementContext.getSpace(),
41 elementContext.getItemId(),
42 elementContext.getVersionId(),
43 elementContext.getRevisionId(),
44 elementSyncState.getRevisionId(),
45 elementSyncState.getId(),
46 elementSyncState.getPublishTime(),
47 elementSyncState.isDirty()
53 public void update(SessionContext context, ElementEntityContext elementContext,
54 SynchronizationStateEntity elementSyncState) {
55 update(context, elementContext.getSpace(),
56 elementContext.getItemId(),
57 elementContext.getVersionId(),
58 elementContext.getRevisionId(),
59 elementSyncState.getRevisionId(),
60 elementSyncState.getId(),
61 elementSyncState.getPublishTime(),
62 elementSyncState.isDirty()
68 public void markAsDirty(SessionContext context, ElementEntityContext elementContext,
69 SynchronizationStateEntity elementSyncState) {
72 getAccessor(context).updateDirty(true,
73 elementContext.getSpace(),
74 elementContext.getItemId().toString(),
75 elementContext.getVersionId().toString(),
76 elementSyncState.getId().toString(),
77 elementContext.getRevisionId().getValue());
79 getVersionElementsAccessor(context).addDirtyElements(
80 Collections.singleton(elementSyncState.getId().toString()), elementContext.getSpace(),
81 elementContext.getItemId().toString(),
82 elementContext.getVersionId().toString(),
83 elementContext.getRevisionId().getValue());
87 public void delete(SessionContext context, ElementEntityContext elementContext,
88 SynchronizationStateEntity elementSyncState) {
89 getAccessor(context).delete(elementContext.getSpace(),
90 elementContext.getItemId().toString(),
91 elementContext.getVersionId().toString(),
92 elementSyncState.getId().toString(),
93 elementContext.getRevisionId().getValue());
95 getVersionElementsAccessor(context).removeDirtyElements(
96 Collections.singleton(elementSyncState.getId().toString()), elementContext.getSpace(),
97 elementContext.getItemId().toString(),
98 elementContext.getVersionId().toString(),
99 elementContext.getRevisionId().getValue());
103 public Optional<SynchronizationStateEntity> get(SessionContext context,
104 ElementEntityContext elementContext,
105 SynchronizationStateEntity elementSyncState) {
107 Row row = getAccessor(context)
108 .get(elementContext.getSpace(),
109 elementContext.getItemId().toString(),
110 elementContext.getVersionId().toString(),
111 elementSyncState.getId().toString(),
112 elementSyncState.getRevisionId().getValue()).one();
114 return row == null ? Optional.empty() : Optional.of(getSynchronizationStateEntity(row));
117 private void update(SessionContext context, String space, Id itemId, Id versionId, Id
118 versionRevisionId,Id elementRevisionId,Id elementId, Date publishTime, boolean isDirty) {
119 getAccessor(context).update(publishTime,
123 versionId.toString(),
124 elementId.toString(),
125 elementRevisionId.getValue());
128 getVersionElementsAccessor(context).addDirtyElements(
129 Collections.singleton(elementId.toString()), space,
131 versionId.toString(),
132 versionRevisionId.getValue());
134 getVersionElementsAccessor(context).removeDirtyElements(
135 Collections.singleton(elementId.toString()), space,
137 versionId.toString(),
138 versionRevisionId.getValue());
143 private SynchronizationStateEntity getSynchronizationStateEntity(Row row) {
144 SynchronizationStateEntity entity =
145 new SynchronizationStateEntity(new Id(row.getString(SynchronizationStateField.ID)),
146 new Id(row.getString(SynchronizationStateField.REVISION_ID)),
147 row.getDate(SynchronizationStateField.PUBLISH_TIME),
148 row.getBool(SynchronizationStateField.DIRTY));
149 entity.setRevisionId(new Id(row.getString(SynchronizationStateField.REVISION_ID)));
155 private ElementSynchronizationStateAccessor getAccessor(SessionContext context) {
156 return CassandraDaoUtils.getAccessor(context, ElementSynchronizationStateAccessor.class);
159 private VersionElementsAccessor getVersionElementsAccessor(SessionContext context) {
160 return CassandraDaoUtils.getAccessor(context, VersionElementsAccessor.class);
164 interface ElementSynchronizationStateAccessor {
165 @Query("UPDATE element_synchronization_state SET publish_time=?, dirty=? " +
166 "WHERE space=? AND item_id=? AND version_id=? AND element_id=? AND revision_id = ? ")
167 void update(Date publishTime, boolean dirty, String space, String itemId, String versionId,
168 String elementId, String revisionId);
170 @Query("UPDATE element_synchronization_state SET dirty=? " +
171 "WHERE space=? AND item_id=? AND version_id=? AND element_id=? AND revision_id = ? ")
172 void updateDirty(boolean dirty, String space, String itemId, String versionId,
173 String elementId, String revisionId);
175 @Query("DELETE FROM element_synchronization_state " +
176 "WHERE space=? AND item_id=? AND version_id=? AND element_id=? AND revision_id = ? ")
177 void delete(String space, String itemId, String versionId, String elementId, String revisionId);
179 @Query("SELECT element_id,revision_id, publish_time, dirty FROM element_synchronization_state" +
180 " WHERE space=? AND item_id=? AND version_id=?")
181 ResultSet list(String space, String itemId, String versionId);
183 @Query("SELECT element_id,revision_id, publish_time, dirty FROM element_synchronization_state" +
184 " WHERE space=? AND item_id=? AND version_id=? AND element_id=? AND revision_id = ? ")
185 ResultSet get(String space, String itemId, String versionId, String elementId, String
189 private static final class SynchronizationStateField {
190 private static final String ID = "element_id";
191 private static final String PUBLISH_TIME = "publish_time";
192 private static final String DIRTY = "dirty";
193 private static final String REVISION_ID = "revision_id";
197 interface VersionElementsAccessor {
199 @Query("UPDATE version_elements SET dirty_element_ids=dirty_element_ids+? " +
200 "WHERE space=? AND item_id=? AND version_id=? AND revision_id=?")
201 void addDirtyElements(Set<String> elementIds, String space, String itemId, String versionId,
204 @Query("UPDATE version_elements SET dirty_element_ids=dirty_element_ids-? " +
205 "WHERE space=? AND item_id=? AND version_id=? AND revision_id=? ")
206 void removeDirtyElements(Set<String> elementIds, String space, String itemId, String
207 versionId, String revisionId);