{"action":"created","comment":{"url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/comments/26627468","id":26627468,"diff_hunk":"@@ -0,0 +1,200 @@\n+/*\n+ * Copyright (c) 2014, salesforce.com, inc.\n+ * All rights reserved.\n+ * Redistribution and use of this software in source and binary forms, with or\n+ * without modification, are permitted provided that the following conditions\n+ * are met:\n+ * - Redistributions of source code must retain the above copyright notice, this\n+ * list of conditions and the following disclaimer.\n+ * - Redistributions in binary form must reproduce the above copyright notice,\n+ * this list of conditions and the following disclaimer in the documentation\n+ * and/or other materials provided with the distribution.\n+ * - Neither the name of salesforce.com, inc. nor the names of its contributors\n+ * may be used to endorse or promote products derived from this software without\n+ * specific prior written permission of salesforce.com, inc.\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n+ * POSSIBILITY OF SUCH DAMAGE.\n+ */\n+package com.salesforce.androidsdk.smartsync.util;\n+\n+import android.text.TextUtils;\n+import android.util.Log;\n+\n+import com.salesforce.androidsdk.rest.RestRequest;\n+import com.salesforce.androidsdk.rest.RestResponse;\n+import com.salesforce.androidsdk.smartstore.store.SmartStore;\n+import com.salesforce.androidsdk.smartsync.manager.SyncManager;\n+\n+import org.json.JSONArray;\n+import org.json.JSONException;\n+import org.json.JSONObject;\n+\n+import java.io.IOException;\n+import java.lang.reflect.Method;\n+import java.text.ParseException;\n+import java.util.Map;\n+import java.util.Set;\n+\n+/**\n+ * Target for sync up:\n+ * - what records to upload to server\n+ * - how to upload those records\n+ */\n+public class SyncUpTarget implements SyncTarget {\n+\n+    // Constants\n+    public static final String ANDROID_IMPL = \"androidImpl\";\n+\n+    /**\n+     * Build default SyncUpTarget\n+     * @return\n+     */\n+    public static SyncUpTarget defaultSyncUpTarget() {\n+        return new SyncUpTarget();\n+    }\n+\n+    /**\n+     * Build SyncUpTarget from json\n+     *\n+     * @param target as json\n+     * @return\n+     * @throws JSONException\n+     */\n+    @SuppressWarnings(\"unchecked\")\n+    public static SyncUpTarget fromJSON(JSONObject target) throws JSONException {\n+        // Default sync up target\n+        if (target == null || SyncUpTarget.class.getName().equals(target.getString(ANDROID_IMPL))) {\n+            return SyncUpTarget.defaultSyncUpTarget();\n+        }\n+\n+        // Non default sync up target\n+        try {\n+            Class<? extends SyncUpTarget> implClass = (Class<? extends SyncUpTarget>) Class.forName(target.getString(ANDROID_IMPL));\n+            Method method = implClass.getMethod(\"fromJSON\", JSONObject.class);\n+            return (SyncUpTarget) method.invoke(null, target);\n+        } catch (Exception e) {\n+            throw new RuntimeException(e);\n+        }\n+    }\n+\n+    /**\n+     * @return json representation of target\n+     * @throws JSONException\n+     */\n+    public JSONObject asJSON() throws JSONException {\n+        JSONObject target = new JSONObject();\n+        target.put(ANDROID_IMPL, getClass().getName());\n+        return target;\n+    }\n+\n+    /**\n+     * Save locally created record back to server\n+     * @param syncManager\n+     * @param objectType\n+     * @param fields\n+     * @return server record id or null if creation failed\n+     * @throws JSONException\n+     * @throws IOException\n+     */\n+    public String createOnServer(SyncManager syncManager, String objectType, Map<String, Object> fields) throws JSONException, IOException {\n+        RestRequest request = RestRequest.getRequestForCreate(syncManager.apiVersion, objectType, fields);\n+        RestResponse response = syncManager.sendSyncWithSmartSyncUserAgent(request);\n+\n+        return response.isSuccess()\n+                ? response.asJSONObject().getString(Constants.LID)\n+                : null;\n+    }\n+\n+    /**\n+     * Delete locally deleted record from server\n+     * @param syncManager\n+     * @param objectType\n+     * @param objectId\n+     * @return true if successful\n+     * @throws JSONException\n+     * @throws IOException\n+     */\n+    public boolean deleteOnServer(SyncManager syncManager, String objectType, String objectId) throws JSONException, IOException {\n+        RestRequest request = RestRequest.getRequestForDelete(syncManager.apiVersion, objectType, objectId);\n+        RestResponse response = syncManager.sendSyncWithSmartSyncUserAgent(request);\n+\n+        return response.isSuccess();\n+    }\n+\n+    /**\n+     * Save locally updated record back to server\n+     * @param syncManager\n+     * @param objectType\n+     * @param objectId\n+     * @param fields\n+     * @return true if successful\n+     * @throws JSONException\n+     * @throws IOException\n+     */\n+    public boolean updateOnServer(SyncManager syncManager, String objectType, String objectId, Map<String, Object> fields) throws JSONException, IOException {\n+        RestRequest request = RestRequest.getRequestForUpdate(syncManager.apiVersion, objectType, objectId, fields);\n+        RestResponse response = syncManager.sendSyncWithSmartSyncUserAgent(request);\n+\n+        return response.isSuccess();\n+    }\n+\n+    /**\n+     * Fetch last modified date for a given record\n+     * @param syncManager\n+     * @param objectType\n+     * @param objectId\n+     * @return\n+     * @throws JSONException\n+     * @throws IOException\n+     */\n+    public long fetchLastModifiedDate(SyncManager syncManager, String objectType, String objectId) throws JSONException, IOException {\n+        boolean isNewer = false;\n+        long serverLastModified = -1L;\n+        final String query = SOQLBuilder.getInstanceWithFields(Constants.LAST_MODIFIED_DATE)\n+                .from(objectType)\n+                .where(Constants.ID + \" = '\" + objectId + \"'\")\n+                .build();\n+\n+        RestResponse lastModResponse = syncManager.sendSyncWithSmartSyncUserAgent(RestRequest.getRequestForQuery(syncManager.apiVersion, query));","path":"libs/SmartSync/src/com/salesforce/androidsdk/smartsync/util/SyncUpTarget.java","position":167,"original_position":167,"commit_id":"cb9923df63e2002abe9262e9f720190d6ea9a930","original_commit_id":"cb9923df63e2002abe9262e9f720190d6ea9a930","user":{"login":"wmathurin","id":1012459,"avatar_url":"https://avatars.githubusercontent.com/u/1012459?v=3","gravatar_id":"","url":"https://api.github.com/users/wmathurin","html_url":"https://github.com/wmathurin","followers_url":"https://api.github.com/users/wmathurin/followers","following_url":"https://api.github.com/users/wmathurin/following{/other_user}","gists_url":"https://api.github.com/users/wmathurin/gists{/gist_id}","starred_url":"https://api.github.com/users/wmathurin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wmathurin/subscriptions","organizations_url":"https://api.github.com/users/wmathurin/orgs","repos_url":"https://api.github.com/users/wmathurin/repos","events_url":"https://api.github.com/users/wmathurin/events{/privacy}","received_events_url":"https://api.github.com/users/wmathurin/received_events","type":"User","site_admin":false},"body":"During sync, we use synchronous network calls - but the sync itself happens on a separate thread","created_at":"2015-03-17T23:41:25Z","updated_at":"2015-03-17T23:41:25Z","html_url":"https://github.com/forcedotcom/SalesforceMobileSDK-Android/pull/844#discussion_r26627468","pull_request_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/844","_links":{"self":{"href":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/comments/26627468"},"html":{"href":"https://github.com/forcedotcom/SalesforceMobileSDK-Android/pull/844#discussion_r26627468"},"pull_request":{"href":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/844"}}},"pull_request":{"url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/844","id":31384703,"html_url":"https://github.com/forcedotcom/SalesforceMobileSDK-Android/pull/844","diff_url":"https://github.com/forcedotcom/SalesforceMobileSDK-Android/pull/844.diff","patch_url":"https://github.com/forcedotcom/SalesforceMobileSDK-Android/pull/844.patch","issue_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/issues/844","number":844,"state":"open","locked":false,"title":"Sync up target for android","user":{"login":"wmathurin","id":1012459,"avatar_url":"https://avatars.githubusercontent.com/u/1012459?v=3","gravatar_id":"","url":"https://api.github.com/users/wmathurin","html_url":"https://github.com/wmathurin","followers_url":"https://api.github.com/users/wmathurin/followers","following_url":"https://api.github.com/users/wmathurin/following{/other_user}","gists_url":"https://api.github.com/users/wmathurin/gists{/gist_id}","starred_url":"https://api.github.com/users/wmathurin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wmathurin/subscriptions","organizations_url":"https://api.github.com/users/wmathurin/orgs","repos_url":"https://api.github.com/users/wmathurin/repos","events_url":"https://api.github.com/users/wmathurin/events{/privacy}","received_events_url":"https://api.github.com/users/wmathurin/received_events","type":"User","site_admin":false},"body":"NB: diverging a bit from iOS implementation / will align iOS implementation in future pull request\r\nTODO: hybrid side changes","created_at":"2015-03-17T22:31:26Z","updated_at":"2015-03-17T23:41:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"00d4aff0115dd9ef866dcd470bf952778788871e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/844/commits","review_comments_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/844/comments","review_comment_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/comments{/number}","comments_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/issues/844/comments","statuses_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/statuses/cb9923df63e2002abe9262e9f720190d6ea9a930","head":{"label":"wmathurin:unstable","ref":"unstable","sha":"cb9923df63e2002abe9262e9f720190d6ea9a930","user":{"login":"wmathurin","id":1012459,"avatar_url":"https://avatars.githubusercontent.com/u/1012459?v=3","gravatar_id":"","url":"https://api.github.com/users/wmathurin","html_url":"https://github.com/wmathurin","followers_url":"https://api.github.com/users/wmathurin/followers","following_url":"https://api.github.com/users/wmathurin/following{/other_user}","gists_url":"https://api.github.com/users/wmathurin/gists{/gist_id}","starred_url":"https://api.github.com/users/wmathurin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wmathurin/subscriptions","organizations_url":"https://api.github.com/users/wmathurin/orgs","repos_url":"https://api.github.com/users/wmathurin/repos","events_url":"https://api.github.com/users/wmathurin/events{/privacy}","received_events_url":"https://api.github.com/users/wmathurin/received_events","type":"User","site_admin":false},"repo":{"id":5184182,"name":"SalesforceMobileSDK-Android","full_name":"wmathurin/SalesforceMobileSDK-Android","owner":{"login":"wmathurin","id":1012459,"avatar_url":"https://avatars.githubusercontent.com/u/1012459?v=3","gravatar_id":"","url":"https://api.github.com/users/wmathurin","html_url":"https://github.com/wmathurin","followers_url":"https://api.github.com/users/wmathurin/followers","following_url":"https://api.github.com/users/wmathurin/following{/other_user}","gists_url":"https://api.github.com/users/wmathurin/gists{/gist_id}","starred_url":"https://api.github.com/users/wmathurin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wmathurin/subscriptions","organizations_url":"https://api.github.com/users/wmathurin/orgs","repos_url":"https://api.github.com/users/wmathurin/repos","events_url":"https://api.github.com/users/wmathurin/events{/privacy}","received_events_url":"https://api.github.com/users/wmathurin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/wmathurin/SalesforceMobileSDK-Android","description":"Android SDK for Salesforce","fork":true,"url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android","forks_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/forks","keys_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/teams","hooks_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/hooks","issue_events_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/issues/events{/number}","events_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/events","assignees_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/assignees{/user}","branches_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/branches{/branch}","tags_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/tags","blobs_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/git/refs{/sha}","trees_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/statuses/{sha}","languages_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/languages","stargazers_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/stargazers","contributors_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/contributors","subscribers_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/subscribers","subscription_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/subscription","commits_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/commits{/sha}","git_commits_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/git/commits{/sha}","comments_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/comments{/number}","issue_comment_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/issues/comments{/number}","contents_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/contents/{+path}","compare_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/merges","archive_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/downloads","issues_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/issues{/number}","pulls_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/pulls{/number}","milestones_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/milestones{/number}","notifications_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/labels{/name}","releases_url":"https://api.github.com/repos/wmathurin/SalesforceMobileSDK-Android/releases{/id}","created_at":"2012-07-25T20:30:08Z","updated_at":"2015-02-27T21:19:37Z","pushed_at":"2015-03-17T22:30:39Z","git_url":"git://github.com/wmathurin/SalesforceMobileSDK-Android.git","ssh_url":"git@github.com:wmathurin/SalesforceMobileSDK-Android.git","clone_url":"https://github.com/wmathurin/SalesforceMobileSDK-Android.git","svn_url":"https://github.com/wmathurin/SalesforceMobileSDK-Android","homepage":"","size":45050,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"forcedotcom:unstable","ref":"unstable","sha":"ded69ba066c6b60fbe961fa95eee48b9e57272ac","user":{"login":"forcedotcom","id":464563,"avatar_url":"https://avatars.githubusercontent.com/u/464563?v=3","gravatar_id":"","url":"https://api.github.com/users/forcedotcom","html_url":"https://github.com/forcedotcom","followers_url":"https://api.github.com/users/forcedotcom/followers","following_url":"https://api.github.com/users/forcedotcom/following{/other_user}","gists_url":"https://api.github.com/users/forcedotcom/gists{/gist_id}","starred_url":"https://api.github.com/users/forcedotcom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/forcedotcom/subscriptions","organizations_url":"https://api.github.com/users/forcedotcom/orgs","repos_url":"https://api.github.com/users/forcedotcom/repos","events_url":"https://api.github.com/users/forcedotcom/events{/privacy}","received_events_url":"https://api.github.com/users/forcedotcom/received_events","type":"Organization","site_admin":false},"repo":{"id":2782691,"name":"SalesforceMobileSDK-Android","full_name":"forcedotcom/SalesforceMobileSDK-Android","owner":{"login":"forcedotcom","id":464563,"avatar_url":"https://avatars.githubusercontent.com/u/464563?v=3","gravatar_id":"","url":"https://api.github.com/users/forcedotcom","html_url":"https://github.com/forcedotcom","followers_url":"https://api.github.com/users/forcedotcom/followers","following_url":"https://api.github.com/users/forcedotcom/following{/other_user}","gists_url":"https://api.github.com/users/forcedotcom/gists{/gist_id}","starred_url":"https://api.github.com/users/forcedotcom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/forcedotcom/subscriptions","organizations_url":"https://api.github.com/users/forcedotcom/orgs","repos_url":"https://api.github.com/users/forcedotcom/repos","events_url":"https://api.github.com/users/forcedotcom/events{/privacy}","received_events_url":"https://api.github.com/users/forcedotcom/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/forcedotcom/SalesforceMobileSDK-Android","description":"Android SDK for Salesforce","fork":false,"url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android","forks_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/forks","keys_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/keys{/key_id}","collaborators_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/teams","hooks_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/hooks","issue_events_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/issues/events{/number}","events_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/events","assignees_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/assignees{/user}","branches_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/branches{/branch}","tags_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/tags","blobs_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/git/refs{/sha}","trees_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/git/trees{/sha}","statuses_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/statuses/{sha}","languages_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/languages","stargazers_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/stargazers","contributors_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/contributors","subscribers_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/subscribers","subscription_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/subscription","commits_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/commits{/sha}","git_commits_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/git/commits{/sha}","comments_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/comments{/number}","issue_comment_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/issues/comments{/number}","contents_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/contents/{+path}","compare_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/compare/{base}...{head}","merges_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/merges","archive_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/downloads","issues_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/issues{/number}","pulls_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls{/number}","milestones_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/milestones{/number}","notifications_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/labels{/name}","releases_url":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/releases{/id}","created_at":"2011-11-15T19:35:05Z","updated_at":"2015-02-25T02:46:25Z","pushed_at":"2015-02-24T23:55:14Z","git_url":"git://github.com/forcedotcom/SalesforceMobileSDK-Android.git","ssh_url":"git@github.com:forcedotcom/SalesforceMobileSDK-Android.git","clone_url":"https://github.com/forcedotcom/SalesforceMobileSDK-Android.git","svn_url":"https://github.com/forcedotcom/SalesforceMobileSDK-Android","homepage":"","size":48612,"stargazers_count":162,"watchers_count":162,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":209,"mirror_url":null,"open_issues_count":9,"forks":209,"open_issues":9,"watchers":162,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/844"},"html":{"href":"https://github.com/forcedotcom/SalesforceMobileSDK-Android/pull/844"},"issue":{"href":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/issues/844"},"comments":{"href":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/issues/844/comments"},"review_comments":{"href":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/844/comments"},"review_comment":{"href":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/pulls/844/commits"},"statuses":{"href":"https://api.github.com/repos/forcedotcom/SalesforceMobileSDK-Android/statuses/cb9923df63e2002abe9262e9f720190d6ea9a930"}}}}