package com.yassirh.digitalocean.data;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.yassirh.digitalocean.model.Domain;
import com.yassirh.digitalocean.model.Record;
public class RecordDao extends SqlDao<Record> {
private DatabaseHelper databaseHelper;
public RecordDao(DatabaseHelper databaseHelper) {
super();
this.databaseHelper = databaseHelper;
}
public Record newInstance(Cursor c) {
Record record = new Record();
Domain domain = new DomainDao(databaseHelper).findByProperty(DomainTable.NAME, c.getString(c.getColumnIndex(RecordTable.DOMAIN_NAME)));
record.setId(c.getLong(c.getColumnIndex(RecordTable.ID)));
record.setName(c.getString(c.getColumnIndex(RecordTable.NAME)));
record.setDomain(domain);
record.setRecordType(c.getString(c.getColumnIndex(RecordTable.RECORD_TYPE)));
record.setData(c.getString(c.getColumnIndex(RecordTable.DATA)));
record.setPort(c.getInt(c.getColumnIndex(RecordTable.PORT)));
record.setPriority(c.getInt(c.getColumnIndex(RecordTable.PRIORITY)));
record.setWeight(c.getInt(c.getColumnIndex(RecordTable.WEIGHT)));
return record;
}
@Override
public DatabaseHelper getDatabaseHelper() {
return databaseHelper;
}
@Override
public TableHelper getTableHelper() {
return new RecordTable();
}
public void createOrUpdate(Record record) {
boolean update = findById(record.getId()) != null;
ContentValues values = new ContentValues();
values.put(RecordTable.ID, record.getId());
values.put(RecordTable.NAME, record.getName());
values.put(RecordTable.DOMAIN_NAME, record.getDomain().getName());
values.put(RecordTable.RECORD_TYPE, record.getRecordType());
values.put(RecordTable.DATA, record.getData());
values.put(RecordTable.PORT, record.getPort());
values.put(RecordTable.PRIORITY, record.getPriority());
values.put(RecordTable.WEIGHT, record.getWeight());
if(update){
db.updateWithOnConflict(getTableHelper().TABLE_NAME,values,DropletTable.ID +"= ?",new String[]{record.getId()+""},SQLiteDatabase.CONFLICT_REPLACE);
}else{
db.insertWithOnConflict(getTableHelper().TABLE_NAME, null, values,SQLiteDatabase.CONFLICT_REPLACE);
}
}
public List<Record> getAllByDomain(String domainName) {
List<Record> records = new ArrayList<>();
Cursor cursor = db.query(getTableHelper().TABLE_NAME,
getTableHelper().getAllColumns(), RecordTable.DOMAIN_NAME + " = '" + domainName + "'", null, null, null, null);
if(cursor.moveToFirst()){
while (!cursor.isAfterLast()) {
Record record = newInstance(cursor);
records.add(record);
cursor.moveToNext();
}
}
cursor.close();
return records;
}
public void deleteAllRecordsByDomain(String domainName) {
db.delete(getTableHelper().TABLE_NAME, RecordTable.DOMAIN_NAME + " = '" + domainName + "'", null);
}
}