package com.ckt.shrimp.controller;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.widget.Toast;
import com.ckt.shrimp.database.InfoContents;
import com.ckt.shrimp.utils.*;
import com.ckt.shrimp.wosaosao.R;
/**
* Created by ckt on 09/03/15.
*/
public class BookController {
private static final String TAG = "BookController";
private Context mContext;
private ContentResolver resolver;
private static BookController sInstance;
final private SaoGlobal mSaoGlobal;
public static BookController init(SaoGlobal app) {
synchronized (BookController.class) {
if(sInstance == null) {
//throw new IllegalStateException("No BookController here!");
sInstance = new BookController(app);
}else {
log("init() called multiple times! sInstance = " + sInstance);
}
return sInstance;
}
}
public static BookController getInstance() {
if (sInstance == null) {
throw new IllegalStateException("No SaoGlobal here!");
}
return sInstance;
}
private BookController(SaoGlobal app) {
Log.e(this, "BookController constructor!!!");
mSaoGlobal = app;
mContext = app.getContext();
resolver = mContext.getContentResolver();
}
public int addBook(Book book) {
Log.e(this, "add book!!!");
ContentValues values = fillContentValue(book);
//get SQLiteDatabase object, and call the function insert.
try {
if (mSaoGlobal.getInstanceWritableDatabase() != null) {
Log.e(this, "insert the database... ...");
mSaoGlobal.getInstanceWritableDatabase().insert(InfoContents.BOOK_TABLE_NAME, null, values);
}
}catch (Exception exp) {
Log.e(this, "Insert data base Error!"
+"\n exp = " + exp);
mSaoGlobal.getInstanceWritableDatabase().close();
return InfoContents.RETURN_ERROR;
}
return InfoContents.RETURN_OK;
}
public boolean lendingBook(String isbn,ContentValues value){
log("lendingBook==> isbn = " + isbn + ", value = " + value);
if ((!value.containsKey("borrower_id")) || (!value.containsKey("borrower_email")) || (!value.containsKey("borrower")) || (!value.containsKey("borrowing_date"))){
Toast.makeText(mContext,mContext.getResources().getString(R.string.notice_borrow_success),Toast.LENGTH_SHORT).show();
return false;
}
log("lendingBook==> isBookBorrowed() : " + isBookBorrowed(isbn) );
if (isBookBorrowed(isbn)){
return false;
}else {
//resolver.update(BookUtil.BOOK_URI,value,null,null);
int flag = updateBook(value);
log("lendingBook==> flag: " + flag );
if (flag == -1){
return false;
}
return true;
}
}
public boolean isBookBorrowed(String isbn){
Cursor c = mSaoGlobal.getInstanceBaseHelper().getReadableDatabase().rawQuery(
"select * from book where isbn = " + isbn + " and borrower_id !=null", null);
return (c != null && c.getCount() != 0);
}
public boolean removeBookById(String bookID){
resolver.delete(BookUtil.BOOK_URI,"'book_id= ?",new String[]{bookID});
return false;
}
public int updateBook(ContentValues v){
return resolver.update(BookUtil.BOOK_URI,v,null,null);
}
public Cursor queryBook(String bookId) {
return resolver.query(BookUtil.BOOK_URI,null,"book_id = ?",new String[]{bookId},null);
}
public Cursor queryAllBorrow() {
if(mSaoGlobal.getInstanceBaseHelper() != null) {
return mSaoGlobal.getInstanceBaseHelper().getReadableDatabase().rawQuery(
"select book.*,staff.* from book,staff "
+ " where book.staff_id=staff.staff_id", null);
}
return null;
}
public Cursor queryBorrowByBookId(String bookId) {
if (resolver == null){
return null;
}
return resolver.query(BookUtil.BOOK_URI,null,"borrow_id != null",null,null);
}
private ContentValues fillContentValue(Book book) {
ContentValues values = new ContentValues();
//book basic info
values.put(InfoContents.BOOK_ID, book.getId());
values.put(InfoContents.BOOK_TITLE, book.getTitle());
values.put(InfoContents.BOOK_SUBTITLE, book.getSubTitle());
values.put(InfoContents.BOOK_AUTHOR, book.getAuthor());
values.put(InfoContents.BOOK_PUBLISHER, book.getPublisher());
values.put(InfoContents.BOOK_PUBLISHDATE, book.getPublishDate());
values.put(InfoContents.BOOK_ISBN, book.getISBN());
values.put(InfoContents.BOOK_PRICE, book.getPrice());
//for wiki, category info
values.put(InfoContents.BOOK_CATEGORY, book.getBooKCategory());
values.put(InfoContents.BOOK_CATEGORY_ID, book.getBookCategoryId());
values.put(InfoContents.BOOK_BOUGHT_TIME, book.getBookBoughtDate());
values.put(InfoContents.BOOK_APPLICANT_ID, book.getBookBoughtStaffId());
values.put(InfoContents.BOOK_APPLICANT_NAME, book.getBookApplicantName());
values.put(InfoContents.BOOK_APPLICANT_EMAIL, book.getBookBoughtStaffEmail());
values.put(InfoContents.BOOK_APPLICANT_DEPARTMENT, book.getBookApplicantDep());
values.put(InfoContents.BOOK_ACTUAL_PRICE_, book.getBookActualPrice());
//borrower info
values.put(InfoContents.BOOK_BORROWER_ID, book.getBookBorrowerId());
values.put(InfoContents.BOOK_BORROWER_NAME, book.getBookBorrower());
values.put(InfoContents.BOOK_BORROWER_EMAIL, book.getBookBorrowerEmail());
values.put(InfoContents.BOOK_BORROWING_DEP, book.getBookBorrowerDep());
values.put(InfoContents.BOOK_BORROWING_DATE, book.getBookBoughtDate());
//other info of book
values.put(InfoContents.BOOK_PAGE, book.getPage());
values.put(InfoContents.BOOK_DOUBAN_RATE, book.getRate());
values.put(InfoContents.BOOK_DOUBAN_TAG, book.getTag());
//bitmap, should save the binary, not Bitmap object. later add!!
//values.put(InfoContents.BOOK_BITMAP, book.getBitmap());
//return values
return values;
}
public Cursor queryBorrowByBookISDN(String isbn) {
if(mSaoGlobal.getInstanceBaseHelper() != null) {
Cursor c = mSaoGlobal.getInstanceBaseHelper().getReadableDatabase().rawQuery(
"select book.* from book "
+ " where book.isbn= ?", new String[]{isbn});
if (c != null && c.getCount() != 0) {
return c;
}
};
return null;
}
public static void log(String str) {
Log.e(TAG, str);
}
}