/** * @file ERSqliteProxy.java * * @revision: none * * @version 0.0.01 * @author: Zenki (zhajun), zenki2001cn@163.com * @date: 2011-7-18 下午05:17:42 */ package com.easyview.ebook.reader.engine.core; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.util.Log; import com.easyview.ebook.reader.engine.core.IDatabaseService; import com.easyview.ebook.reader.engine.model.Book; import com.easyview.ebook.reader.engine.model.BookEmphasisInfo; import com.easyview.ebook.reader.engine.model.BookMarkInfo; import com.easyview.ebook.reader.engine.model.BookEmphasisInfo.BookEmphasis; import com.easyview.ebook.reader.engine.model.BookMarkInfo.Bookmark; import com.easyview.ebook.reader.engine.util.Logger; import com.easyview.ebook.reader.engine.util.provider.BookColumns; import com.easyview.ebook.reader.engine.util.provider.BookEmphasisColumns; import com.easyview.ebook.reader.engine.util.provider.BookmarkColumns; import com.easyview.ebook.reader.engine.util.provider.ERSqliteProvider; import com.easyview.ebook.reader.engine.util.provider.ERUris; /** * The Class ERSqliteProxy. */ public class ERSqliteProxy implements IDatabaseService { /** The Constant TAG. */ static private final String TAG = "ERSqliteProxy"; /** The m context. */ private Context mContext; /** 所有書籍信息列的字段標識列表,為String[]類型. */ static public String ALL_PROJECTION_OF_BOOKINFO[] = new String[] { BookColumns.FILE_PATH, BookColumns.FILE_NAME, BookColumns.FILE_TYPE, BookColumns.LAST_LOCATION, BookColumns.LAST_PAGE_NUM, BookColumns.TOTAL_PAGE_NUM, BookColumns.LAST_ACCESS_TIME, BookColumns.META_TITLE, BookColumns.META_AUTHOR, BookColumns.META_PUBLISHER, BookColumns.META_ENCODING, BookColumns.META_LANGUAGE, BookColumns.USER_NAME, BookColumns.PASSWORD, BookColumns.VIEW_WIDTH, BookColumns.VIEW_HEIGHT, BookColumns.FONT_LEVEL, BookColumns.FILE_SIZE }; /** 所有書簽信息列的字段標識列表,為String[]類型. */ static public String ALL_PROJECTION_OF_BOOKMARK[] = new String[] { BookmarkColumns.BOOK_ID, BookmarkColumns.LOCATION, BookmarkColumns.CREATE_TIME, BookmarkColumns.PAGE_NUM, BookmarkColumns.SUMMARY }; /** 所有高亮信息列的字段標識列表,為String[]類型. */ static public String ALL_PROJECTION_OF_BOOKEMPHASIS[] = new String[] { BookEmphasisColumns.BOOK_ID, BookEmphasisColumns.COLOR, BookEmphasisColumns.START_CURSOR, BookEmphasisColumns.END_CURSOR, BookEmphasisColumns.START_X, BookEmphasisColumns.START_Y, BookEmphasisColumns.END_X, BookEmphasisColumns.END_Y, BookEmphasisColumns.LOCATION, BookEmphasisColumns.CREATE_TIME, BookEmphasisColumns.SUMMARY, BookEmphasisColumns.FONT_LEVEL }; /** * Instantiates a new eR sqlite request. * * @param context * the context */ protected ERSqliteProxy(Context context) { mContext = context; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#insertBookInfo( * com.easyview.ebook.reader.engine.model.Book) */ @Override public boolean addBook(Book book) { if (!canWork()) { return false; } Cursor c = mContext.getContentResolver().query(ERUris.BOOK_CONTENT_URI, new String[] { BookColumns.FILE_PATH }, BookColumns.FILE_PATH + "=?", new String[] { book.getBookPath() }, null); if ((c != null) && (c.getCount() > 0)) { c.close(); return false; } if (c != null) { c.close(); } try { ContentValues values = new ContentValues(); values.put(BookColumns.FILE_PATH, book.getBookPath()); values.put(BookColumns.FILE_NAME, book.getBookName()); values.put(BookColumns.FILE_TYPE, book.getBookType()); values.put(BookColumns.LAST_LOCATION, book.getLastLocation()); values.put(BookColumns.LAST_PAGE_NUM, book.getLastPageNumber()); values.put(BookColumns.TOTAL_PAGE_NUM, book.getTotalPageNumber()); values.put(BookColumns.LAST_ACCESS_TIME, book.getLastAccessTime()); values.put(BookColumns.META_TITLE, book.getTitle()); values.put(BookColumns.META_AUTHOR, book.getAuthor()); values.put(BookColumns.META_PUBLISHER, book.getPublisher()); values.put(BookColumns.META_ENCODING, book.getEncoding()); values.put(BookColumns.META_LANGUAGE, book.getLanguage()); values.put(BookColumns.USER_NAME, book.getUserName()); values.put(BookColumns.PASSWORD, book.getPassword()); values.put(BookColumns.VIEW_WIDTH, book.getViewWidth()); values.put(BookColumns.VIEW_HEIGHT, book.getViewHeight()); values.put(BookColumns.FONT_LEVEL, book.getFontLevel()); values.put(BookColumns.FILE_SIZE, book.getBookSize()); Uri uri = mContext.getContentResolver().insert( ERUris.BOOK_CONTENT_URI, values); } catch (Exception e) { Logger.eLog(TAG, "insertBookInfo error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#addBook(java.lang * .String) */ @Override public boolean addBook(String filePath) { Book book = new Book(filePath); return addBook(book); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#addBook(java.lang * .String[]) */ @Override public boolean addBook(String[] filePath) { if (!canWork()) { return false; } Book book; ContentValues value; Cursor c = null; int len = filePath.length; LinkedList<ContentValues> valuesList = new LinkedList<ContentValues>(); for (int i = 0; i < len; i++) { c = mContext.getContentResolver().query(ERUris.BOOK_CONTENT_URI, new String[] { BookColumns.FILE_PATH }, BookColumns.FILE_PATH + "=?", new String[] { filePath[i] }, null); if ((c != null) && (c.getCount() > 0)) { c.close(); continue; } if (c != null) { c.close(); } book = new Book(filePath[i]); value = new ContentValues(); value.put(BookColumns.FILE_PATH, book.getBookPath()); value.put(BookColumns.FILE_NAME, book.getBookName()); value.put(BookColumns.FILE_TYPE, book.getBookType()); value.put(BookColumns.LAST_LOCATION, book.getLastLocation()); value.put(BookColumns.LAST_PAGE_NUM, book.getLastPageNumber()); value.put(BookColumns.TOTAL_PAGE_NUM, book.getTotalPageNumber()); value.put(BookColumns.LAST_ACCESS_TIME, book.getLastAccessTime()); value.put(BookColumns.META_TITLE, book.getTitle()); value.put(BookColumns.META_AUTHOR, book.getAuthor()); value.put(BookColumns.META_PUBLISHER, book.getPublisher()); value.put(BookColumns.META_ENCODING, book.getEncoding()); value.put(BookColumns.META_LANGUAGE, book.getLanguage()); value.put(BookColumns.USER_NAME, book.getUserName()); value.put(BookColumns.PASSWORD, book.getPassword()); value.put(BookColumns.VIEW_WIDTH, book.getViewWidth()); value.put(BookColumns.VIEW_HEIGHT, book.getViewHeight()); value.put(BookColumns.FONT_LEVEL, book.getFontLevel()); value.put(BookColumns.FILE_SIZE, book.getBookSize()); valuesList.add(value); } try { if (valuesList.isEmpty()) { Logger.eLog(TAG, "addBooks is empty"); return false; } ContentValues[] values = valuesList.toArray(new ContentValues[] {}); int num = mContext.getContentResolver().bulkInsert( ERUris.BOOK_CONTENT_URI, values); if (num <= 0) { return false; } } catch (Exception e) { Logger.eLog(TAG, "bulkInsert error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#deleteBookInfo( * com.easyview.ebook.reader.engine.model.Book) */ @Override public boolean deleteBook(Book book) { if (!canWork()) { return false; } int id = book.getBookId(); try { ContentResolver resolver = mContext.getContentResolver(); resolver.delete(ERUris.BOOK_CONTENT_URI, BookColumns._ID + "=?", new String[] { String.valueOf(id) }); } catch (Exception e) { Logger.eLog(TAG, "deleteBookInfo error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#deleteAllBook() */ @Override public boolean deleteAllBooks() { if (!canWork()) { return false; } try { String sqlDelBook = "DELETE FROM " + IDatabaseService.BOOKINFO_TABLE_NAME; String sqlDelBookmark = "DELETE FROM " + IDatabaseService.BOOKMARK_TABLE_NAME; String sqlDelBookEmphasis = "DELETE FROM " + IDatabaseService.BOOKEMPHASIS_TABLE_NAME; String sqlResetBookSeq = "DELETE FROM sqlite_sequence WHERE name='" + IDatabaseService.BOOKINFO_TABLE_NAME + "'"; String sqlResetBookmarkSeq = "DELETE FROM sqlite_sequence WHERE name='" + IDatabaseService.BOOKMARK_TABLE_NAME + "'"; String sqlResetBookEmphasisSeq = "DELETE FROM sqlite_sequence WHERE name='" + IDatabaseService.BOOKEMPHASIS_TABLE_NAME + "'"; executeSQL(sqlDelBook); executeSQL(sqlDelBookmark); executeSQL(sqlDelBookEmphasis); executeSQL(sqlResetBookSeq); executeSQL(sqlResetBookmarkSeq); executeSQL(sqlResetBookEmphasisSeq); } catch (Exception e) { Logger.eLog(TAG, "deleteAllBook error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#updateBookInfo( * com.easyview.ebook.reader.engine.model.Book) */ @Override public boolean updateBook(Book book) { if (!canWork()) { return false; } int id = book.getBookId(); try { ContentValues values = new ContentValues(); values.put(BookColumns.FILE_PATH, book.getBookPath()); values.put(BookColumns.FILE_NAME, book.getBookName()); values.put(BookColumns.FILE_TYPE, book.getBookType()); values.put(BookColumns.LAST_LOCATION, book.getLastLocation()); values.put(BookColumns.LAST_PAGE_NUM, book.getLastPageNumber()); values.put(BookColumns.TOTAL_PAGE_NUM, book.getTotalPageNumber()); values.put(BookColumns.LAST_ACCESS_TIME, book.getLastAccessTime()); values.put(BookColumns.META_TITLE, book.getTitle()); values.put(BookColumns.META_AUTHOR, book.getAuthor()); values.put(BookColumns.META_PUBLISHER, book.getPublisher()); values.put(BookColumns.META_ENCODING, book.getEncoding()); values.put(BookColumns.META_LANGUAGE, book.getLanguage()); values.put(BookColumns.USER_NAME, book.getUserName()); values.put(BookColumns.PASSWORD, book.getPassword()); values.put(BookColumns.VIEW_WIDTH, book.getViewWidth()); values.put(BookColumns.VIEW_HEIGHT, book.getViewHeight()); values.put(BookColumns.FONT_LEVEL, book.getFontLevel()); values.put(BookColumns.FILE_SIZE, book.getBookSize()); int rows = mContext.getContentResolver().update( ERUris.BOOK_CONTENT_URI, values, BookColumns._ID + "=?", new String[] { String.valueOf(id) }); if (rows <= 0) { return false; } } catch (Exception e) { Logger.eLog(TAG, "updateBookInfo error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#queryBookInfo(com * .easyview.ebook.reader.engine.model.Book) */ @Override public boolean queryBook(Book book) { if (!canWork()) { return false; } int id = book.getBookId(); Cursor c = mContext.getContentResolver().query(ERUris.BOOK_CONTENT_URI, ALL_PROJECTION_OF_BOOKINFO, BookColumns._ID + "=" + id, null, BookColumns.DEFAULT_SORT); if (null == c) { Logger.eLog(TAG, "queryBookInfo cursor == null"); return false; } if (c.getCount() <= 0) { c.close(); return false; } if (c.moveToFirst()) { String filePath = c.getString(0); String fileName = c.getString(1); String fileType = c.getString(2); String lastLocation = c.getString(3); int lastPageNum = c.getInt(4); int totalPageNum = c.getInt(5); long lastAccessTime = c.getLong(6); String title = c.getString(7); String author = c.getString(8); String publisher = c.getString(9); String encoding = c.getString(10); String language = c.getString(11); String username = c.getString(12); String password = c.getString(13); int viewWidth = c.getInt(14); int viewHeight = c.getInt(15); int fontLevel = c.getInt(16); long fileSize = c.getInt(17); // debug info, can be delete // Log.d(TAG, "path: " + filePath + " fileName:" + fileName // + " type:" + fileType + " location:" + lastLocation // + " lastPage:" + lastPageNum + " totalpage:" // + totalPageNum + " lastTime:" + lastAccessTime + " title:" // + title + " author: " + author + " publisher: " + publisher // + " encoding: " + encoding + " language: " + language // + " username: " + username + " password: " + password // + " viewWidth: " + viewWidth + " viewHeight: " + viewHeight); book.setBookPath(filePath); book.setBookName(fileName); book.setBookType(fileName); book.setFontLevel(fontLevel); book.setUserName(username); book.setPassword(password); // book.setViewWidth(viewWidth); // book.setViewHeight(viewHeight); book.setLastLocation(lastLocation); book.setLastPageNumber(lastPageNum); book.setTotalPageNumber(totalPageNum); book.setLastAccessTime(lastAccessTime); book.setBookSize(fileSize); Book.MetaData data = book.getMetaData(); data.setValue(Book.MetaData.META_AUTHOR, author); data.setValue(Book.MetaData.META_TITLE, title); data.setValue(Book.MetaData.META_PUBLISHER, publisher); data.setValue(Book.MetaData.META_ENCODING, encoding); data.setValue(Book.MetaData.META_LANGUAGE, language); if (c != null) { c.close(); } } else { return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#queryBook(java. * lang.String) */ @Override public int queryBook(String filePath) { if (!canWork()) { return -1; } int bookId = -1; Cursor c = mContext.getContentResolver().query(ERUris.BOOK_CONTENT_URI, new String[] { BookColumns._ID }, BookColumns.FILE_PATH + "='" + filePath + "'", null, null); if (null == c) { Logger.eLog(TAG, "queryBookInfo cursor == null"); return -1; } if (c.getCount() <= 0) { c.close(); return -1; } c.moveToFirst(); bookId = c.getInt(0); if (c != null) { c.close(); } return bookId; } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IDatabaseService#queryBooksId() */ @Override public int[] queryBooksId() { if (!canWork()) { return null; } Cursor c = mContext.getContentResolver().query(ERUris.BOOK_CONTENT_URI, new String[] { BookColumns._ID }, null, null, BookColumns.DEFAULT_SORT); if (null == c) { Logger.eLog(TAG, "queryBook cursor == null"); return null; } int count = c.getCount(); if (count <= 0) { c.close(); return null; } int id; int[] bookIds = new int[count]; int i = 0; c.moveToFirst(); while (!c.isAfterLast()) { id = c.getInt(0); bookIds[i] = id; c.moveToNext(); i++; } if (c != null) { c.close(); } return bookIds; } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IDatabaseService#queryBook() */ @Override public String[] queryBooksPath() { LinkedList<String> bookList = new LinkedList<String>(); if (!canWork()) { return null; } Cursor c = mContext.getContentResolver().query(ERUris.BOOK_CONTENT_URI, new String[] { BookColumns.FILE_PATH }, null, null, BookColumns.DEFAULT_SORT); if (null == c) { Logger.eLog(TAG, "queryBook cursor == null"); return null; } if (c.getCount() <= 0) { c.close(); return null; } String filePath; c.moveToFirst(); while (!c.isAfterLast()) { filePath = c.getString(0); bookList.add(filePath); c.moveToNext(); } if (c != null) { c.close(); } return bookList.toArray(new String[] {}); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#insertBookmark( * com.easyview.ebook.reader.engine.model.BookMarkInfo.Bookmark) */ @Override public boolean addBookmark(Bookmark bookmark) { if (!canWork()) { return false; } int id = bookmark.getBookId(); String location = bookmark.getLocation(); long createTime = bookmark.getTime(); int pageNum = bookmark.getPageNum(); String summary = bookmark.getSummary(); Cursor c = mContext.getContentResolver().query( ERUris.BOOKMARK_CONTENT_URI, ALL_PROJECTION_OF_BOOKMARK, BookmarkColumns.BOOK_ID + "=? and " + BookmarkColumns.LOCATION + "=?", new String[] { String.valueOf(id), location }, null); if (c.getCount() > 0) { c.close(); return false; } if (c != null) { c.close(); } try { ContentValues values = new ContentValues(); values.put(BookmarkColumns.BOOK_ID, id); values.put(BookmarkColumns.LOCATION, location); values.put(BookmarkColumns.CREATE_TIME, createTime); values.put(BookmarkColumns.PAGE_NUM, pageNum); values.put(BookmarkColumns.SUMMARY, summary); Uri uri = mContext.getContentResolver().insert( ERUris.BOOKMARK_CONTENT_URI, values); } catch (Exception e) { Logger.eLog(TAG, "insertBookInfo error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#deleteBookmark( * com.easyview.ebook.reader.engine.model.BookMarkInfo.Bookmark) */ @Override public boolean deleteBookmark(Bookmark bookmark) { if (!canWork()) { return false; } int id = bookmark.getBookId(); String location = bookmark.getLocation(); try { ContentResolver resolver = mContext.getContentResolver(); resolver.delete(ERUris.BOOKMARK_CONTENT_URI, BookmarkColumns.BOOK_ID + "=? and " + BookmarkColumns.LOCATION + "=?", new String[] { String.valueOf(id), location }); } catch (Exception e) { Logger.eLog(TAG, "deleteBookmark error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#deleteBookmark( * java.lang.String) */ @Override public boolean deleteBookmark(Book book, String location) { if (!canWork()) { return false; } int id = book.getBookId(); try { ContentResolver resolver = mContext.getContentResolver(); resolver.delete(ERUris.BOOKMARK_CONTENT_URI, BookmarkColumns.BOOK_ID + "=? and " + BookmarkColumns.LOCATION + "=?", new String[] { String.valueOf(id), location }); } catch (Exception e) { Logger.eLog(TAG, "deleteBookmarkByLocation error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#queryBookmark(com * .easyview.ebook.reader.engine.model.Book, java.lang.String) */ @Override public boolean queryBookmark(Book book, String location) { if (!canWork()) { return false; } int id = book.getBookId(); Cursor c = mContext.getContentResolver().query( ERUris.BOOKMARK_CONTENT_URI, ALL_PROJECTION_OF_BOOKMARK, BookmarkColumns.BOOK_ID + "=? and " + BookmarkColumns.LOCATION + "=?", new String[] { String.valueOf(id), location }, null); if (null == c) { Logger.eLog(TAG, "queryAllBookmarks cursor == null"); return false; } if ((c.getCount() <= 0) || !c.moveToFirst()) { c.close(); return false; } while (!c.isAfterLast()) { int bookId = c.getInt(0); String loc = c.getString(1); int createTime = c.getInt(2); int pageNum = c.getInt(3); String summary = c.getString(4); // debug info, can be delete // Log.d(TAG, "c.getcount = " + c.getCount() + " bookid: " + bookId // + " location:" + location // + " createTime:" + createTime + " pageNum:" + pageNum // + " summary:" + summary); BookMarkInfo.Bookmark bookmark = book.makeBookmark(); bookmark.setBookId(bookId); bookmark.setLocation(loc); bookmark.setTime(createTime); bookmark.setPageNum(pageNum); bookmark.setSummary(summary); book.getBookMarkCursor().addBookmark(bookmark); c.moveToNext(); } if (c != null) { c.close(); } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#updateBookmark( * com.easyview.ebook.reader.engine.model.BookMarkInfo.Bookmark) */ @Override public boolean updateBookmark(Bookmark bookmark) { if (!canWork()) { return false; } int id = bookmark.getBookId(); String location = bookmark.getLocation(); try { ContentValues values = new ContentValues(); values.put(BookmarkColumns.BOOK_ID, bookmark.getBookId()); values.put(BookmarkColumns.LOCATION, bookmark.getLocation()); values.put(BookmarkColumns.CREATE_TIME, bookmark.getTime()); values.put(BookmarkColumns.PAGE_NUM, bookmark.getPageNum()); values.put(BookmarkColumns.SUMMARY, bookmark.getSummary()); int rows = mContext.getContentResolver().update( ERUris.BOOKMARK_CONTENT_URI, values, BookmarkColumns.BOOK_ID + "=? and " + BookmarkColumns.LOCATION + "=?", new String[] { String.valueOf(id), location }); if (rows <= 0) { return false; } } catch (Exception e) { Logger.eLog(TAG, "updateBookmark error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#deleteAllBookmark * (com.easyview.ebook.reader.engine.model.Book) */ @Override public boolean deleteAllBookmark(Book book) { if (!canWork()) { return false; } int id = book.getBookId(); try { ContentResolver resolver = mContext.getContentResolver(); resolver.delete(ERUris.BOOKMARK_CONTENT_URI, BookmarkColumns.BOOK_ID + "=?", new String[] { String.valueOf(id) }); } catch (Exception e) { Logger.eLog(TAG, "deleteAllBookmark error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#queryBookmark(com * .easyview.ebook.reader.engine.model.Book) */ @Override public boolean queryAllBookmarks(Book book) { if (!canWork()) { return false; } int id = book.getBookId(); Cursor c = mContext.getContentResolver().query( ERUris.BOOKMARK_CONTENT_URI, ALL_PROJECTION_OF_BOOKMARK, BookmarkColumns.BOOK_ID + "=" + id, null, BookmarkColumns.DEFAULT_SORT); if (null == c) { Logger.eLog(TAG, "queryAllBookmarks cursor == null"); return false; } if ((c.getCount() <= 0) || !c.moveToFirst()) { c.close(); return false; } while (!c.isAfterLast()) { int bookId = c.getInt(0); String location = c.getString(1); int createTime = c.getInt(2); int pageNum = c.getInt(3); String summary = c.getString(4); // debug info, can be delete // Log.d(TAG, "c.getcount = " + c.getCount() + " bookid: " + bookId // + " location:" + location + " createTime:" + createTime // + " pageNum:" + pageNum + " summary:" + summary); BookMarkInfo.Bookmark bookmark = book.makeBookmark(); bookmark.setBookId(bookId); bookmark.setLocation(location); bookmark.setTime(createTime); bookmark.setPageNum(pageNum); bookmark.setSummary(summary); book.getBookMarkCursor().addBookmark(bookmark); c.moveToNext(); } if (c != null) { c.close(); } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#insertBookEmphasis * (com.easyview.ebook.reader.engine.model.BookEmphasisInfo.BookEmphasis) */ @Override public boolean addBookEmphasis(BookEmphasis emphasis) { if (!canWork()) { return false; } int id = emphasis.getBookId(); String start = emphasis.getCourse()[0]; String end = emphasis.getCourse()[1]; try { // 如果有重復的高亮,則不加入數據庫 ContentResolver resolver = mContext.getContentResolver(); Cursor c = resolver.query(ERUris.BOOKEMPHASIS_CONTENT_URI, ALL_PROJECTION_OF_BOOKEMPHASIS, BookEmphasisColumns.BOOK_ID + "=? and " + BookEmphasisColumns.START_CURSOR + "=? and " + BookEmphasisColumns.END_CURSOR + "=?", new String[] { String.valueOf(id), start, end }, null); if (c.getCount() > 0) { c.close(); return false; } if (c != null) { c.close(); } ContentValues values = new ContentValues(); values.put(BookEmphasisColumns.BOOK_ID, id); values.put(BookEmphasisColumns.COLOR, emphasis.getColor()); values.put(BookEmphasisColumns.START_CURSOR, start); values.put(BookEmphasisColumns.END_CURSOR, end); values.put(BookEmphasisColumns.START_X, (int) emphasis.getX1()); values.put(BookEmphasisColumns.START_Y, (int) emphasis.getY1()); values.put(BookEmphasisColumns.END_X, (int) emphasis.getX2()); values.put(BookEmphasisColumns.END_Y, (int) emphasis.getY2()); values.put(BookEmphasisColumns.LOCATION, emphasis.getLocation()); values.put(BookEmphasisColumns.CREATE_TIME, emphasis.getTime()); values.put(BookEmphasisColumns.SUMMARY, emphasis.getSummary()); values.put(BookEmphasisColumns.FONT_LEVEL, emphasis.getFontLevel()); Uri uri = mContext.getContentResolver().insert( ERUris.BOOKEMPHASIS_CONTENT_URI, values); } catch (Exception e) { Logger.eLog(TAG, "insertBookEmphasis error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#deleteBookEmphasis * (com.easyview.ebook.reader.engine.model.BookEmphasisInfo.BookEmphasis) */ @Override public boolean deleteBookEmphasis(BookEmphasis emphasis) { if (!canWork()) { return false; } int id = emphasis.getBookId(); String start = emphasis.getCourse()[0]; String end = emphasis.getCourse()[1]; try { ContentResolver resolver = mContext.getContentResolver(); resolver.delete(ERUris.BOOKEMPHASIS_CONTENT_URI, BookEmphasisColumns.BOOK_ID + "=? and " + BookEmphasisColumns.START_CURSOR + "=? and " + BookEmphasisColumns.END_CURSOR + "=?", new String[] { String.valueOf(id), start, end }); } catch (Exception e) { Logger.eLog(TAG, "deleteBookEmphasis error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#deleteBookEmphasis * (com.easyview.ebook.reader.engine.model.Book, java.lang.String) */ @Override public boolean deleteBookEmphasis(Book book, String location) { if (!canWork()) { return false; } int id = book.getBookId(); try { ContentResolver resolver = mContext.getContentResolver(); resolver.delete(ERUris.BOOKEMPHASIS_CONTENT_URI, BookEmphasisColumns.BOOK_ID + "=? and " + BookEmphasisColumns.LOCATION + "=?", new String[] { String.valueOf(id), location }); } catch (Exception e) { Logger.eLog(TAG, "deleteBookEmphasisByLocation error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#queryBookEmphasis * (com.easyview.ebook.reader.engine.model.Book, java.lang.String) */ @Override public boolean queryBookEmphasis(Book book, String location) { if (!canWork()) { return false; } int id = book.getBookId(); Cursor c = mContext.getContentResolver().query( ERUris.BOOKEMPHASIS_CONTENT_URI, ALL_PROJECTION_OF_BOOKEMPHASIS, BookEmphasisColumns.BOOK_ID + "=? and " + BookEmphasisColumns.LOCATION + "=?", new String[] { String.valueOf(id), location }, null); if (null == c) { Logger.eLog(TAG, "queryAllBookEmphasisByLocation cursor == null"); return false; } if ((c.getCount() <= 0) || !c.moveToFirst()) { c.close(); return false; } while (!c.isAfterLast()) { int bookId = c.getInt(0); int color = c.getInt(1); String startCursor = c.getString(2); String endCursor = c.getString(3); double startX = c.getInt(4); double startY = c.getInt(5); double endX = c.getInt(6); double endY = c.getInt(7); String loc = c.getString(8); int createTime = c.getInt(9); String summary = c.getString(10); int fontLevel = c.getInt(11); // debug info, can be delete // Log.d(TAG, "bookid: " + bookId + " color:" + color // + " startCursor:" + startCursor + " endCursor:" // + endCursor + " startX:" + startX + " startY:" + startY // + " endX:" + endX + " endY:" + endY + " location:" // + location + " createTime:" + createTime + " summary:" // + summary + " fontLevel:" + fontLevel); BookEmphasisInfo.BookEmphasis emphasis = book.makeEmphasis(); emphasis.setBookId(bookId); emphasis.setCourse(startCursor, endCursor); emphasis.setXY(startX, startY, endX, endY); emphasis.setLocation(loc); emphasis.setTime(createTime); emphasis.setSummary(summary); emphasis.setFontLevel(fontLevel); emphasis.setColor(color); book.getBookEmphasisCursor().addEmphasis(emphasis); c.moveToNext(); } if (c != null) { c.close(); } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#updateBookEmphasis * (com.easyview.ebook.reader.engine.model.BookEmphasisInfo.BookEmphasis) */ @Override public boolean updateBookEmphasis(BookEmphasis emphasis) { if (!canWork()) { return false; } int id = emphasis.getBookId(); String start = emphasis.getCourse()[0]; String end = emphasis.getCourse()[1]; try { ContentValues values = new ContentValues(); values.put(BookEmphasisColumns.BOOK_ID, emphasis.getBookId()); values.put(BookEmphasisColumns.COLOR, emphasis.getColor()); values.put(BookEmphasisColumns.START_CURSOR, emphasis.getCourse()[0]); values.put(BookEmphasisColumns.END_CURSOR, emphasis.getCourse()[1]); values.put(BookEmphasisColumns.START_X, emphasis.getX1()); values.put(BookEmphasisColumns.START_Y, emphasis.getY1()); values.put(BookEmphasisColumns.END_X, emphasis.getX2()); values.put(BookEmphasisColumns.END_Y, emphasis.getY2()); values.put(BookEmphasisColumns.LOCATION, emphasis.getLocation()); values.put(BookEmphasisColumns.CREATE_TIME, emphasis.getTime()); values.put(BookEmphasisColumns.SUMMARY, emphasis.getSummary()); values.put(BookEmphasisColumns.FONT_LEVEL, emphasis.getFontLevel()); int rows = mContext.getContentResolver().update( ERUris.BOOKEMPHASIS_CONTENT_URI, values, BookEmphasisColumns.BOOK_ID + "=? and " + BookEmphasisColumns.START_CURSOR + "=? and " + BookEmphasisColumns.END_CURSOR + "=?", new String[] { String.valueOf(id), start, end }); if (rows <= 0) { return false; } } catch (Exception e) { Logger.eLog(TAG, "insertBookEmphasis error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#deleteAllBookEmphasis * (com.easyview.ebook.reader.engine.model.Book) */ @Override public boolean deleteAllBookEmphasis(Book book) { if (!canWork()) { return false; } int id = book.getBookId(); try { ContentResolver resolver = mContext.getContentResolver(); resolver.delete(ERUris.BOOKEMPHASIS_CONTENT_URI, BookEmphasisColumns.BOOK_ID + "=?", new String[] { String.valueOf(id) }); } catch (Exception e) { Logger.eLog(TAG, "deleteAllBookEmphasis error = " + e); return false; } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#queryBookEmphasis * (com.easyview.ebook.reader.engine.model.Book) */ @Override public boolean queryAllBookEmphasis(Book book) { if (!canWork()) { return false; } int id = book.getBookId(); Cursor c = mContext.getContentResolver().query( ERUris.BOOKEMPHASIS_CONTENT_URI, ALL_PROJECTION_OF_BOOKEMPHASIS, BookEmphasisColumns.BOOK_ID + "=" + id, null, BookEmphasisColumns.DEFAULT_SORT); if (null == c) { Logger.eLog(TAG, "queryAllBookEmphasis cursor == null"); return false; } if ((c.getCount() <= 0) || !c.moveToFirst()) { c.close(); return false; } while (!c.isAfterLast()) { int bookId = c.getInt(0); int color = c.getInt(1); String startCursor = c.getString(2); String endCursor = c.getString(3); double startX = c.getInt(4); double startY = c.getInt(5); double endX = c.getInt(6); double endY = c.getInt(7); String location = c.getString(8); int createTime = c.getInt(9); String summary = c.getString(10); int fontLevel = c.getInt(11); // debug info, can be delete // Log.d(TAG, "bookid: " + bookId + " color:" + color // + " startCursor:" + startCursor + " endCursor:" // + endCursor + " startX:" + startX + " startY:" + startY // + " endX:" + endX + " endY:" + endY + " location:" // + location + " createTime:" + createTime + " summary:" // + summary + " fontLevel:" + fontLevel); BookEmphasisInfo.BookEmphasis emphasis = book.makeEmphasis(); emphasis.setBookId(bookId); emphasis.setCourse(startCursor, endCursor); emphasis.setXY(startX, startY, endX, endY); emphasis.setLocation(location); emphasis.setTime(createTime); emphasis.setSummary(summary); emphasis.setFontLevel(fontLevel); emphasis.setColor(color); book.getBookEmphasisCursor().addEmphasis(emphasis); c.moveToNext(); } if (c != null) { c.close(); } return true; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#executeSQL(java * .lang.String) */ @Override public void executeSQL(String sql) { if (!canWork()) { return; } ContentResolver resolver = mContext.getContentResolver(); ERSqliteProvider provider = null; if (resolver != null) { ContentProviderClient client = resolver .acquireContentProviderClient(ERUris.AUTHORITY); if (client != null) { provider = (ERSqliteProvider) client.getLocalContentProvider(); } else { Logger.eLog(TAG, "executeSQL provider == null"); } } else { Logger.eLog(TAG, "executeSQL resolver == null"); } if (provider != null) { provider.executeSQL(sql); } } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#getBookInfoTableName * () */ @Override public String getBookTableName() { return BOOKINFO_TABLE_NAME; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#getBookMarkTableName * () */ @Override public String getBookMarkTableName() { return BOOKMARK_TABLE_NAME; } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IDatabaseService# * getBookEmphasisTableName() */ @Override public String getBookEmphasisTableName() { return BOOKEMPHASIS_TABLE_NAME; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#getDatabaseName() */ @Override public String getDatabaseName() { return DATABASE_NAME; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#checkBookInDb(com * .easyview.ebook.reader.engine.model.Book) */ @Override public boolean checkBookInDb(Book book) { if (!canWork()) { return false; } int id = book.getBookId(); Cursor c = mContext.getContentResolver().query(ERUris.BOOK_CONTENT_URI, ALL_PROJECTION_OF_BOOKINFO, BookColumns._ID + " = " + id, null, BookColumns.DEFAULT_SORT); if (null == c) { Logger.eLog(TAG, "queryBookInfo cursor == null"); return false; } if ((c.getCount() > 0)) { c.close(); return true; } if (c != null) { c.close(); } return false; } /** * Can work. * * @return true, if successful */ private boolean canWork() { if (mContext != null) { return true; } Logger.eLog(TAG, "!canWork mContext == null"); return false; } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IDatabaseService#deleteBook(java * .lang.String) */ @Override public boolean deleteBook(String filePath) { if (!canWork()) { return false; } try { ContentResolver resolver = mContext.getContentResolver(); resolver.delete(ERUris.BOOK_CONTENT_URI, BookColumns.FILE_PATH + "=?", new String[] { filePath }); } catch (Exception e) { Logger.eLog(TAG, "deleteBook error = " + e); return false; } return true; } }