1 package com.folioreader.model.sqlite;
3 import android.content.ContentValues;
4 import android.database.Cursor;
5 import android.text.TextUtils;
6 import android.util.Log;
8 import com.folioreader.Constants;
9 import com.folioreader.model.HighLight;
10 import com.folioreader.model.HighlightImpl;
12 import java.text.ParseException;
13 import java.text.SimpleDateFormat;
14 import java.util.ArrayList;
15 import java.util.Date;
16 import java.util.List;
17 import java.util.Locale;
18 import java.util.UUID;
20 @SuppressWarnings("PMD.AvoidDuplicateLiterals")
21 public class HighLightTable {
22 public static final String TABLE_NAME = "highlight_table";
24 public static final String ID = "_id";
25 public static final String COL_BOOK_ID = "bookId";
26 private static final String COL_CONTENT = "content";
27 private static final String COL_DATE = "date";
28 private static final String COL_TYPE = "type";
29 private static final String COL_PAGE_NUMBER = "page_number";
30 private static final String COL_PAGE_ID = "pageId";
31 private static final String COL_RANGY = "rangy";
32 private static final String COL_NOTE = "note";
33 private static final String COL_UUID = "uuid";
35 public static final String SQL_CREATE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ( " + ID
36 + " INTEGER PRIMARY KEY AUTOINCREMENT" + ","
37 + COL_BOOK_ID + " TEXT" + ","
38 + COL_CONTENT + " TEXT" + ","
39 + COL_DATE + " TEXT" + ","
40 + COL_TYPE + " TEXT" + ","
41 + COL_PAGE_NUMBER + " INTEGER" + ","
42 + COL_PAGE_ID + " TEXT" + ","
43 + COL_RANGY + " TEXT" + ","
44 + COL_UUID + " TEXT" + ","
45 + COL_NOTE + " TEXT" + ")";
47 public static final String SQL_DROP = "DROP TABLE IF EXISTS " + TABLE_NAME;
49 public static final String TAG = HighLightTable.class.getSimpleName();
51 public static ContentValues getHighlightContentValues(HighLight highLight) {
52 ContentValues contentValues = new ContentValues();
53 contentValues.put(COL_BOOK_ID, highLight.getBookId());
54 contentValues.put(COL_CONTENT, highLight.getContent());
55 contentValues.put(COL_DATE, getDateTimeString(highLight.getDate()));
56 contentValues.put(COL_TYPE, highLight.getType());
57 contentValues.put(COL_PAGE_NUMBER, highLight.getPageNumber());
58 contentValues.put(COL_PAGE_ID, highLight.getPageId());
59 contentValues.put(COL_RANGY, highLight.getRangy());
60 contentValues.put(COL_NOTE, highLight.getNote());
61 contentValues.put(COL_UUID, highLight.getUUID());
66 public static ArrayList<HighlightImpl> getAllHighlights(String bookId) {
67 ArrayList<HighlightImpl> highlights = new ArrayList<>();
68 Cursor highlightCursor = DbAdapter.getHighLightsForBookId(bookId);
69 while (highlightCursor.moveToNext()) {
70 highlights.add(new HighlightImpl(highlightCursor.getInt(highlightCursor.getColumnIndex(ID)),
71 highlightCursor.getString(highlightCursor.getColumnIndex(COL_BOOK_ID)),
72 highlightCursor.getString(highlightCursor.getColumnIndex(COL_CONTENT)),
73 getDateTime(highlightCursor.getString(highlightCursor.getColumnIndex(COL_DATE))),
74 highlightCursor.getString(highlightCursor.getColumnIndex(COL_TYPE)),
75 highlightCursor.getInt(highlightCursor.getColumnIndex(COL_PAGE_NUMBER)),
76 highlightCursor.getString(highlightCursor.getColumnIndex(COL_PAGE_ID)),
77 highlightCursor.getString(highlightCursor.getColumnIndex(COL_RANGY)),
78 highlightCursor.getString(highlightCursor.getColumnIndex(COL_NOTE)),
79 highlightCursor.getString(highlightCursor.getColumnIndex(COL_UUID))));
84 public static HighlightImpl getHighlightId(int id) {
85 Cursor highlightCursor = DbAdapter.getHighlightsForId(id);
86 HighlightImpl highlightImpl = new HighlightImpl();
87 while (highlightCursor.moveToNext()) {
88 highlightImpl = new HighlightImpl(highlightCursor.getInt(highlightCursor.getColumnIndex(ID)),
89 highlightCursor.getString(highlightCursor.getColumnIndex(COL_BOOK_ID)),
90 highlightCursor.getString(highlightCursor.getColumnIndex(COL_CONTENT)),
91 getDateTime(highlightCursor.getString(highlightCursor.getColumnIndex(COL_DATE))),
92 highlightCursor.getString(highlightCursor.getColumnIndex(COL_TYPE)),
93 highlightCursor.getInt(highlightCursor.getColumnIndex(COL_PAGE_NUMBER)),
94 highlightCursor.getString(highlightCursor.getColumnIndex(COL_PAGE_ID)),
95 highlightCursor.getString(highlightCursor.getColumnIndex(COL_RANGY)),
96 highlightCursor.getString(highlightCursor.getColumnIndex(COL_NOTE)),
97 highlightCursor.getString(highlightCursor.getColumnIndex(COL_UUID)));
100 return highlightImpl;
103 public static long insertHighlight(HighlightImpl highlightImpl) {
104 highlightImpl.setUUID(UUID.randomUUID().toString());
105 return DbAdapter.saveHighLight(getHighlightContentValues(highlightImpl));
108 public static boolean deleteHighlight(String rangy) {
109 String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_RANGY + " = '" + rangy + "'";
110 int id = DbAdapter.getIdForQuery(query);
111 return id != -1 && deleteHighlight(id);
114 public static boolean deleteHighlight(int highlightId) {
115 return DbAdapter.deleteById(TABLE_NAME, ID, String.valueOf(highlightId));
118 public static List<String> getHighlightsForPageId(String pageId) {
119 String query = "SELECT " + COL_RANGY + " FROM " + TABLE_NAME + " WHERE " + COL_PAGE_ID + " = '" + pageId + "'";
120 Cursor c = DbAdapter.getHighlightsForPageId(query, pageId);
121 List<String> rangyList = new ArrayList<>();
122 while (c.moveToNext()) {
123 rangyList.add(c.getString(c.getColumnIndex(COL_RANGY)));
129 public static boolean updateHighlight(HighlightImpl highlightImpl) {
130 return DbAdapter.updateHighLight(getHighlightContentValues(highlightImpl), String.valueOf(highlightImpl.getId()));
133 public static String getDateTimeString(Date date) {
134 SimpleDateFormat dateFormat = new SimpleDateFormat(
135 Constants.DATE_FORMAT, Locale.getDefault());
136 return dateFormat.format(date);
139 public static Date getDateTime(String date) {
140 SimpleDateFormat dateFormat = new SimpleDateFormat(
141 Constants.DATE_FORMAT, Locale.getDefault());
142 Date date1 = new Date();
144 date1 = dateFormat.parse(date);
145 } catch (ParseException e) {
146 Log.e(TAG, "Date parsing failed", e);
151 public static HighlightImpl updateHighlightStyle(String rangy, String style) {
152 String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_RANGY + " = '" + rangy + "'";
153 int id = DbAdapter.getIdForQuery(query);
154 if (id != -1 && update(id, updateRangy(rangy, style), style.replace("highlight_", ""))) {
155 return getHighlightId(id);
160 public static HighlightImpl getHighlightForRangy(String rangy) {
161 String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_RANGY + " = '" + rangy + "'";
162 return getHighlightId(DbAdapter.getIdForQuery(query));
165 private static String updateRangy(String rangy, String style) {
166 /*Pattern p = Pattern.compile("\\highlight_\\w+");
167 Matcher m = p.matcher(rangy);
168 return m.replaceAll(style);*/
169 String[] s = rangy.split("\\$");
170 StringBuilder builder = new StringBuilder();
172 if (TextUtils.isDigitsOnly(p)) {
176 builder.append(style);
180 return builder.toString();
183 private static boolean update(int id, String s, String color) {
184 HighlightImpl highlightImpl = getHighlightId(id);
185 highlightImpl.setRangy(s);
186 highlightImpl.setType(color);
187 return DbAdapter.updateHighLight(getHighlightContentValues(highlightImpl), String.valueOf(id));
190 public static void saveHighlightIfNotExists(HighLight highLight) {
191 String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_UUID + " = '" + highLight.getUUID() + "'";
192 int id = DbAdapter.getIdForQuery(query);
194 DbAdapter.saveHighLight(getHighlightContentValues(highLight));