/** * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. * * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, * copy, modify, and distribute this software in source code or binary form for use * in connection with the web services and APIs provided by Facebook. * * As with any software that integrates with the Facebook platform, your use of * this software is subject to the Facebook Developer Principles and Policies * [http://developers.facebook.com/policy/]. This copyright notice shall be * included in all copies or substantial portions of the software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.facebook.internal; import com.facebook.FacebookException; import com.facebook.internal.NativeProtocol; import com.facebook.internal.Validate; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; /** * com.facebook.internal is solely for the use of other packages within the Facebook SDK for * Android. Use of any of the classes in this package is unsupported, and they may be modified or * removed without warning at any time. * <p/> * This class provides utility methods that are useful in graph API interactions. */ public class GraphUtil { private static final String[] dateFormats = new String[] { "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd", }; /** * Creates a JSONObject for an open graph action that is suitable for posting. * @param type the Open Graph action type for the object, or null if it will be specified later * @return a JSONObject */ public static JSONObject createOpenGraphActionForPost(String type) { JSONObject action = new JSONObject(); if (type != null) { try { action.put("type", type); } catch (JSONException e) { throw new FacebookException( "An error occurred while setting up the open graph action", e); } } return action; } /** * Creates a JSONObject for an open graph object that is suitable for posting. * @param type the Open Graph object type for the object, or null if it will be specified later * @return a JSONObject */ public static JSONObject createOpenGraphObjectForPost(String type) { return createOpenGraphObjectForPost(type, null, null, null, null, null, null); } /** * Creates a JSONObject for an open graph object that is suitable for posting. * @param type the Open Graph object type for the object, or null if it will be specified later * @param title the title of the object, or null if it will be specified later * @param imageUrl the URL of an image associated with the object, or null * @param url the URL associated with the object, or null * @param description the description of the object, or null * @param objectProperties the properties of the open graph object * @param id the id of the object if the post is for update * @return a JSONObject */ public static JSONObject createOpenGraphObjectForPost( String type, String title, String imageUrl, String url, String description, JSONObject objectProperties, String id) { JSONObject openGraphObject = new JSONObject(); try { if (type != null) { openGraphObject.put("type", type); } openGraphObject.put("title", title); if (imageUrl != null) { JSONObject imageUrlObject = new JSONObject(); imageUrlObject.put("url", imageUrl); JSONArray imageUrls = new JSONArray(); imageUrls.put(imageUrlObject); openGraphObject.put("image", imageUrls); } openGraphObject.put("url", url); openGraphObject.put("description", description); openGraphObject.put(NativeProtocol.OPEN_GRAPH_CREATE_OBJECT_KEY, true); if (objectProperties != null) { openGraphObject.put("data", objectProperties); } if (id != null) { openGraphObject.put("id", id); } } catch (JSONException e) { throw new FacebookException("An error occurred while setting up the graph object", e); } return openGraphObject; } /** * Determines if the open graph object is for posting * @param object The open graph object to check * @return True if the open graph object was created for posting */ public static boolean isOpenGraphObjectForPost(JSONObject object) { return object != null ? object.optBoolean(NativeProtocol.OPEN_GRAPH_CREATE_OBJECT_KEY) : false; } }