All Downloads are FREE. Search and download functionalities are using the official Maven repository.

twitter4j.TwitterObjectFactory Maven / Gradle / Ivy

There is a newer version: 4.1.2
Show newest version
package twitter4j;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Yusuke Yamamoto - yusuke at mac.com
 * @since Twitter4J 4.0.0
 */
public final class TwitterObjectFactory {
    private TwitterObjectFactory() {
        throw new AssertionError("not intended to be instantiated.");
    }

    private static final ThreadLocal rawJsonMap = new ThreadLocal() {
        @Override
        protected Map initialValue() {
            return new HashMap();
        }
    };

    /**
     * Returns a raw JSON form of the provided object.
* Note that raw JSON forms can be retrieved only from the same thread invoked the last method call and will become inaccessible once another method call * * @param obj target object to retrieve JSON * @return raw JSON * @since Twitter4J 2.1.7 */ public static String getRawJSON(Object obj) { if (!registeredAtleastOnce) { throw new IllegalStateException("Apparently jsonStoreEnabled is not set to true."); } Object json = rawJsonMap.get().get(obj); if (json instanceof String) { return (String) json; } else if (json != null) { // object must be instance of JSONObject return json.toString(); } else { return null; } } /** * Constructs a Status object from rawJSON string. * * @param rawJSON raw JSON form as String * @return Status * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static Status createStatus(String rawJSON) throws TwitterException { try { return new StatusJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs a User object from rawJSON string. * * @param rawJSON raw JSON form as String * @return User * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static User createUser(String rawJSON) throws TwitterException { try { return new UserJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs an AccountTotals object from rawJSON string. * * @param rawJSON raw JSON form as String * @return AccountTotals * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.9 */ public static AccountTotals createAccountTotals(String rawJSON) throws TwitterException { try { return new AccountTotalsJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs a Relationship object from rawJSON string. * * @param rawJSON raw JSON form as String * @return Relationship * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static Relationship createRelationship(String rawJSON) throws TwitterException { try { return new RelationshipJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs a Place object from rawJSON string. * * @param rawJSON raw JSON form as String * @return Place * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static Place createPlace(String rawJSON) throws TwitterException { try { return new PlaceJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs a SavedSearch object from rawJSON string. * * @param rawJSON raw JSON form as String * @return SavedSearch * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static SavedSearch createSavedSearch(String rawJSON) throws TwitterException { try { return new SavedSearchJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs a Trend object from rawJSON string. * * @param rawJSON raw JSON form as String * @return Trend * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static Trend createTrend(String rawJSON) throws TwitterException { try { return new TrendJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs a Trends object from rawJSON string. * * @param rawJSON raw JSON form as String * @return Trends * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static Trends createTrends(String rawJSON) throws TwitterException { return new TrendsJSONImpl(rawJSON); } /** * Constructs a IDs object from rawJSON string. * * @param rawJSON raw JSON form as String * @return IDs * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static IDs createIDs(String rawJSON) throws TwitterException { return new IDsJSONImpl(rawJSON); } /** * Constructs a RateLimitStatus object from rawJSON string. * * @param rawJSON raw JSON form as String * @return RateLimitStatus * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static Map createRateLimitStatus(String rawJSON) throws TwitterException { try { return RateLimitStatusJSONImpl.createRateLimitStatuses(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs a Category object from rawJSON string. * * @param rawJSON raw JSON form as String * @return Category * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static Category createCategory(String rawJSON) throws TwitterException { try { return new CategoryJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs a DirectMessage object from rawJSON string. * * @param rawJSON raw JSON form as String * @return DirectMessage * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static DirectMessage createDirectMessage(String rawJSON) throws TwitterException { try { return new DirectMessageJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs a Location object from rawJSON string. * * @param rawJSON raw JSON form as String * @return Location * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static Location createLocation(String rawJSON) throws TwitterException { try { return new LocationJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs a UserList object from rawJSON string. * * @param rawJSON raw JSON form as String * @return UserList * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.7 */ public static UserList createUserList(String rawJSON) throws TwitterException { try { return new UserListJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Constructs an OEmbed object from rawJSON string. * * @param rawJSON raw JSON form as String * @return OEmbed * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 3.0.2 */ public static OEmbed createOEmbed(String rawJSON) throws TwitterException { try { return new OEmbedJSONImpl(new JSONObject(rawJSON)); } catch (JSONException e) { throw new TwitterException(e); } } /** * Construct an object from rawJSON string. This method may be called * when you do not know what a given raw JSON string contains. It will * do the work of determining what type of object the JSON represents, * and constructing the respective object type. For example, if the JSON * contents represents a Status, then a Status will be returned. If it * represents a deletion notice, then a StatusDeletionNotice will be * returned. The caller can simply use instanceof to handle the returned * object as applicable. * NOTE: the raw JSONObject will be returned in cases where there isn't * a discrete respective object type that can be constructed. That way, * the caller can at least have access to the JSON itself. * * @param rawJSON raw JSON form as String * @return the respective constructed object, or the JSONObject in the * case where we cannot determine the object type. * @throws TwitterException when provided string is not a valid JSON string. * @since Twitter4J 2.1.9 */ public static Object createObject(String rawJSON) throws TwitterException { try { JSONObject json = new JSONObject(rawJSON); JSONObjectType.Type jsonObjectType = JSONObjectType.determine(json); switch (jsonObjectType) { case SENDER: return registerJSONObject(new DirectMessageJSONImpl(json.getJSONObject("direct_message")), json); case STATUS: return registerJSONObject(new StatusJSONImpl(json), json); case DIRECT_MESSAGE: return registerJSONObject(new DirectMessageJSONImpl(json.getJSONObject("direct_message")), json); case DELETE: return registerJSONObject(new StatusDeletionNoticeImpl(json.getJSONObject("delete").getJSONObject("status")), json); case LIMIT: // TODO: Perhaps there should be a TrackLimitationNotice object? // The onTrackLimitationNotice method could take that as an arg. return json; case SCRUB_GEO: return json; default: // The object type is unrecognized...just return the json return json; } } catch (JSONException e) { throw new TwitterException(e); } } /** * clear raw JSON forms associated with the current thread.
* * @since Twitter4J 2.1.7 */ static void clearThreadLocalMap() { rawJsonMap.get().clear(); } private static boolean registeredAtleastOnce = false; /** * associate a raw JSON form to the current thread
* * @since Twitter4J 2.1.7 */ static T registerJSONObject(T key, Object json) { registeredAtleastOnce = true; rawJsonMap.get().put(key, json); return key; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy