package com.nilhcem.bblfr.model.baggers.dao;
import android.database.sqlite.SQLiteDatabase;
import com.nilhcem.bblfr.model.baggers.Bagger;
import com.nilhcem.bblfr.model.baggers.BaggerCity;
import com.nilhcem.bblfr.model.baggers.BaggersData;
import com.nilhcem.bblfr.model.baggers.City;
import com.nilhcem.bblfr.model.baggers.Contact;
import com.nilhcem.bblfr.model.baggers.Session;
import com.nilhcem.bblfr.model.baggers.SessionTag;
import com.nilhcem.bblfr.model.baggers.Tag;
import com.nilhcem.bblfr.model.baggers.Website;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import ollie.Ollie;
public class JsonToDatabaseDao extends com.nilhcem.bblfr.model.JsonToDatabaseDao<BaggersData> {
@Inject
public JsonToDatabaseDao() {
}
@Override
public void saveJsonToDatabase(BaggersData data) {
SQLiteDatabase database = Ollie.getDatabase();
database.beginTransaction();
try {
deleteExistingData(database);
saveCities(data.cities);
Map<String, Tag> tagsMap = saveTags(data.speakers);
saveBaggers(data.speakers, data.cities, tagsMap);
database.setTransactionSuccessful();
} finally {
database.endTransaction();
}
}
@Override
public void deleteExistingData(SQLiteDatabase database) {
database.delete("baggers_cities", null, null);
database.delete("sessions_tags", null, null);
database.delete("sessions", null, null);
database.delete("websites", null, null);
database.delete("contacts", null, null);
database.delete("baggers", null, null);
database.delete("tags", null, null);
database.delete("cities", null, null);
}
private void saveCities(Map<String, City> cities) {
for (Map.Entry<String, City> entry : cities.entrySet()) {
entry.getValue().save();
}
}
private Map<String, Tag> saveTags(List<Bagger> baggers) {
Map<String, Tag> map = new HashMap<>();
for (Bagger bagger : baggers) {
for (Session session : bagger.sessions) {
List<String> tagNames = session.tags;
if (tagNames != null) {
for (String tagName : tagNames) {
Tag tag = map.get(tagName);
if (tag == null) {
tag = new Tag(tagName);
tag.save();
map.put(tagName, tag);
}
}
}
}
}
return map;
}
private void saveBaggers(List<Bagger> baggers, Map<String, City> citiesMap, Map<String, Tag> tagsMap) {
for (Bagger bagger : baggers) {
bagger.save();
saveBaggerWebsites(bagger, bagger.websites);
saveBaggerSessions(bagger, bagger.sessions);
saveBaggerCities(bagger, bagger.cities, citiesMap);
saveBaggerContacts(bagger, bagger.contacts);
saveSessionTags(bagger.sessions, tagsMap);
}
}
private void saveBaggerWebsites(Bagger bagger, List<Website> websites) {
if (websites != null) {
for (Website website : websites) {
website.bagger = bagger;
website.save();
}
}
}
private void saveBaggerContacts(Bagger bagger, Contact contacts) {
if (contacts != null) {
contacts.bagger = bagger;
contacts.save();
}
}
private void saveBaggerSessions(Bagger bagger, List<Session> sessions) {
if (sessions != null) {
for (Session session : sessions) {
session.bagger = bagger;
session.save();
}
}
}
private void saveBaggerCities(Bagger bagger, List<String> cities, Map<String, City> citiesMap) {
if (cities != null) {
for (String cityName : cities) {
City city = citiesMap.get(cityName);
if (city != null) {
BaggerCity bc = new BaggerCity(bagger, city);
bc.save();
}
}
}
}
private void saveSessionTags(List<Session> sessions, Map<String, Tag> tagsMap) {
for (Session session : sessions) {
List<String> tags = session.tags;
if (tags != null) {
for (String tagName : tags) {
Tag tag = tagsMap.get(tagName);
if (tag != null) {
SessionTag st = new SessionTag(session, tag);
st.save();
}
}
}
}
}
}