package de.twenty11.skysail.server.ext.facebook.resources;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.restlet.data.Form;
import org.restlet.resource.ResourceException;
import de.twenty11.skysail.common.Presentation;
import de.twenty11.skysail.common.PresentationStyle;
import de.twenty11.skysail.common.responses.SkysailResponse;
import de.twenty11.skysail.server.core.restlet.ListServerResource2;
import de.twenty11.skysail.server.ext.facebook.FacebookApplication;
import de.twenty11.skysail.server.ext.facebook.domain.FacebookUser;
@Presentation(preferred = PresentationStyle.LIST2)
public class FriendsResource extends ListServerResource2<FacebookUser> {
private final ObjectMapper mapper = new ObjectMapper();
private String myFriendsOnFacebookUrl;
private FacebookApplication facebookApp;
private String currentUser;
@Override
protected void doInit() throws ResourceException {
facebookApp = (FacebookApplication) getApplication();
currentUser = getRequest().getChallengeResponse().getIdentifier();
myFriendsOnFacebookUrl = "https://graph.facebook.com/1395451850/friends";
}
@Override
public SkysailResponse<List<FacebookUser>> getEntities() {
return super.getEntities("Facebook Friends");
}
@Override
protected List<FacebookUser> getData() {
JsonNode jsonRootNode;
List<FacebookUser> friends = new ArrayList<FacebookUser>();
try {
String friendsLink = myFriendsOnFacebookUrl + "?access_token=";
friendsLink += facebookApp.getAccessToken(currentUser);
jsonRootNode = mapper.readTree(new URL(friendsLink));
JsonNode data = jsonRootNode.get("data");
if (data != null) {
Iterator<JsonNode> elements = data.getElements();
while (elements.hasNext()) {
JsonNode next = elements.next();
friends.add(new FacebookUser(next, null));
}
}
return friends;
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
@Override
public FacebookUser getData(Form form) {
// TODO Auto-generated method stub
return null;
}
@Override
public SkysailResponse<?> addEntity(FacebookUser entity) {
// TODO Auto-generated method stub
return null;
}
}