package edu.colorado.zeus.message;
import java.util.List;
import java.util.Map;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import edu.colorado.zeus.message.data.ListItem;
import edu.colorado.zeus.message.data.Message;
import edu.colorado.zeus.message.data.Zone;
import edu.colorado.zeus.provider.ZeusDB;
public class DatabaseMessageSaver implements MessageSaver {
public void flushMessages(ContentResolver resolver){
resolver.delete(ZeusDB.Messages.CONTENT_URI, null, null);
}
public void storeMessages(Map<Zone, List<Message>> messages, final ContentResolver resolver) {
for(Zone zone : messages.keySet()) {
for(Message message : messages.get(zone)) {
storeMessage(zone, message, resolver);
}
}
}
public void storeMessage(Zone zone, Message message, ContentResolver resolver) {
Integer zoneId = zone.getId();
if(zoneId == null || zoneId == -1){
zoneId = getZoneId(zone, resolver);
}
final ContentValues messageValue = message.translateTo();
messageValue.put(ZeusDB.Messages.ZONE_ID, zoneId);
if(!messageExists(zoneId, message, resolver))
resolver.insert(ZeusDB.Messages.CONTENT_URI, messageValue);
}
public boolean messageExists(int zoneId, Message message, ContentResolver resolver){
final Cursor messageCursor = resolver.query(ZeusDB.Messages.CONTENT_URI, null, ZeusDB.Messages.ZONE_ID + "= ? AND " + ZeusDB.Messages.SUBJECT + "= ?", new String[]{"" + zoneId, message.getSubject()}, null);
if(messageCursor.next()){
return true;
}
return false;
}
public void flushLists(ContentResolver resolver){
resolver.delete(ZeusDB.Lists.CONTENT_URI, null, null);
}
public void storeList(Map<Zone, List<ListItem>> list, final ContentResolver resolver) {
for(Zone zone : list.keySet()) {
for(ListItem listItem : list.get(zone)) {
storeListItem(zone, listItem, resolver);
}
}
}
public void storeListItem(Zone zone, ListItem listItem, ContentResolver resolver){
Integer zoneId = zone.getId();
if(zoneId == null || zoneId == -1){
zoneId = getZoneId(zone, resolver);
}
final ContentValues listValues = listItem.translateTo();
listValues.put(ZeusDB.Lists.ZONE_ID, zoneId);
if(!listItemExists(zoneId, listItem, resolver))
resolver.insert(ZeusDB.Lists.CONTENT_URI, listValues);
}
public boolean listItemExists(int zoneId, ListItem listItem, ContentResolver resolver){
final Cursor listCursor = resolver.query(ZeusDB.Lists.CONTENT_URI, null, ZeusDB.Lists.ZONE_ID + "= ? AND " + ZeusDB.Lists.TEXT + "= ?", new String[]{"" + zoneId, listItem.getText()}, null);
if(listCursor.next()){
return true;
}
return false;
}
public void flushZones(ContentResolver resolver){
resolver.delete(ZeusDB.Zones.CONTENT_URI, null, null);
}
public void storeZone(Zone zone, ContentResolver resolver) {
final ContentValues zoneValue = zone.translateTo();
if(!zoneExists(zone, resolver))
resolver.insert(ZeusDB.Zones.CONTENT_URI, zoneValue);
}
public boolean zoneExists(Zone zone, ContentResolver resolver){
final Cursor zoneCursor = resolver.query(ZeusDB.Zones.CONTENT_URI, null, ZeusDB.Zones.NAME + "= ?", new String[]{zone.getName()}, null);
if(zoneCursor.next())
return true;
return false;
}
public int getZoneId(Zone zone, ContentResolver resolver){
final Cursor zoneCursor = resolver.query(ZeusDB.Zones.CONTENT_URI, null, ZeusDB.Zones.NAME + "= ?", new String[]{zone.getName()}, null);
if(zoneCursor.next()){
return zoneCursor.getInt(zoneCursor.getColumnIndex(ZeusDB.Zones._ID));
}
return -1;
}
}
|