package com.sromku.simple.fb;
import com.sromku.simple.fb.entities.Profile;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* All facebook permissions.
*
* @author sromku
* @version Graph API v2.4
*/
public enum Permission {
/**
* This permission not longer in use in latest graph versions.
* Please us Permission#USER_ABOUT_ME instead.
*
* Provides access to a subset of items that are part of a person's public
* profile. These {@link Profile} fields can be retrieved by using this
* permission:<br>
* <ul>
* <li>{@link Profile.Properties#ID ID}</li>
* <li>{@link Profile.Properties#NAME NAME}</li>
* <li>{@link Profile.Properties#FIRST_NAME FIRST_NAME}</li>
* <li>{@link Profile.Properties#LAST_NAME LAST_NAME}</li>
* <li>{@link Profile.Properties#LINK LINK}</li>
* <li>{@link Profile.Properties#GENDER GENDER}</li>
* <li>{@link Profile.Properties#LOCALE LOCALE}</li>
* <li>{@link Profile.Properties#AGE_RANGE AGE_RANGE}</li>
* </ul>
*
*/
@Deprecated
PUBLIC_PROFILE("public_profile", Type.READ),
/**
* Provides access to {@link Profile.Properties#BIO BIO} property of the
* {@link Profile}
*/
USER_ABOUT_ME("user_about_me", Type.READ),
/**
* Provides access to all common books actions published by any app the
* person has used. This includes books they've read, want to read, rated or
* quoted.
*/
USER_ACTIONS_BOOKS("user_actions.books", Type.READ),
/**
* Provides access to all common Open Graph fitness actions published by any
* app the person has used. This includes runs, walks and bikes actions.
*/
USER_ACTIONS_FITNESS("user_actions.fitness", Type.READ),
/**
* Provides access to all common Open Graph music actions published by any
* app the person has used. This includes songs they've listened to, and
* playlists they've created.
*/
USER_ACTIONS_MUSIC("user_actions.music", Type.READ),
/**
* Provides access to all common Open Graph news actions published by any
* app the person has used which publishes these actions. This includes news
* articles they've read or news articles they've published.
*/
USER_ACTIONS_NEWS("user_actions.news", Type.READ),
/**
* Provides access to all common Open Graph video actions published by any
* app the person has used which publishes these actions. This includes
* videos they've watched, videos they've rated and videos they want to
* watch.
*/
USER_ACTIONS_VIDEO("user_actions.video", Type.READ),
/**
* This permission not longer in use in latest graph versions.
*
* Provides access to a person's list of activities as listed on their
* Profile. This is a subset of the pages they have liked, where those pages
* represent particular interests. This information is accessed through the
* activities connection on the user node.
*/
@Deprecated
USER_ACTIVITIES("user_activities", Type.READ),
/**
* Access the date and month of a person's birthday. This may or may not
* include the person's year of birth, dependent upon their privacy settings
* and the access token being used to query this field.
*/
USER_BIRTHDAY("user_birthday", Type.READ),
/**
* Provides access to {@link Profile.Properties#EDUCATION EDUCATION}
* property of the {@link Profile}
*/
USER_EDUCATION_HISTORY("user_education_history", Type.READ),
/**
* Provides read-only access to the Events a person is hosting or has RSVP'd
* to.
*/
USER_EVENTS("user_events", Type.READ),
/**
* Provides access the list of friends that also use your app. In order for
* a person to show up in one person's friend list, <b>both people</b> must
* have decided to share their list of friends with your app and not
* disabled that permission during login.
*/
USER_FRIENDS("user_friends", Type.READ),
/**
* Provides access to read a person's game activity (scores, achievements)
* in any game the person has played.
*/
USER_GAMES_ACTIVITY("user_games_activity", Type.READ),
/**
* This permission not longer in use in latest graph versions.
* Please us Permission#USER_MANAGED_GROUPS instead.
*
* Enables your app to read the Groups a person is a member of through the
* groups edge on the User object. This permission does not allow you to
* create groups on behalf of a person. It is not possible to create groups
* via the Graph API
*/
@Deprecated
USER_GROUPS("user_groups", Type.READ),
/**
* Enables your app to read the Groups a person is a member of through the
* groups edge on the User object. This permission does not allow you to
* create groups on behalf of a person. It is not possible to create groups
* via the Graph API
*/
USER_MANAGED_GROUPS("user_managed_groups", Type.READ),
/**
* Provides access to a person's hometown location through the hometown
* field on the User object. This is set by the user on the Profile.
*/
USER_HOMETOWN("user_hometown", Type.READ),
/**
* This permission not longer in use in latest graph versions.
*
* Provides access to the list of interests in a person's Profile. This is a
* subset of the pages they have liked which represent particular interests.
*/
@Deprecated
USER_INTERESTS("user_interests", Type.READ),
/**
* Provides access to the list of all Facebook Pages and Open Graph objects
* that a person has liked. This list is available through the likes edge on
* the User object.
*/
USER_LIKES("user_likes", Type.READ),
/**
* Provides access to a person's current city through the location field on
* the User object. The current city is set by a person on their Profile.
*/
USER_LOCATION("user_location", Type.READ),
/**
* Provides access to the photos a person has uploaded or been tagged in.
* This is available through the photos edge on the User object.
*/
USER_PHOTOS("user_photos", Type.READ),
/**
* Provides access to a person's relationship status, significant other and
* family members as fields on the User object.
*/
USER_RELATIONSHIPS("user_relationships", Type.READ),
/**
* Provides access to a person's relationship interests as the interested_in
* field on the User object.
*/
USER_RELATIONSHIP_DETAILS("user_relationship_details", Type.READ),
/**
* Provides access to a person's religious and political affiliations.
*/
USER_RELIGION_POLITICS("user_religion_politics", Type.READ),
/**
* Provides access to a person's statuses. These are posts on Facebook which
* don't include links, videos or photos.
*/
USER_STATUS("user_status", Type.READ),
/**
* Provides access to the Places a person has been tagged at in photos,
* videos, statuses and links.
*/
USER_TAGGED_PLACES("user_tagged_places", Type.READ),
/**
* Provides access to the videos a person has uploaded or been tagged in
*/
USER_VIDEOS("user_videos", Type.READ),
/**
* Provides access to the person's personal website URL via the website
* field on the {@link Profile} entity.
*/
USER_WEBSITE("user_website", Type.READ),
/**
* Provides access to a person's work history and list of employers via the
* work field on the {@link Profile} entity.
*/
USER_WORK_HISTORY("user_work_history", Type.READ),
/**
* This permission not longer in use in latest graph versions.
* Please us Permission#READ_CUSTOM_FRIENDLISTS instead.
*
* Provides access to the names of custom lists a person has created to organize their friends.
* This is useful for rendering an audience selector when someone is publishing stories
* to Facebook from your app.
*
* This permission does not give access to a list of person's friends. If you want to access
* a person's friends who also use your app, you should use the user_friends permission.
*/
@Deprecated
READ_FRIENDLISTS("read_friendlists", Type.READ),
/**
* Provides access to the names of custom lists a person has created to organize their friends.
* This is useful for rendering an audience selector when someone is publishing stories
* to Facebook from your app.
*
* This permission does not give access to a list of person's friends. If you want to access
* a person's friends who also use your app, you should use the user_friends permission.
*/
READ_CUSTOM_FRIENDLISTS("read_custom_friendlists", Type.READ),
/**
* Provides read-only access to the Insights data for Pages, Apps and web
* domains the person owns.
*/
READ_INSIGHTS("read_insights", Type.READ),
/**
* This permission not longer in use in latest graph versions.
*
* Provides the ability to read the messages in a person's Facebook Inbox
* through the inbox edge and the thread node
*/
@Deprecated
READ_MAILBOX("read_mailbox", Type.READ),
/**
* This permission not longer in use in latest graph versions.
* Please us Permission#USER_POSTS instead.
*
* Provides access to read the posts in a person's News Feed, or the posts
* on their Profile.
*/
@Deprecated
READ_STREAM("read_stream", Type.READ),
/**
* Provides the ability to read from the Page Inboxes of the Pages managed
* by a person. This permission is often used alongside the manage_pages
* permission.
*
* This permission does not let your app read the page owner's mailbox. It
* only applies to the page's mailbox.
*/
READ_PAGE_MAILBOX("read_page_mailboxes", Type.READ),
/**
* Provides access to the person's primary email address via the
* {@link Profile.Properties#EMAIL} property on the {@link Profile} object.<br>
* <br>
* <b>Note:</b><br>
* Even if you request the email permission it is not guaranteed you will
* get an email address. For example, if someone signed up for Facebook with
* a phone number instead of an email address, the email field may be empty.
*/
EMAIL("email", Type.READ),
/**
* Provides access to the posts on a person's Timeline. Includes their own posts,
* posts they are tagged in, and posts other people make on their Timeline.
*/
USER_POSTS("user_posts", Type.READ),
/**
* Provides the access to Ads Insights API to pull ads report information for ad
* accounts you have access to.
*/
ADS_READ("ads_read", Type.READ),
/**
* Provides read-only access to the Audience Network Insights data for Apps the person owns.
*/
READ_AUDIENCE_NETWORK_INSIGHTS("read_audience_network_insights", Type.READ),
/**
* Provides access to publish Posts, Open Graph actions, achievements,
* scores and other activity on behalf of a person using your app.
*/
PUBLISH_ACTION("publish_actions", Type.PUBLISH),
/**
* Provides the ability to set a person's attendee status on Facebook Events
* (e.g. attending, maybe, or declined). This permission does not let you
* invite people to an event. This permission does not let you update an
* event's details. This permission does not let you create an event. There
* is no way to create an event via the API as of Graph API v2.0.
*/
RSVP_EVENT("rsvp_event", Type.PUBLISH),
/**
* This permission not longer in use in latest graph versions.
*
* Enables your app to read a person's notifications and mark them as read.
* This permission does not let you send notifications to a person.
*/
@Deprecated
MANAGE_NOTIFICATIONS("manage_notifications", Type.PUBLISH),
/**
* Enables your app to retrieve Page Access Tokens for the Pages and Apps
* that the person administrates.
*/
MANAGE_PAGES("manage_pages", Type.PUBLISH);
/**
* Permission type enum: <li>READ</li> <li>PUBLISH</li><br>
*/
public static enum Type {
PUBLISH,
READ;
};
public static enum Role {
/**
* Manage admins<br>
* Full Admin
*/
ADMINISTER,
/**
* Edit the Page and add apps<br>
* Full Admin, Content Creator
*/
EDIT_PROFILE,
/**
* Create posts as the Page<br>
* Full Admin, Content Creator
*/
CREATE_CONTENT,
/**
* Respond to and delete comments, send messages as the Page<br>
* Full Admin, Content Creator, Moderator
*/
MODERATE_CONTENT,
/**
* Create ads and unpublished page posts<br>
* Full Admin, Content Creator, Moderator, Ads Creator
*/
CREATE_ADS,
/**
* View Insights<br>
* Full Admin, Content Creator, Moderator, Ads Creator, Insights Manager
*/
BASIC_ADMIN
}
private final String mValue;
private final Type mType;
private Permission(String value, Type type) {
mValue = value;
mType = type;
}
public String getValue() {
return mValue;
}
public Type getType() {
return mType;
}
public static Permission fromValue(String permissionValue) {
for (Permission permission : values()) {
if (permission.mValue.equals(permissionValue)) {
return permission;
}
}
return null;
}
public static List<Permission> convert(Collection<String> rawPermissions) {
if (rawPermissions == null) {
return null;
}
List<Permission> permissions = new ArrayList<Permission>();
for (Permission permission : values()) {
if (rawPermissions.contains(permission.getValue())) {
permissions.add(permission);
}
}
return permissions;
}
public static List<String> convert(List<Permission> permissions) {
if (permissions == null) {
return null;
}
List<String> rawPermissions = new ArrayList<String>();
for (Permission permission : permissions) {
rawPermissions.add(permission.getValue());
}
return rawPermissions;
}
public static List<String> fetchPermissions(List<Permission> permissions, Permission.Type type) {
List<String> perms = new ArrayList<String>();
for (Permission permission : permissions) {
if (type.equals(permission.getType())) {
perms.add(permission.getValue());
}
}
return perms;
}
}