/**
* Copyright 2010-present Facebook.
*
* 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.facebook.model;
import org.json.JSONObject;
import java.util.Date;
import java.util.List;
/**
* Provides a strongly-typed representation of an Open Graph Action.
* For more documentation of OG Actions, see: https://developers.facebook.com/docs/opengraph/actions/
*
* Note that this interface is intended to be used with GraphObject.Factory or OpenGraphAction.Factory
* and not implemented directly.
*/
public interface OpenGraphAction extends GraphObject {
/**
* Gets the ID of the action.
* @return the ID
*/
String getId();
/**
* Sets the ID of the action.
* @param id the ID
*/
void setId(String id);
/**
* Gets the type of the action, which is a string in the form "mynamespace:mytype".
* @return the type
*/
String getType();
/**
* Sets the type of the action, which is a string in the form "mynamespace:mytype".
* @param type the type
*/
void setType(String type);
/**
* Gets the start time of the action.
* @return the start time
*/
Date getStartTime();
/**
* Sets the start time of the action.
* @param startTime the start time
*/
void setStartTime(Date startTime);
/**
* Gets the end time of the action.
* @return the end time
*/
Date getEndTime();
/**
* Sets the end time of the action.
* @param endTime the end time
*/
void setEndTime(Date endTime);
/**
* Gets the time the action was published, if any.
* @return the publish time
*/
Date getPublishTime();
/**
* Sets the time the action was published.
* @param publishTime the publish time
*/
void setPublishTime(Date publishTime);
/**
* Gets the time the action was created.
* @return the creation time
*/
public Date getCreatedTime();
/**
* Sets the time the action was created.
* @param createdTime the creation time
*/
public void setCreatedTime(Date createdTime);
/**
* Gets the time the action expires at.
* @return the expiration time
*/
public Date getExpiresTime();
/**
* Sets the time the action expires at.
* @param expiresTime the expiration time
*/
public void setExpiresTime(Date expiresTime);
/**
* Gets the unique string which will be passed to the OG Action owner's website
* when a user clicks through this action on Facebook.
* @return the ref string
*/
String getRef();
/**
* Sets the unique string which will be passed to the OG Action owner's website
* when a user clicks through this action on Facebook.
* @param ref the ref string
*/
void setRef(String ref);
/**
* Gets the message assoicated with the action.
* @return the message
*/
String getMessage();
/**
* Sets the message associated with the action.
* @param message the message
*/
void setMessage(String message);
/**
* Gets the place where the action took place.
* @return the place
*/
GraphPlace getPlace();
/**
* Sets the place where the action took place.
* @param place the place
*/
void setPlace(GraphPlace place);
/**
* Gets the list of profiles that were tagged in the action.
* @return the profiles that were tagged in the action
*/
GraphObjectList<GraphObject> getTags();
/**
* Sets the list of profiles that were tagged in the action.
* @param tags the profiles that were tagged in the action
*/
void setTags(List<? extends GraphObject> tags);
/**
* Gets the images that were associated with the action.
* @return the images
*/
List<JSONObject> getImage();
/**
* Sets the images that were associated with the action.
* @param image the images
*/
void setImage(List<JSONObject> image);
/**
* Sets the images associated with the Open Graph action by specifying their URLs. This is a helper
* that will create GraphObjects with the correct URLs and populate the property with those objects.
* @param urls the URLs
*/
@CreateGraphObject("url")
@PropertyName("image")
void setImageUrls(List<String> urls);
/**
* Gets the from-user associated with the action.
* @return the user
*/
GraphUser getFrom();
/**
* Sets the from-user associated with the action.
* @param from the from-user
*/
void setFrom(GraphUser from);
/**
* Gets the 'likes' that have been performed on this action.
* @return the likes
*/
public JSONObject getLikes();
/**
* Sets the 'likes' that have been performed on this action.
* @param likes the likes
*/
public void setLikes(JSONObject likes);
/**
* Gets the application that created this action.
* @return the application
*/
GraphObject getApplication();
/**
* Sets the application that created this action.
* @param application the application
*/
void setApplication(GraphObject application);
/**
* Gets the comments that have been made on this action.
* @return the comments
*/
public JSONObject getComments();
/**
* Sets the comments that have been made on this action.
* @param comments the comments
*/
void setComments(JSONObject comments);
/**
* Gets the type-specific data for this action; for instance, any properties
* referencing Open Graph objects will appear under here.
* @return a GraphObject representing the type-specific data
*/
GraphObject getData();
/**
* Sets the type-specific data for this action.
* @param data a GraphObject representing the type-specific data
*/
void setData(GraphObject data);
/**
* Gets whether the action has been explicitly shared by the user. See
* <a href="https://developers.facebook.com/docs/opengraph/guides/explicit-sharing/">Explicit Sharing</a> for
* more information.
* @return true if this action was explicitly shared
*/
@PropertyName("fb:explicitly_shared")
boolean getExplicitlyShared();
/**
* Sets whether the action has been explicitly shared by the user. See
* <a href="https://developers.facebook.com/docs/opengraph/guides/explicit-sharing/">Explicit Sharing</a> for
* more information. You should only specify this property if explicit sharing has been enabled for an
* Open Graph action type.
* @param explicitlyShared true if this action was explicitly shared
*/
@PropertyName("fb:explicitly_shared")
void setExplicitlyShared(boolean explicitlyShared);
/**
* Exposes helpers for creating instances of OpenGraphAction.
*/
final class Factory {
/**
* Creates an OpenGraphAction suitable for posting via, e.g., a native Share dialog.
* @return an OpenGraphAction
*/
@Deprecated
public static OpenGraphAction createForPost() {
return createForPost(OpenGraphAction.class, null);
}
/**
* Creates an OpenGraphAction suitable for posting via, e.g., a native Share dialog.
* @param type the Open Graph action type for the action, or null if it will be specified later
* @return an OpenGraphAction
*/
public static OpenGraphAction createForPost(String type) {
return createForPost(OpenGraphAction.class, type);
}
/**
* Creates an OpenGraphAction suitable for posting via, e.g., a native Share dialog.
* @param type the Open Graph action type for the action, or null if it will be specified later
* @param graphObjectClass the OpenGraphAction-derived type to return
* @return an OpenGraphAction
*/
public static <T extends OpenGraphAction> T createForPost(Class<T> graphObjectClass, String type) {
T object = GraphObject.Factory.create(graphObjectClass);
if (type != null) {
object.setType(type);
}
return object;
}
}
}