1 package net.osdn.gokigen.joggingtimer.storage;
3 import android.content.ContentValues;
4 import android.content.Context;
5 import android.database.Cursor;
6 import android.database.sqlite.SQLiteDatabase;
7 import android.support.annotation.NonNull;
8 import android.util.Log;
10 import net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryData;
11 import net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryIndex;
13 import static android.provider.BaseColumns._ID;
20 class TimeEntryDatabase implements ITimeEntryDatabase
22 private final String TAG = toString();
23 private final TimeEntryDataOpenHelper dbHelper;
24 private final ITimeEntryDatabaseCallback callback;
25 private static final int REFERENCE_ICON_ID = 2;
26 private static final int MODEL_DATA_ICON_ID = 4;
27 private static final int DEFAULT_ICON_ID = 0;
29 private SQLiteDatabase db = null;
30 //private SQLiteDatabase writeDb = null;
31 //private SQLiteDatabase readDb = null;
33 TimeEntryDatabase(Context context, @NonNull ITimeEntryDatabaseCallback callback)
35 dbHelper = new TimeEntryDataOpenHelper(context);
36 this.callback = callback;
42 Log.v(TAG, "prepareToWrite() ");
46 // Gets the data repository in write mode
47 db = dbHelper.getWritableDatabase();
56 callback.prepareFinished(ret);
62 Log.v(TAG, "close()");
75 public Cursor getAllIndexData()
77 return (db.rawQuery("SELECT * FROM " + TimeEntryIndex.EntryIndex.TABLE_NAME + " ORDER BY " + TimeEntryIndex.EntryIndex.COLUMN_NAME_START_TIME + " DESC", null));
81 public Cursor getAllDetailData(long indexId)
83 return (db.rawQuery("SELECT * FROM " + TimeEntryData.EntryData.TABLE_NAME + " WHERE " + TimeEntryData.EntryData.COLUMN_NAME_INDEX_ID + " = " + indexId + " ORDER BY " + TimeEntryData.EntryData.COLUMN_NAME_TIME_ENTRY, null));
87 public Cursor getAllReferenceDetailData()
93 String queryString = "SELECT * FROM " + TimeEntryIndex.EntryIndex.TABLE_NAME + " INNER JOIN " + TimeEntryData.EntryData.TABLE_NAME +
94 " ON " + TimeEntryIndex.EntryIndex.TABLE_NAME + "." + TimeEntryIndex.EntryIndex._ID + " = " + TimeEntryData.EntryData.TABLE_NAME+ "." + TimeEntryData.EntryData.COLUMN_NAME_INDEX_ID +
95 " WHERE " + TimeEntryIndex.EntryIndex.TABLE_NAME+ "." + TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID + " = " + REFERENCE_ICON_ID +
96 " ORDER BY " + TimeEntryData.EntryData.TABLE_NAME+ "." + TimeEntryData.EntryData.COLUMN_NAME_TIME_ENTRY;
97 //Log.v(TAG, "Query : " + queryString);
98 return (db.rawQuery(queryString, null));
102 public Cursor getIndexdata(long indexId)
104 return (db.rawQuery("SELECT * FROM " + TimeEntryIndex.EntryIndex.TABLE_NAME + " WHERE " + TimeEntryIndex.EntryIndex._ID + " = " + indexId + " ORDER BY " + TimeEntryIndex.EntryIndex.COLUMN_NAME_START_TIME, null));
108 public void deleteTimeEntryData(long indexId)
110 int delRecord = db.delete(TimeEntryData.EntryData.TABLE_NAME, TimeEntryData.EntryData.COLUMN_NAME_INDEX_ID + " = " + indexId, null);
111 int delIndex = db.delete(TimeEntryIndex.EntryIndex.TABLE_NAME, _ID + " = " + indexId, null);
113 Log.v(TAG, "deleteTimeEntryData() index : " + indexId + "Recs. [" + delIndex + "] (" + delRecord + ")");
121 public void updateIndexData(long indexId, String title, int icon)
125 if ((title != null)&&(!title.isEmpty()))
127 ContentValues titleValues = new ContentValues();
128 titleValues.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_TITLE, title);
129 db.update(TimeEntryIndex.EntryIndex.TABLE_NAME, titleValues, _ID + " = " + indexId, null);
132 ContentValues iconValues = new ContentValues();
133 iconValues.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID, icon);
134 db.update(TimeEntryIndex.EntryIndex.TABLE_NAME, iconValues, _ID + " = " + indexId, null);
147 public void setReferenceIndexData(long indexId)
151 ContentValues clearValues = new ContentValues();
152 clearValues.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID, DEFAULT_ICON_ID);
153 db.update(TimeEntryIndex.EntryIndex.TABLE_NAME, clearValues, TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID + " = " + REFERENCE_ICON_ID, null);
155 ContentValues referenceValues = new ContentValues();
156 referenceValues.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID, REFERENCE_ICON_ID);
157 db.update(TimeEntryIndex.EntryIndex.TABLE_NAME, referenceValues, _ID + " = " + indexId, null);
166 public void createIndexData(String title, String memo, int icon, long startTime)
168 long indexId = createIndexDataImpl(true, title, memo, icon, startTime, 0);
169 Log.v(TAG, "createIndexData() [" + title +"] " + memo + " " + icon + " " + startTime + " idx: " + indexId);
172 private long createIndexDataImpl(boolean isCallback, String title, String memo, int icon, long startTime, long duration)
178 ContentValues valuesIndex = new ContentValues();
179 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_TITLE, title);
180 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_MEMO, memo);
181 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID, icon);
182 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_START_TIME, startTime);
183 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_TIME_DURATION, duration);
184 indexId = db.insert(TimeEntryIndex.EntryIndex.TABLE_NAME, null, valuesIndex);
191 callback.dataEntryFinished(ITimeEntryDatabaseCallback.OperationType.CREATED, ret, indexId, title);
198 appendTimeDataImpl(true, indexId, startTime, DEFAULT_RECORD_TYPE);
203 public void appendTimeData(long indexId, long lapTime)
205 Log.v(TAG, "appendTimeData() " + lapTime);
206 appendTimeDataImpl(true, indexId, lapTime, DEFAULT_RECORD_TYPE);
213 private void appendTimeDataImpl(boolean isCallback, long indexId, long lapTime, long recordType)
218 ContentValues valuesData = new ContentValues();
219 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_INDEX_ID, indexId);
220 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_TIME_ENTRY, lapTime);
221 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_OTHER_ID, 0);
222 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_GPS_ID, 0);
223 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_MEMO_ID, 0);
224 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_ICON_ID, 0);
225 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_RECORD_TYPE, recordType);
226 long dataId = db.insert(TimeEntryData.EntryData.TABLE_NAME, null, valuesData);
233 callback.timeEntryFinished(ITimeEntryDatabaseCallback.OperationType.APPENDED, ret, indexId, dataId);
248 public void finishTimeData(long indexId, long startTime, long endTime)
250 Log.v(TAG, "finishTimeData() " + endTime);
254 appendTimeData(indexId, endTime);
255 long elapsedTime = endTime - startTime;
260 ContentValues valuesIndex = new ContentValues();
261 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_TIME_DURATION, elapsedTime);
262 int rows = db.update(TimeEntryIndex.EntryIndex.TABLE_NAME, valuesIndex, "_id=" + indexId, null);
267 callback.dataEntryFinished(ITimeEntryDatabaseCallback.OperationType.FINISHED, ret, indexId, "");
280 public long createTimeEntryModelData(int lap, long totalTime, @NonNull String memo)
282 long diffTime = totalTime / (long) lap;
283 String title = " " + lap + " LAPs Model";
284 Log.v(TAG, "ENTRY : '" + lap + " " + title + "' mills : " + "(" + diffTime + ") " + memo);
289 long indexId = createIndexDataImpl(false, title, memo, MODEL_DATA_ICON_ID, lapTime, totalTime);
290 for (int index = 0; index < lap; index++)
292 lapTime = lapTime + diffTime;
293 appendTimeDataImpl(false, indexId, lapTime, EDITABLE_RECORD_TYPE);
295 callback.modelDataEntryFinished(ITimeEntryDatabaseCallback.OperationType.FINISHED, true, indexId, title);
302 callback.modelDataEntryFinished(ITimeEntryDatabaseCallback.OperationType.FINISHED, false, -1, title);
311 public int updateTimeEntryData(long detailId, long totalTime)
314 Log.v(TAG, "updateTimeEntryData (" + detailId + ") : " + totalTime);
317 ContentValues timeValue = new ContentValues();
318 timeValue.put(TimeEntryData.EntryData.COLUMN_NAME_TIME_ENTRY, totalTime);
319 rows = db.update(TimeEntryData.EntryData.TABLE_NAME, timeValue, _ID + " = " + detailId, null);
329 public boolean prepareToRead()
331 Log.v(TAG, "prepareToRead() ");
335 // Gets the data repository in read mode
336 readDb = dbHelper.getReadableDatabase();
346 public boolean prepareToWrite()
348 Log.v(TAG, "prepareToWrite() ");
352 // Gets the data repository in write mode
353 writeDb = dbHelper.getWritableDatabase();