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()
89 String queryString = "SELECT * FROM " + TimeEntryIndex.EntryIndex.TABLE_NAME + " INNER JOIN " + TimeEntryData.EntryData.TABLE_NAME +
90 " ON " + TimeEntryIndex.EntryIndex.TABLE_NAME + "." + TimeEntryIndex.EntryIndex._ID + " = " + TimeEntryData.EntryData.TABLE_NAME+ "." + TimeEntryData.EntryData.COLUMN_NAME_INDEX_ID +
91 " WHERE " + TimeEntryIndex.EntryIndex.TABLE_NAME+ "." + TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID + " = " + REFERENCE_ICON_ID +
92 " ORDER BY " + TimeEntryData.EntryData.TABLE_NAME+ "." + TimeEntryData.EntryData.COLUMN_NAME_TIME_ENTRY;
93 //Log.v(TAG, "Query : " + queryString);
94 return (db.rawQuery(queryString, null));
98 public void deleteTimeEntryData(long indexId)
100 int delRecord = db.delete(TimeEntryData.EntryData.TABLE_NAME, TimeEntryData.EntryData.COLUMN_NAME_INDEX_ID + " = " + indexId, null);
101 int delIndex = db.delete(TimeEntryIndex.EntryIndex.TABLE_NAME, _ID + " = " + indexId, null);
103 Log.v(TAG, "deleteTimeEntryData() index : " + indexId + "Recs. [" + delIndex + "] (" + delRecord + ")");
111 public void updateIndexData(long indexId, String title, int icon)
115 if ((title != null)&&(!title.isEmpty()))
117 ContentValues titleValues = new ContentValues();
118 titleValues.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_TITLE, title);
119 db.update(TimeEntryIndex.EntryIndex.TABLE_NAME, titleValues, _ID + " = " + indexId, null);
122 ContentValues iconValues = new ContentValues();
123 iconValues.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID, icon);
124 db.update(TimeEntryIndex.EntryIndex.TABLE_NAME, iconValues, _ID + " = " + indexId, null);
137 public void setReferenceIndexData(long indexId)
141 ContentValues clearValues = new ContentValues();
142 clearValues.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID, DEFAULT_ICON_ID);
143 db.update(TimeEntryIndex.EntryIndex.TABLE_NAME, clearValues, TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID + " = " + REFERENCE_ICON_ID, null);
145 ContentValues referenceValues = new ContentValues();
146 referenceValues.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID, REFERENCE_ICON_ID);
147 db.update(TimeEntryIndex.EntryIndex.TABLE_NAME, referenceValues, _ID + " = " + indexId, null);
156 public void createIndexData(String title, String memo, int icon, long startTime)
158 long indexId = createIndexDataImpl(true, title, memo, icon, startTime, 0);
159 Log.v(TAG, "createIndexData() [" + title +"] " + memo + " " + icon + " " + startTime + " idx: " + indexId);
162 private long createIndexDataImpl(boolean isCallback, String title, String memo, int icon, long startTime, long duration)
168 ContentValues valuesIndex = new ContentValues();
169 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_TITLE, title);
170 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_MEMO, memo);
171 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID, icon);
172 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_START_TIME, startTime);
173 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_TIME_DURATION, duration);
174 indexId = db.insert(TimeEntryIndex.EntryIndex.TABLE_NAME, null, valuesIndex);
181 callback.dataEntryFinished(ITimeEntryDatabaseCallback.OperationType.CREATED, ret, indexId, title);
188 appendTimeDataImpl(true, indexId, startTime, DEFAULT_RECORD_TYPE);
193 public void appendTimeData(long indexId, long lapTime)
195 Log.v(TAG, "appendTimeData() " + lapTime);
196 appendTimeDataImpl(true, indexId, lapTime, DEFAULT_RECORD_TYPE);
203 private void appendTimeDataImpl(boolean isCallback, long indexId, long lapTime, long recordType)
208 ContentValues valuesData = new ContentValues();
209 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_INDEX_ID, indexId);
210 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_TIME_ENTRY, lapTime);
211 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_OTHER_ID, 0);
212 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_GPS_ID, 0);
213 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_MEMO_ID, 0);
214 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_ICON_ID, 0);
215 valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_RECORD_TYPE, recordType);
216 long dataId = db.insert(TimeEntryData.EntryData.TABLE_NAME, null, valuesData);
223 callback.timeEntryFinished(ITimeEntryDatabaseCallback.OperationType.APPENDED, ret, indexId, dataId);
238 public void finishTimeData(long indexId, long startTime, long endTime)
240 Log.v(TAG, "finishTimeData() " + endTime);
244 appendTimeData(indexId, endTime);
245 long elapsedTime = endTime - startTime;
250 ContentValues valuesIndex = new ContentValues();
251 valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_TIME_DURATION, elapsedTime);
252 int rows = db.update(TimeEntryIndex.EntryIndex.TABLE_NAME, valuesIndex, "_id=" + indexId, null);
257 callback.dataEntryFinished(ITimeEntryDatabaseCallback.OperationType.FINISHED, ret, indexId, "");
270 public void createTimeEntryModelData(int lap, int hour, int minute, int second, @NonNull String memo)
272 long totalTime = (hour * (1000 * 60 * 60)) + (minute * (1000 * 60)) + second;
273 long diffTime = totalTime / (long) lap;
274 String title = " " + lap + " LAPs Model";
275 Log.v(TAG, "ENTRY : '" + lap + " " + title + "' mills : " + "(" + diffTime + ") " + memo);
280 long indexId = createIndexDataImpl(false, title, memo, MODEL_DATA_ICON_ID, lapTime, totalTime);
281 for (int index = 0; index < lap; index++)
283 lapTime = lapTime + diffTime;
284 appendTimeDataImpl(false, indexId, lapTime, EDITABLE_RECORD_TYPE);
286 callback.modelDataEntryFinished(ITimeEntryDatabaseCallback.OperationType.FINISHED, true, indexId, title);
293 callback.modelDataEntryFinished(ITimeEntryDatabaseCallback.OperationType.FINISHED, false, -1, title);
297 public boolean prepareToRead()
299 Log.v(TAG, "prepareToRead() ");
303 // Gets the data repository in read mode
304 readDb = dbHelper.getReadableDatabase();
314 public boolean prepareToWrite()
316 Log.v(TAG, "prepareToWrite() ");
320 // Gets the data repository in write mode
321 writeDb = dbHelper.getWritableDatabase();