/*
* Copyright (c) 2015 ThanksMister LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.thanksmister.btcblue.db;
import android.database.Cursor;
import com.squareup.sqlbrite.SqlBrite;
import com.thanksmister.btcblue.data.api.model.Exchange;
import java.util.HashMap;
import java.util.List;
import javax.inject.Inject;
import rx.Observable;
public class DbManager
{
private SqlBrite db;
@Inject
public DbManager(SqlBrite db)
{
this.db = db;
}
/**
* Resets Db manager and clear all preferences
*/
public void clearDbManager()
{
db.delete(ExchangeItem.TABLE, null);
}
public Observable<List<Exchange>> exchangeQuery()
{
return db.createQuery(ExchangeItem.TABLE, ExchangeItem.QUERY)
.map(ExchangeItem.MAP);
}
public Observable<Exchange> exchangeQuery(String displayName)
{
return db.createQuery(ExchangeItem.TABLE, ExchangeItem.QUERY_ITEM_DISPLAY_NAME, displayName)
.map(ExchangeItem.MAP_SINGLE);
}
public void updateExchanges(List<Exchange> exchanges)
{
HashMap<String, Exchange> entryMap = new HashMap<String, Exchange>();
for (Exchange item : exchanges) {
entryMap.put(item.getDisplay_name(), item);
}
db.beginTransaction();
// Get list of all items
Cursor cursor = db.query(ExchangeItem.QUERY);
try {
while (cursor.moveToNext()) {
long id = Db.getLong(cursor, ExchangeItem.ID);
String name = Db.getString(cursor, ExchangeItem.DISPLAY_NAME);
Exchange match = entryMap.get(name);
if (match != null) {
// Entry exists. Remove from entry map to prevent insert later. Do not update
entryMap.remove(name);
db.update(ExchangeItem.TABLE, ExchangeItem.createBuilder(match).build(), ExchangeItem.ID + " = ?", String.valueOf(id));
} else {
// Entry doesn't exist. Remove it from the database.
db.delete(ExchangeItem.TABLE, ExchangeItem.ID + " = ?", String.valueOf(id));
}
}
// Add new items
for (Exchange item : entryMap.values()) {
db.insert(ExchangeItem.TABLE, ExchangeItem.createBuilder(item).build());
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
cursor.close();
}
}
public void updateExchange(final Exchange exchange)
{
db.beginTransaction();
Cursor cursor = db.query(ExchangeItem.QUERY);
try {
if (cursor.getCount() > 0) {
cursor.moveToFirst();
long id = Db.getLong(cursor, ExchangeItem.ID);
db.update(ExchangeItem.TABLE, ExchangeItem.createBuilder(exchange).build(), ExchangeItem.ID + " = ?", String.valueOf(id));
} else {
db.insert(ExchangeItem.TABLE, ExchangeItem.createBuilder(exchange).build());
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
cursor.close();
}
}
}