You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
14 KiB
210 lines
14 KiB
<html>
|
|
<head>
|
|
<title>SqlData.java</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<style type="text/css">
|
|
.s0 { color: #8c8c8c; font-style: italic;}
|
|
.s1 { color: #080808;}
|
|
.s2 { color: #0033b3;}
|
|
.s3 { color: #1750eb;}
|
|
.s4 { color: #067d17;}
|
|
</style>
|
|
</head>
|
|
<body bgcolor="#ffffff">
|
|
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#c0c0c0" >
|
|
<tr><td><center>
|
|
<font face="Arial, Helvetica" color="#000000">
|
|
SqlData.java</font>
|
|
</center></td></tr></table>
|
|
<pre><span class="s0">/*
|
|
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/</span>
|
|
|
|
<span class="s2">package </span><span class="s1">net.micode.notes.gtask.data;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">android.content.ContentResolver;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.ContentUris;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.ContentValues;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.Context;</span>
|
|
<span class="s2">import </span><span class="s1">android.database.Cursor;</span>
|
|
<span class="s2">import </span><span class="s1">android.net.Uri;</span>
|
|
<span class="s2">import </span><span class="s1">android.util.Log;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.DataColumns;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.DataConstants;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.NoteColumns;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.NotesDatabaseHelper.TABLE;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.gtask.exception.ActionFailureException;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">org.json.JSONException;</span>
|
|
<span class="s2">import </span><span class="s1">org.json.JSONObject;</span>
|
|
|
|
|
|
<span class="s2">public class </span><span class="s1">SqlData {</span>
|
|
<span class="s2">private static final </span><span class="s1">String TAG = SqlData.</span><span class="s2">class</span><span class="s1">.getSimpleName();</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">INVALID_ID = -</span><span class="s3">99999</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final </span><span class="s1">String[] PROJECTION_DATA = </span><span class="s2">new </span><span class="s1">String[] {</span>
|
|
<span class="s1">DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1,</span>
|
|
<span class="s1">DataColumns.DATA3</span>
|
|
<span class="s1">};</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">DATA_ID_COLUMN = </span><span class="s3">0</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">DATA_MIME_TYPE_COLUMN = </span><span class="s3">1</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">DATA_CONTENT_COLUMN = </span><span class="s3">2</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">DATA_CONTENT_DATA_1_COLUMN = </span><span class="s3">3</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">DATA_CONTENT_DATA_3_COLUMN = </span><span class="s3">4</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">ContentResolver mContentResolver;</span>
|
|
|
|
<span class="s2">private boolean </span><span class="s1">mIsCreate;</span>
|
|
|
|
<span class="s2">private long </span><span class="s1">mDataId;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">String mDataMimeType;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">String mDataContent;</span>
|
|
|
|
<span class="s2">private long </span><span class="s1">mDataContentData1;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">String mDataContentData3;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">ContentValues mDiffDataValues;</span>
|
|
|
|
<span class="s2">public </span><span class="s1">SqlData(Context context) {</span>
|
|
<span class="s1">mContentResolver = context.getContentResolver();</span>
|
|
<span class="s1">mIsCreate = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s1">mDataId = INVALID_ID;</span>
|
|
<span class="s1">mDataMimeType = DataConstants.NOTE;</span>
|
|
<span class="s1">mDataContent = </span><span class="s4">""</span><span class="s1">;</span>
|
|
<span class="s1">mDataContentData1 = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s1">mDataContentData3 = </span><span class="s4">""</span><span class="s1">;</span>
|
|
<span class="s1">mDiffDataValues = </span><span class="s2">new </span><span class="s1">ContentValues();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">SqlData(Context context, Cursor c) {</span>
|
|
<span class="s1">mContentResolver = context.getContentResolver();</span>
|
|
<span class="s1">mIsCreate = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s1">loadFromCursor(c);</span>
|
|
<span class="s1">mDiffDataValues = </span><span class="s2">new </span><span class="s1">ContentValues();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">loadFromCursor(Cursor c) {</span>
|
|
<span class="s1">mDataId = c.getLong(DATA_ID_COLUMN);</span>
|
|
<span class="s1">mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN);</span>
|
|
<span class="s1">mDataContent = c.getString(DATA_CONTENT_COLUMN);</span>
|
|
<span class="s1">mDataContentData1 = c.getLong(DATA_CONTENT_DATA_1_COLUMN);</span>
|
|
<span class="s1">mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public void </span><span class="s1">setContent(JSONObject js) </span><span class="s2">throws </span><span class="s1">JSONException {</span>
|
|
<span class="s2">long </span><span class="s1">dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mDataId != dataId) {</span>
|
|
<span class="s1">mDiffDataValues.put(DataColumns.ID, dataId);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDataId = dataId;</span>
|
|
|
|
<span class="s1">String dataMimeType = js.has(DataColumns.MIME_TYPE) ? js.getString(DataColumns.MIME_TYPE)</span>
|
|
<span class="s1">: DataConstants.NOTE;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || !mDataMimeType.equals(dataMimeType)) {</span>
|
|
<span class="s1">mDiffDataValues.put(DataColumns.MIME_TYPE, dataMimeType);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDataMimeType = dataMimeType;</span>
|
|
|
|
<span class="s1">String dataContent = js.has(DataColumns.CONTENT) ? js.getString(DataColumns.CONTENT) : </span><span class="s4">""</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || !mDataContent.equals(dataContent)) {</span>
|
|
<span class="s1">mDiffDataValues.put(DataColumns.CONTENT, dataContent);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDataContent = dataContent;</span>
|
|
|
|
<span class="s2">long </span><span class="s1">dataContentData1 = js.has(DataColumns.DATA1) ? js.getLong(DataColumns.DATA1) : </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || mDataContentData1 != dataContentData1) {</span>
|
|
<span class="s1">mDiffDataValues.put(DataColumns.DATA1, dataContentData1);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDataContentData1 = dataContentData1;</span>
|
|
|
|
<span class="s1">String dataContentData3 = js.has(DataColumns.DATA3) ? js.getString(DataColumns.DATA3) : </span><span class="s4">""</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate || !mDataContentData3.equals(dataContentData3)) {</span>
|
|
<span class="s1">mDiffDataValues.put(DataColumns.DATA3, dataContentData3);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDataContentData3 = dataContentData3;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">JSONObject getContent() </span><span class="s2">throws </span><span class="s1">JSONException {</span>
|
|
<span class="s2">if </span><span class="s1">(mIsCreate) {</span>
|
|
<span class="s1">Log.e(TAG, </span><span class="s4">"it seems that we haven't created this in database yet"</span><span class="s1">);</span>
|
|
<span class="s2">return null</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">JSONObject js = </span><span class="s2">new </span><span class="s1">JSONObject();</span>
|
|
<span class="s1">js.put(DataColumns.ID, mDataId);</span>
|
|
<span class="s1">js.put(DataColumns.MIME_TYPE, mDataMimeType);</span>
|
|
<span class="s1">js.put(DataColumns.CONTENT, mDataContent);</span>
|
|
<span class="s1">js.put(DataColumns.DATA1, mDataContentData1);</span>
|
|
<span class="s1">js.put(DataColumns.DATA3, mDataContentData3);</span>
|
|
<span class="s2">return </span><span class="s1">js;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public void </span><span class="s1">commit(</span><span class="s2">long </span><span class="s1">noteId, </span><span class="s2">boolean </span><span class="s1">validateVersion, </span><span class="s2">long </span><span class="s1">version) {</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(mIsCreate) {</span>
|
|
<span class="s2">if </span><span class="s1">(mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) {</span>
|
|
<span class="s1">mDiffDataValues.remove(DataColumns.ID);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">mDiffDataValues.put(DataColumns.NOTE_ID, noteId);</span>
|
|
<span class="s1">Uri uri = mContentResolver.insert(Notes.CONTENT_DATA_URI, mDiffDataValues);</span>
|
|
<span class="s2">try </span><span class="s1">{</span>
|
|
<span class="s1">mDataId = Long.valueOf(uri.getPathSegments().get(</span><span class="s3">1</span><span class="s1">));</span>
|
|
<span class="s1">} </span><span class="s2">catch </span><span class="s1">(NumberFormatException e) {</span>
|
|
<span class="s1">Log.e(TAG, </span><span class="s4">"Get note id error :" </span><span class="s1">+ e.toString());</span>
|
|
<span class="s2">throw new </span><span class="s1">ActionFailureException(</span><span class="s4">"create note failed"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s2">if </span><span class="s1">(mDiffDataValues.size() > </span><span class="s3">0</span><span class="s1">) {</span>
|
|
<span class="s2">int </span><span class="s1">result = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(!validateVersion) {</span>
|
|
<span class="s1">result = mContentResolver.update(ContentUris.withAppendedId(</span>
|
|
<span class="s1">Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, </span><span class="s2">null</span><span class="s1">, </span><span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">result = mContentResolver.update(ContentUris.withAppendedId(</span>
|
|
<span class="s1">Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues,</span>
|
|
<span class="s4">" ? in (SELECT " </span><span class="s1">+ NoteColumns.ID + </span><span class="s4">" FROM " </span><span class="s1">+ TABLE.NOTE</span>
|
|
<span class="s1">+ </span><span class="s4">" WHERE " </span><span class="s1">+ NoteColumns.VERSION + </span><span class="s4">"=?)"</span><span class="s1">, </span><span class="s2">new </span><span class="s1">String[] {</span>
|
|
<span class="s1">String.valueOf(noteId), String.valueOf(version)</span>
|
|
<span class="s1">});</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(result == </span><span class="s3">0</span><span class="s1">) {</span>
|
|
<span class="s1">Log.w(TAG, </span><span class="s4">"there is no update. maybe user updates note when syncing"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">mDiffDataValues.clear();</span>
|
|
<span class="s1">mIsCreate = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public long </span><span class="s1">getId() {</span>
|
|
<span class="s2">return </span><span class="s1">mDataId;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
</pre>
|
|
</body>
|
|
</html> |