package me.evis.mobile.noodle.db;
import java.util.ArrayList;
import java.util.List;
import me.evis.mobile.noodle.product.Product;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class ProductDao {
protected static final String TABLE = "user_product";
public static Product getById(Context context, long id) {
Product record = null;
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(TABLE, null, "_id = ?", new String[] {String.valueOf(id)}, null, null, null, "1");
if (cursor.moveToFirst()) {
record = fromCursor(context, cursor);
}
cursor.close();
db.close();
return record;
}
public static Product getByProductId(Context context, String productId) {
Product record = null;
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(TABLE, null, "productId = ?", new String[] {productId}, null, null, null, "1");
if (cursor.moveToFirst()) {
record = fromCursor(context, cursor);
}
cursor.close();
db.close();
return record;
}
public static Product getLatest(Context context) {
Product record = null;
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(TABLE, null, null, null, null, null, "lastSelectedOn DESC", "1");
if (cursor.moveToNext()) {
record = fromCursor(context, cursor);
}
cursor.close();
db.close();
return record;
}
public static List<Product> listLatest10(Context context) {
List<Product> records = new ArrayList<Product>();
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(TABLE, null, null, null, null, null, "lastSelectedOn DESC", "10");
while (cursor.moveToNext()) {
records.add(fromCursor(context, cursor));
}
cursor.close();
db.close();
return records;
}
public static long insert(Context context, Product record) {
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
long id = db.insert(TABLE, null, getValues(record, true));
db.close();
return id;
}
public static boolean update(Context context, Product record) {
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
int num = db.update(TABLE, getValues(record, false), "productId = ?", new String[] {record.getProductId()});
db.close();
return 1 == num;
}
public static boolean insertOrUpdate(Context context, Product record) {
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
boolean result = false;
boolean isCreate = true;
Cursor cursor = db.query(TABLE, null, "productId = ?", new String[] {record.getProductId()}, null, null, null, "1");
if (cursor.moveToNext()) {
isCreate = false;
}
cursor.close();
if (isCreate) {
long id = db.insert(TABLE, null, getValues(record, true));
if (id >= 0) {
result = true;
}
} else {
int num = db.update(TABLE, getValues(record, false), "productId = ?", new String[] {record.getProductId()});
if (num > 0) {
result = true;
}
}
db.close();
return result;
}
public static boolean markSelectedByProductId(Context context, String productId) {
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("lastSelectedOn", System.currentTimeMillis());
int num = db.update(TABLE, values, "productId = ?", new String[] {productId});
db.close();
return 1 == num;
}
public static boolean markSelectedById(Context context, long id) {
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("lastSelectedOn", System.currentTimeMillis());
int num = db.update(TABLE, values, "_id = ?", new String[] {String.valueOf(id)});
db.close();
return 1 == num;
}
public static boolean deleteByProductId(Context context, String productId) {
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
int num = db.delete(TABLE, "productId = ?", new String[] {productId});
db.close();
return 1 == num;
}
private static Product fromCursor(Context context, Cursor cursor) {
Product record = new Product();
record.setId(cursor.getLong(cursor.getColumnIndex("_id")));
record.setProductId(cursor.getString(cursor.getColumnIndex("productId")));
record.setName(cursor.getString(cursor.getColumnIndex("name")));
record.setBrand(cursor.getString(cursor.getColumnIndex("brand")));
record.setManufacturer(cursor.getString(cursor.getColumnIndex("manufacturer")));
record.setDescription(cursor.getString(cursor.getColumnIndex("description")));
record.setImageUrl(cursor.getString(cursor.getColumnIndex("imageUrl")));
record.setBuyUrl(cursor.getString(cursor.getColumnIndex("buyUrl")));
return record;
}
private static ContentValues getValues(Product record, boolean isNew) {
ContentValues values = new ContentValues();
values.put("productId", record.getProductId());
values.put("name", record.getName());
values.put("brand", record.getBrand());
values.put("manufacturer", record.getManufacturer());
values.put("description", record.getDescription());
values.put("imageUrl", record.getImageUrl());
values.put("buyUrl", record.getBuyUrl());
values.put("lastSelectedOn", System.currentTimeMillis());
if (isNew) {
values.put("createdOn", System.currentTimeMillis());
}
return values;
}
}