Skip to content

Commit a74dc98

Browse files
committed
🗃️ Add migration to update null eventIDs
1 parent 34a7c1c commit a74dc98

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

opensrp-chw/src/liberia/java/org/smartregister/chw/repository/ChwRepositoryFlv.java

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,38 @@
11
package org.smartregister.chw.repository;
22

3+
import static org.smartregister.repository.BaseRepository.TYPE_Synced;
4+
import static org.smartregister.repository.BaseRepository.TYPE_Valid;
5+
36
import android.content.Context;
47

8+
import net.sqlcipher.Cursor;
59
import net.sqlcipher.database.SQLiteDatabase;
610

11+
import org.apache.commons.lang3.StringUtils;
12+
import org.json.JSONObject;
713
import org.smartregister.chw.anc.repository.VisitRepository;
14+
import org.smartregister.chw.application.ChwApplication;
815
import org.smartregister.chw.util.RepositoryUtils;
16+
import org.smartregister.domain.Event;
917
import org.smartregister.domain.db.Column;
1018
import org.smartregister.immunization.repository.RecurringServiceRecordRepository;
1119
import org.smartregister.immunization.repository.VaccineRepository;
1220
import org.smartregister.immunization.util.IMDatabaseUtils;
1321
import org.smartregister.reporting.ReportingLibrary;
1422
import org.smartregister.repository.AlertRepository;
1523
import org.smartregister.repository.EventClientRepository;
24+
import org.smartregister.sync.helper.ECSyncHelper;
1625

26+
import java.util.ArrayList;
1727
import java.util.Arrays;
1828
import java.util.Collections;
29+
import java.util.List;
1930

2031
import timber.log.Timber;
2132

2233
public class ChwRepositoryFlv {
34+
private static final String EVENT_ID = "id";
35+
private static final String _ID = "_id";
2336

2437
public static void onUpgrade(Context context, SQLiteDatabase db, int oldVersion, int newVersion) {
2538
Timber.w(ChwRepository.class.getName(),
@@ -46,6 +59,9 @@ public static void onUpgrade(Context context, SQLiteDatabase db, int oldVersion,
4659
case 7:
4760
upgradeToVersion7(db);
4861
break;
62+
case 8:
63+
upgradeToVersion8(db);
64+
break;
4965
default:
5066
break;
5167
}
@@ -147,4 +163,73 @@ private static void upgradeToVersion7(SQLiteDatabase db) {
147163
Timber.e(e, "upgradeToVersion7");
148164
}
149165
}
166+
167+
private static void upgradeToVersion8(SQLiteDatabase db) {
168+
List<Event> events = new ArrayList<>();
169+
String eventTableName = EventClientRepository.Table.event.name();
170+
String eventIdCol = EventClientRepository.event_column.eventId.name();
171+
String eventSyncStatusCol = EventClientRepository.event_column.syncStatus.name();
172+
String eventValidCol = EventClientRepository.event_column.validationStatus.name();
173+
String jsonCol = EventClientRepository.event_column.json.name();
174+
String formSubmissionCol = EventClientRepository.event_column.formSubmissionId.name();
175+
176+
Cursor cursor;
177+
String selection = eventIdCol + " IS NULL AND " + eventValidCol + " = ?";
178+
try {
179+
cursor = db.query(eventTableName, new String[]{jsonCol},
180+
selection, new String[]{TYPE_Valid}, null, null, null);
181+
events = readEvents(cursor);
182+
} catch (Exception ex) {
183+
Timber.e(ex);
184+
}
185+
String updateSQL;
186+
for (Event event : events) {
187+
updateSQL = String.format("UPDATE %s SET %s = '%s', %s = '%s' WHERE %s = '%s';", eventTableName,
188+
eventIdCol, event.getEventId(), eventSyncStatusCol, TYPE_Synced, formSubmissionCol, event.getFormSubmissionId());
189+
try {
190+
db.execSQL(updateSQL);
191+
} catch (Exception e) {
192+
Timber.e(e, "upgradeToVersion21 ");
193+
}
194+
}
195+
}
196+
197+
private static List<Event> readEvents(Cursor cursor) {
198+
List<Event> events = new ArrayList<>();
199+
ECSyncHelper syncHelper = ChwApplication.getInstance().getEcSyncHelper();
200+
try {
201+
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
202+
while (!cursor.isAfterLast()) {
203+
String json = cursor.getString(cursor.getColumnIndex("json"));
204+
Event event = syncHelper.convert(new JSONObject(json), Event.class);
205+
event.setEventId(getEventId(json));
206+
events.add(event);
207+
cursor.moveToNext();
208+
}
209+
}
210+
} catch (Exception e) {
211+
Timber.e(e);
212+
} finally {
213+
cursor.close();
214+
}
215+
return events;
216+
}
217+
218+
private static String getEventId(String jsonString) {
219+
JSONObject jsonObject;
220+
String eventId = null;
221+
if (StringUtils.isNotEmpty(jsonString)) {
222+
try {
223+
jsonObject = new JSONObject(jsonString);
224+
if (jsonObject.has(EVENT_ID)) {
225+
eventId = jsonObject.getString(EVENT_ID);
226+
} else if (jsonObject.has(_ID)) {
227+
eventId = jsonObject.getString(_ID);
228+
}
229+
} catch (Exception ex) {
230+
Timber.e(ex);
231+
}
232+
}
233+
return eventId;
234+
}
150235
}

0 commit comments

Comments
 (0)