{"action":"created","comment":{"url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/comments/60568881","id":60568881,"diff_hunk":"@@ -0,0 +1,460 @@\n+package com.kii.thingif.gateway;\n+\n+import android.content.Context;\n+import android.content.SharedPreferences;\n+import android.net.Uri;\n+import android.os.Parcel;\n+import android.os.Parcelable;\n+import android.support.annotation.NonNull;\n+import android.support.annotation.Nullable;\n+import android.support.annotation.WorkerThread;\n+import android.text.TextUtils;\n+import android.util.Base64;\n+\n+import com.kii.thingif.KiiApp;\n+import com.kii.thingif.MediaTypes;\n+import com.kii.thingif.exception.StoredGatewayAPIInstanceNotFoundException;\n+import com.kii.thingif.exception.ThingIFException;\n+import com.kii.thingif.internal.GsonRepository;\n+import com.kii.thingif.internal.http.IoTRestClient;\n+import com.kii.thingif.internal.http.IoTRestRequest;\n+import com.kii.thingif.internal.utils.Path;\n+\n+import org.json.JSONArray;\n+import org.json.JSONException;\n+import org.json.JSONObject;\n+\n+import java.text.MessageFormat;\n+import java.util.ArrayList;\n+import java.util.HashMap;\n+import java.util.List;\n+import java.util.Map;\n+\n+public class GatewayAPI implements Parcelable {\n+\n+    private static final String SHARED_PREFERENCES_KEY_INSTANCE = \"GatewayAPI_INSTANCE\";\n+    private static Context context;\n+    private final String tag;\n+    private final KiiApp app;\n+    private final Uri gatewayAddress;\n+    private String accessToken;\n+    private final IoTRestClient restClient;\n+\n+    GatewayAPI(@Nullable Context context,\n+               @NonNull KiiApp app,\n+               @NonNull Uri gatewayAddress) {\n+        this(context, null, app, gatewayAddress);\n+    }\n+    GatewayAPI(@Nullable Context context,\n+               @Nullable String tag,\n+               @NonNull KiiApp app,\n+               @NonNull Uri gatewayAddress) {\n+        if (context != null) {\n+            GatewayAPI.context = context.getApplicationContext();\n+        }\n+        this.app = app;\n+        this.tag =tag;\n+        this.gatewayAddress = gatewayAddress;\n+        this.restClient = new IoTRestClient();\n+    }\n+\n+    protected Map<String, String> newHeader() {\n+        Map<String, String> headers = new HashMap<String, String>();\n+        headers.put(\"Authorization\", \"Bearer \" + this.accessToken);\n+        return headers;\n+    }\n+\n+    /** Login to the Gateway.\n+     * Local authentication for the Gateway access.\n+     * Required prior to call other APIs access to the gateway.\n+     * @param username Username of the Gateway.\n+     * @param password Password of the Gateway.\n+     * @throws ThingIFException\n+     */\n+    @WorkerThread\n+    public void login(@NonNull String username, @NonNull String password) throws ThingIFException {\n+        if (TextUtils.isEmpty(username)) {\n+            throw new IllegalArgumentException(\"username is null or empty\");\n+        }\n+        if (TextUtils.isEmpty(password)) {\n+            throw new IllegalArgumentException(\"password is null or empty\");\n+        }\n+        String path = MessageFormat.format(\"/{0}/token\", this.app.getSiteName());\n+        String url = Path.combine(this.gatewayAddress.toString(), path);\n+\n+        String credential = this.app.getAppID() + \":\" + this.app.getAppKey();\n+        Map<String, String> headers = new HashMap<String, String>();\n+        headers.put(\"Authorization\", \"Basic \" + Base64.encodeToString(credential.getBytes(), Base64.NO_WRAP));\n+\n+        JSONObject requestBody = new JSONObject();\n+        try {\n+            requestBody.put(\"username\", username);\n+            requestBody.put(\"password\", password);\n+        } catch (JSONException e) {\n+            // Won’t happen\n+        }\n+\n+        IoTRestRequest request = new IoTRestRequest(url, IoTRestRequest.Method.POST, headers, MediaTypes.MEDIA_TYPE_JSON, requestBody);\n+        JSONObject responseBody = new IoTRestClient().sendRequest(request);\n+        this.accessToken = responseBody.optString(\"accessToken\", null);\n+        this.saveInstance(this);\n+    }\n+\n+    /** Let the Gateway Onboard.\n+     * @return Thing ID assigned by Kii Cloud.\n+     * @throws ThingIFException Thrown when gateway returns error response.\n+     * @throws IllegalStateException Thrown when user is not logged in.\n+     * See {@link #login(String, String)}\n+     */\n+    @NonNull\n+    @WorkerThread\n+    public String onboardGateway() throws ThingIFException {\n+        if (!isLoggedIn()) {\n+            throw new IllegalStateException(\"Needs user login before execute this API\");\n+        }\n+        String path = MessageFormat.format(\"/{0}/apps/{1}/gateway/onboarding\", this.app.getSiteName(), this.app.getAppID());\n+        String url = Path.combine(this.gatewayAddress.toString(), path);\n+        Map<String, String> headers = this.newHeader();\n+\n+        IoTRestRequest request = new IoTRestRequest(url, IoTRestRequest.Method.POST, headers);\n+        JSONObject responseBody = this.restClient.sendRequest(request);\n+        return responseBody.optString(\"thingID\", null);\n+    }\n+\n+    /**\n+     * Get Gateway ID\n+     * @return Thing ID assigned by Kii Cloud.\n+     * @throws ThingIFException Thrown when gateway returns error response.\n+     * @throws IllegalStateException Thrown when user is not logged in.\n+     * See {@link #login(String, String)}\n+     */\n+    @WorkerThread\n+    @NonNull\n+    public String getGatewayID() throws ThingIFException {\n+        if (!isLoggedIn()) {\n+            throw new IllegalStateException(\"Needs user login before execute this API\");\n+        }\n+        String path = MessageFormat.format(\"/{0}/apps/{1}/gateway/id\", this.app.getSiteName(), this.app.getAppID());\n+        String url = Path.combine(this.gatewayAddress.toString(), path);\n+        Map<String, String> headers = this.newHeader();\n+\n+        IoTRestRequest request = new IoTRestRequest(url, IoTRestRequest.Method.GET, headers);\n+        JSONObject responseBody = this.restClient.sendRequest(request);\n+        return responseBody.optString(\"thingID\", null);\n+    }\n+\n+    /** List connected end nodes which has not been onboarded.\n+     * @return List of end nodes connected to the gateway but waiting for onboarding.\n+     * @throws ThingIFException Thrown when gateway returns error response.\n+     * @throws IllegalStateException Thrown when user is not logged in.\n+     * See {@link #login(String, String)}\n+     */\n+    @WorkerThread\n+    @NonNull\n+    public List<EndNode> listPendingEndNodes() throws ThingIFException {\n+        if (!isLoggedIn()) {\n+            throw new IllegalStateException(\"Needs user login before execute this API\");\n+        }\n+        String path = MessageFormat.format(\"/{0}/apps/{1}/gateway/end-nodes/pending\", this.app.getSiteName(), this.app.getAppID());\n+        String url = Path.combine(this.gatewayAddress.toString(), path);\n+        Map<String, String> headers = this.newHeader();\n+\n+        IoTRestRequest request = new IoTRestRequest(url, IoTRestRequest.Method.GET, headers);\n+        JSONObject responseBody = this.restClient.sendRequest(request);\n+        List<EndNode> nodes = new ArrayList<EndNode>();\n+        JSONArray results = responseBody.optJSONArray(\"results\");\n+        if (results != null) {\n+            for (int i = 0; i < results.length(); i++) {\n+                try {\n+                    nodes.add(new EndNode(results.getJSONObject(i)));\n+                } catch (JSONException ignore) {\n+                }\n+            }\n+        }\n+        return nodes;\n+    }\n+\n+    /** Notify Onboarding completion\n+     * Call this api when the End Node onboarding is done.\n+     * After the call succeeded, End Node will be fully connected to Kii Cloud through the Gateway.\n+     * @param endNodeThingID ID of the end-node assigned by Kii Cloud.\n+     * @param endNodeVenderThingID ID of the end-node assigned by End Node vendor.\n+     * @throws ThingIFException\n+     * @throws IllegalStateException Thrown when user is not logged in.\n+     * See {@link #login(String, String)}\n+     */\n+    @WorkerThread\n+    public void notifyOnboardingCompletion(@NonNull String endNodeThingID, @NonNull String endNodeVenderThingID) throws ThingIFException {\n+        if (!isLoggedIn()) {\n+            throw new IllegalStateException(\"Needs user login before execute this API\");\n+        }\n+        if (TextUtils.isEmpty(endNodeThingID)) {\n+            throw new IllegalArgumentException(\"thingID is null or empty\");\n+        }\n+        if (TextUtils.isEmpty(endNodeVenderThingID)) {\n+            throw new IllegalArgumentException(\"venderThingID is null or empty\");\n+        }\n+        String path = MessageFormat.format(\"/{0}/apps/{1}/gateway/end-nodes/VENDOR_THING_ID:{2}\", this.app.getSiteName(), this.app.getAppID(), endNodeVenderThingID);\n+        String url = Path.combine(this.gatewayAddress.toString(), path);\n+        Map<String, String> headers = this.newHeader();\n+\n+        JSONObject requestBody = new JSONObject();\n+        try {\n+            requestBody.put(\"thingID\", endNodeThingID);\n+        } catch (JSONException e) {\n+            // Won’t happen\n+        }\n+        IoTRestRequest request = new IoTRestRequest(url, IoTRestRequest.Method.PUT, headers, MediaTypes.MEDIA_TYPE_JSON, requestBody);\n+        this.restClient.sendRequest(request);\n+    }\n+\n+    /** Restore the Gateway.\n+     * This API can be used only for the Gateway App.\n+     * @throws ThingIFException\n+     * @throws IllegalStateException Thrown when user is not logged in.\n+     * See {@link #login(String, String)}\n+     */\n+    @WorkerThread\n+    public void restore() throws ThingIFException {\n+        if (!isLoggedIn()) {\n+            throw new IllegalStateException(\"Needs user login before execute this API\");\n+        }\n+        String path = \"/gateway-app/gateway/restore\";\n+        String url = Path.combine(this.gatewayAddress.toString(), path);\n+        Map<String, String> headers = this.newHeader();\n+        IoTRestRequest request = new IoTRestRequest(url, IoTRestRequest.Method.POST, headers);\n+        this.restClient.sendRequest(request);\n+    }\n+\n+    /**\n+     * Replace end-node by new vendorThingID for end node thingID.\n+     *\n+     * @param endNodeThingID ID of the end-node assigned by Kii Cloud.\n+     * @param endNodeVenderThingID ID of the end-node assigned by End Node vendor.\n+     * @throws ThingIFException\n+     * @throws IllegalStateException Thrown when user is not logged in.\n+     * See {@link #login(String, String)}\n+     */\n+    @WorkerThread\n+    public void replaceEndNode(@NonNull String endNodeThingID, @NonNull String endNodeVenderThingID) throws ThingIFException {\n+        if (!isLoggedIn()) {\n+            throw new IllegalStateException(\"Needs user login before execute this API\");\n+        }\n+        if (TextUtils.isEmpty(endNodeThingID)) {\n+            throw new IllegalArgumentException(\"thingID is null or empty\");\n+        }\n+        if (TextUtils.isEmpty(endNodeVenderThingID)) {\n+            throw new IllegalArgumentException(\"venderThingID is null or empty\");\n+        }\n+        String path = MessageFormat.format(\"/{0}/apps/{1}/gateway/end-nodes/THING_ID:{2}\", this.app.getSiteName(), this.app.getAppID(), endNodeThingID);\n+        String url = Path.combine(this.gatewayAddress.toString(), path);\n+        Map<String, String> headers = this.newHeader();\n+\n+        JSONObject requestBody = new JSONObject();\n+        try {\n+            requestBody.put(\"vendorThingID\", endNodeVenderThingID);\n+        } catch (JSONException e) {\n+            // Won’t happen\n+        }\n+        IoTRestRequest request = new IoTRestRequest(url, IoTRestRequest.Method.PUT, headers, MediaTypes.MEDIA_TYPE_JSON, requestBody);\n+        this.restClient.sendRequest(request);\n+    }\n+\n+    /**\n+     * Get information of the Gateway.\n+     * When the end user replaces the Gateway, Gateway App/End Node App need to obtain the new Gateway’s vendorThingID.\n+     *\n+     * @return Gateway Information.\n+     * @throws ThingIFException\n+     * @throws IllegalStateException Thrown when user is not logged in.\n+     */\n+    @WorkerThread\n+    @NonNull\n+    public GatewayInformation getGatewayInformation() throws ThingIFException {\n+        if (!isLoggedIn()) {\n+            throw new IllegalStateException(\"Needs user login before execute this API\");\n+        }\n+        String path = \"/gateway-info\";\n+        String url = Path.combine(this.gatewayAddress.toString(), path);\n+        Map<String, String> headers = this.newHeader();\n+\n+        IoTRestRequest request = new IoTRestRequest(url, IoTRestRequest.Method.GET, headers);\n+        JSONObject responseBody = this.restClient.sendRequest(request);\n+        return new GatewayInformation(responseBody.optString(\"vendorThingID\", null));","path":"thingif/src/main/java/com/kii/thingif/gateway/GatewayAPI.java","position":283,"original_position":283,"commit_id":"7e907354eb6d00584ce53ef0a7d807a4106c73f7","original_commit_id":"7e907354eb6d00584ce53ef0a7d807a4106c73f7","user":{"login":"naoki-akimoto","id":1961578,"avatar_url":"https://avatars.githubusercontent.com/u/1961578?v=3","gravatar_id":"","url":"https://api.github.com/users/naoki-akimoto","html_url":"https://github.com/naoki-akimoto","followers_url":"https://api.github.com/users/naoki-akimoto/followers","following_url":"https://api.github.com/users/naoki-akimoto/following{/other_user}","gists_url":"https://api.github.com/users/naoki-akimoto/gists{/gist_id}","starred_url":"https://api.github.com/users/naoki-akimoto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/naoki-akimoto/subscriptions","organizations_url":"https://api.github.com/users/naoki-akimoto/orgs","repos_url":"https://api.github.com/users/naoki-akimoto/repos","events_url":"https://api.github.com/users/naoki-akimoto/events{/privacy}","received_events_url":"https://api.github.com/users/naoki-akimoto/received_events","type":"User","site_admin":false},"body":"iOS側の実装を進めていて思ったのですが、GatewayInformationってnullを許容するのでしょうか？\r\nクラス自体の実装にはアノテーションが無いのでわからないのですが、\r\n[ドキュメント](https://sites.google.com/a/kii.com/kii-cloud-docs/home/iot-cloud/5-gateway/gateway-agent-local-rest-interface)だとvendorThingIDはRequiredになってます。","created_at":"2016-04-21T12:08:27Z","updated_at":"2016-04-21T12:08:27Z","html_url":"https://github.com/KiiPlatform/thing-if-AndroidSDK/pull/78#discussion_r60568881","pull_request_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/78","_links":{"self":{"href":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/comments/60568881"},"html":{"href":"https://github.com/KiiPlatform/thing-if-AndroidSDK/pull/78#discussion_r60568881"},"pull_request":{"href":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/78"}}},"pull_request":{"url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/78","id":66793229,"html_url":"https://github.com/KiiPlatform/thing-if-AndroidSDK/pull/78","diff_url":"https://github.com/KiiPlatform/thing-if-AndroidSDK/pull/78.diff","patch_url":"https://github.com/KiiPlatform/thing-if-AndroidSDK/pull/78.patch","issue_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/issues/78","number":78,"state":"open","locked":false,"title":"New api for gateway as2.0","user":{"login":"nfukuzaki","id":1865615,"avatar_url":"https://avatars.githubusercontent.com/u/1865615?v=3","gravatar_id":"","url":"https://api.github.com/users/nfukuzaki","html_url":"https://github.com/nfukuzaki","followers_url":"https://api.github.com/users/nfukuzaki/followers","following_url":"https://api.github.com/users/nfukuzaki/following{/other_user}","gists_url":"https://api.github.com/users/nfukuzaki/gists{/gist_id}","starred_url":"https://api.github.com/users/nfukuzaki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nfukuzaki/subscriptions","organizations_url":"https://api.github.com/users/nfukuzaki/orgs","repos_url":"https://api.github.com/users/nfukuzaki/repos","events_url":"https://api.github.com/users/nfukuzaki/events{/privacy}","received_events_url":"https://api.github.com/users/nfukuzaki/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-04-18T02:57:36Z","updated_at":"2016-04-21T12:08:27Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d8af43b0474b73708375f44de209c90d184f448a","assignee":{"login":"satoshikumano","id":1525882,"avatar_url":"https://avatars.githubusercontent.com/u/1525882?v=3","gravatar_id":"","url":"https://api.github.com/users/satoshikumano","html_url":"https://github.com/satoshikumano","followers_url":"https://api.github.com/users/satoshikumano/followers","following_url":"https://api.github.com/users/satoshikumano/following{/other_user}","gists_url":"https://api.github.com/users/satoshikumano/gists{/gist_id}","starred_url":"https://api.github.com/users/satoshikumano/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/satoshikumano/subscriptions","organizations_url":"https://api.github.com/users/satoshikumano/orgs","repos_url":"https://api.github.com/users/satoshikumano/repos","events_url":"https://api.github.com/users/satoshikumano/events{/privacy}","received_events_url":"https://api.github.com/users/satoshikumano/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/78/commits","review_comments_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/78/comments","review_comment_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/comments{/number}","comments_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/issues/78/comments","statuses_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/statuses/7e907354eb6d00584ce53ef0a7d807a4106c73f7","head":{"label":"KiiPlatform:new_api_for_gateway_AS2.0","ref":"new_api_for_gateway_AS2.0","sha":"7e907354eb6d00584ce53ef0a7d807a4106c73f7","user":{"login":"KiiPlatform","id":3078752,"avatar_url":"https://avatars.githubusercontent.com/u/3078752?v=3","gravatar_id":"","url":"https://api.github.com/users/KiiPlatform","html_url":"https://github.com/KiiPlatform","followers_url":"https://api.github.com/users/KiiPlatform/followers","following_url":"https://api.github.com/users/KiiPlatform/following{/other_user}","gists_url":"https://api.github.com/users/KiiPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/KiiPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KiiPlatform/subscriptions","organizations_url":"https://api.github.com/users/KiiPlatform/orgs","repos_url":"https://api.github.com/users/KiiPlatform/repos","events_url":"https://api.github.com/users/KiiPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/KiiPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":40101524,"name":"thing-if-AndroidSDK","full_name":"KiiPlatform/thing-if-AndroidSDK","owner":{"login":"KiiPlatform","id":3078752,"avatar_url":"https://avatars.githubusercontent.com/u/3078752?v=3","gravatar_id":"","url":"https://api.github.com/users/KiiPlatform","html_url":"https://github.com/KiiPlatform","followers_url":"https://api.github.com/users/KiiPlatform/followers","following_url":"https://api.github.com/users/KiiPlatform/following{/other_user}","gists_url":"https://api.github.com/users/KiiPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/KiiPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KiiPlatform/subscriptions","organizations_url":"https://api.github.com/users/KiiPlatform/orgs","repos_url":"https://api.github.com/users/KiiPlatform/repos","events_url":"https://api.github.com/users/KiiPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/KiiPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/KiiPlatform/thing-if-AndroidSDK","description":"","fork":false,"url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK","forks_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/forks","keys_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/keys{/key_id}","collaborators_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/teams","hooks_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/hooks","issue_events_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/issues/events{/number}","events_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/events","assignees_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/assignees{/user}","branches_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/branches{/branch}","tags_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/tags","blobs_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/git/refs{/sha}","trees_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/git/trees{/sha}","statuses_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/statuses/{sha}","languages_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/languages","stargazers_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/stargazers","contributors_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/contributors","subscribers_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/subscribers","subscription_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/subscription","commits_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/commits{/sha}","git_commits_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/git/commits{/sha}","comments_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/comments{/number}","issue_comment_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/issues/comments{/number}","contents_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/contents/{+path}","compare_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/compare/{base}...{head}","merges_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/merges","archive_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/downloads","issues_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/issues{/number}","pulls_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls{/number}","milestones_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/milestones{/number}","notifications_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/labels{/name}","releases_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/releases{/id}","deployments_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/deployments","created_at":"2015-08-03T02:37:01Z","updated_at":"2016-04-19T03:51:53Z","pushed_at":"2016-04-21T07:17:08Z","git_url":"git://github.com/KiiPlatform/thing-if-AndroidSDK.git","ssh_url":"git@github.com:KiiPlatform/thing-if-AndroidSDK.git","clone_url":"https://github.com/KiiPlatform/thing-if-AndroidSDK.git","svn_url":"https://github.com/KiiPlatform/thing-if-AndroidSDK","homepage":null,"size":702,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":3,"forks":3,"open_issues":3,"watchers":1,"default_branch":"master"}},"base":{"label":"KiiPlatform:develop","ref":"develop","sha":"a76c9744e06c2975583de5806752b38142e89079","user":{"login":"KiiPlatform","id":3078752,"avatar_url":"https://avatars.githubusercontent.com/u/3078752?v=3","gravatar_id":"","url":"https://api.github.com/users/KiiPlatform","html_url":"https://github.com/KiiPlatform","followers_url":"https://api.github.com/users/KiiPlatform/followers","following_url":"https://api.github.com/users/KiiPlatform/following{/other_user}","gists_url":"https://api.github.com/users/KiiPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/KiiPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KiiPlatform/subscriptions","organizations_url":"https://api.github.com/users/KiiPlatform/orgs","repos_url":"https://api.github.com/users/KiiPlatform/repos","events_url":"https://api.github.com/users/KiiPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/KiiPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":40101524,"name":"thing-if-AndroidSDK","full_name":"KiiPlatform/thing-if-AndroidSDK","owner":{"login":"KiiPlatform","id":3078752,"avatar_url":"https://avatars.githubusercontent.com/u/3078752?v=3","gravatar_id":"","url":"https://api.github.com/users/KiiPlatform","html_url":"https://github.com/KiiPlatform","followers_url":"https://api.github.com/users/KiiPlatform/followers","following_url":"https://api.github.com/users/KiiPlatform/following{/other_user}","gists_url":"https://api.github.com/users/KiiPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/KiiPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KiiPlatform/subscriptions","organizations_url":"https://api.github.com/users/KiiPlatform/orgs","repos_url":"https://api.github.com/users/KiiPlatform/repos","events_url":"https://api.github.com/users/KiiPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/KiiPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/KiiPlatform/thing-if-AndroidSDK","description":"","fork":false,"url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK","forks_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/forks","keys_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/keys{/key_id}","collaborators_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/teams","hooks_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/hooks","issue_events_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/issues/events{/number}","events_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/events","assignees_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/assignees{/user}","branches_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/branches{/branch}","tags_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/tags","blobs_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/git/refs{/sha}","trees_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/git/trees{/sha}","statuses_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/statuses/{sha}","languages_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/languages","stargazers_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/stargazers","contributors_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/contributors","subscribers_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/subscribers","subscription_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/subscription","commits_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/commits{/sha}","git_commits_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/git/commits{/sha}","comments_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/comments{/number}","issue_comment_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/issues/comments{/number}","contents_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/contents/{+path}","compare_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/compare/{base}...{head}","merges_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/merges","archive_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/downloads","issues_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/issues{/number}","pulls_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls{/number}","milestones_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/milestones{/number}","notifications_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/labels{/name}","releases_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/releases{/id}","deployments_url":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/deployments","created_at":"2015-08-03T02:37:01Z","updated_at":"2016-04-19T03:51:53Z","pushed_at":"2016-04-21T07:17:08Z","git_url":"git://github.com/KiiPlatform/thing-if-AndroidSDK.git","ssh_url":"git@github.com:KiiPlatform/thing-if-AndroidSDK.git","clone_url":"https://github.com/KiiPlatform/thing-if-AndroidSDK.git","svn_url":"https://github.com/KiiPlatform/thing-if-AndroidSDK","homepage":null,"size":702,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":3,"forks":3,"open_issues":3,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/78"},"html":{"href":"https://github.com/KiiPlatform/thing-if-AndroidSDK/pull/78"},"issue":{"href":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/issues/78"},"comments":{"href":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/issues/78/comments"},"review_comments":{"href":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/78/comments"},"review_comment":{"href":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/pulls/78/commits"},"statuses":{"href":"https://api.github.com/repos/KiiPlatform/thing-if-AndroidSDK/statuses/7e907354eb6d00584ce53ef0a7d807a4106c73f7"}}}}