com.twitter.hbc.twitter4j.parser.JSONObjectParser.java Source code

Java tutorial

Introduction

Here is the source code for com.twitter.hbc.twitter4j.parser.JSONObjectParser.java

Source

/**
 * Copyright 2013 Twitter, Inc.
 * 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.
 **/

package com.twitter.hbc.twitter4j.parser;

import com.google.common.primitives.Longs;
import com.twitter.hbc.twitter4j.message.DisconnectMessage;
import twitter4j.StatusDeletionNotice;
import twitter4j.JSONArray;
import twitter4j.JSONException;
import twitter4j.JSONObject;
import twitter4j.JSONObjectType;

public class JSONObjectParser {

    public static StatusDeletionNotice parseStatusDelete(JSONObject json) throws JSONException {
        JSONObject statusDelete = json.getJSONObject("delete").getJSONObject("status");
        final long statusId = statusDelete.getLong("id");
        final long userId = statusDelete.getLong("user_id");
        return new StatusDeletionNotice() {
            @Override
            public long getStatusId() {
                return statusId;
            }

            @Override
            public long getUserId() {
                return userId;
            }

            @Override
            public int compareTo(StatusDeletionNotice o) {
                return Longs.compare(getStatusId(), o.getStatusId());
            }
        };
    }

    public static int parseTrackLimit(JSONObject json) throws JSONException {
        return json.getJSONObject("limit").getInt("track");
    }

    public static JSONObject parseEventSource(JSONObject json) throws JSONException {
        return json.getJSONObject("source");
    }

    public static JSONObject parseEventTarget(JSONObject json) throws JSONException {
        return json.getJSONObject("target");
    }

    public static JSONObject parseEventTargetObject(JSONObject json) throws JSONException {
        return json.getJSONObject("target_object");
    }

    public static long[] parseFriendList(JSONObject json) throws JSONException {
        JSONArray friends = json.getJSONArray("friends");
        long[] friendIds = new long[friends.length()];
        for (int i = 0; i < friendIds.length; ++i) {
            friendIds[i] = friends.getLong(i);
        }
        return friendIds;
    }

    public static boolean hasSitestreamUser(JSONObject envelope) {
        return envelope.has("for_user");
    }

    public static long getSitestreamUser(JSONObject envelope) throws JSONException {
        return envelope.getLong("for_user");
    }

    public static boolean hasSitestreamMessage(JSONObject envelope) {
        return envelope.has("message");
    }

    public static JSONObject getSitestreamMessage(JSONObject envelope) throws JSONException {
        return envelope.getJSONObject("message");
    }

    public static boolean isControlStreamMessage(JSONObject message) throws JSONException {
        return message.has("control");
    }

    public static String getStreamId(JSONObject message) throws JSONException {
        String uri = message.getJSONObject("control").getString("control_uri");
        String[] split = uri.split("/");
        // do some basic validation to make sure the url is valid
        // url should look like this: /1.1/site/c/1_1_54e345d655ee3e8df359ac033648530bfbe26c5f
        if (split.length != 5) {
            throw new IllegalStateException("Unknown url format: " + uri);
        }
        return split[split.length - 1];
    }

    @Deprecated
    public static boolean isDisconnectMessage(JSONObject message) {
        return JSONObjectType.determine(message) == JSONObjectType.Type.DISCONNECTION;
    }

    public static boolean isRetweetMessage(JSONObject message) throws JSONException {
        Object event = message.opt("event");
        if (!(event instanceof String))
            return false;
        return "retweet".equals(event);
    }

    public static DisconnectMessage parseDisconnectMessage(JSONObject message) throws JSONException {
        JSONObject json = message.getJSONObject("disconnect");
        int code = json.getInt("code");
        String streamName = json.getString("stream_name");
        String reason = json.getString("reason");
        return new DisconnectMessage(code, streamName, reason);
    }
}