app/src/main/java/com/futsch1/medtimer/database/JSONMedicineBackup.java
package com.futsch1.medtimer.database;
import com.google.gson.GsonBuilder;
import java.time.Instant;
import java.util.List;
public class JSONMedicineBackup extends JSONBackup<MedicineWithReminders> {
public JSONMedicineBackup() {
super(MedicineWithReminders.class);
}
@Override
public String createBackup(int databaseVersion, List<MedicineWithReminders> list) {
// Fix the medicines where the instructions are null
for (MedicineWithReminders medicineWithReminders : list) {
medicineWithReminders.reminders.stream().filter(reminder -> reminder.instructions == null).forEach(reminder -> reminder.instructions = "");
}
return super.createBackup(databaseVersion, list);
}
@Override
protected GsonBuilder registerTypeAdapters(GsonBuilder builder) {
return builder
.registerTypeAdapter(Medicine.class, new FullDeserialize<Medicine>())
.registerTypeAdapter(Reminder.class, new FullDeserialize<Reminder>());
}
protected boolean isInvalid(MedicineWithReminders medicineWithReminders) {
return medicineWithReminders == null || medicineWithReminders.medicine == null || medicineWithReminders.reminders == null;
}
public void applyBackup(List<MedicineWithReminders> listOfMedicineWithReminders, MedicineRepository medicineRepository) {
medicineRepository.deleteReminders();
medicineRepository.deleteMedicines();
for (MedicineWithReminders medicineWithReminders : listOfMedicineWithReminders) {
long medicineId = medicineRepository.insertMedicine(medicineWithReminders.medicine);
for (Reminder reminder : medicineWithReminders.reminders) {
reminder.medicineRelId = (int) medicineId;
reminder.createdTimestamp = Instant.now().toEpochMilli() / 1000;
medicineRepository.insertReminder(reminder);
}
}
}
}