/*
* SMART FP7 - Search engine for MultimediA enviRonment generated contenT
* Webpage: http://smartfp7.eu
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* The Original Code is Copyright (c) 2012-2013 of Telesto Technologies
* All Rights Reserved
*
* Contributor(s):
* Xristos Smailis <smailisxristos@yahoo.com>
* Thanos Alexiou <thanos@telesto.gr>
*/
package eu.smartfp7.SocialNetworkDriver;
import eu.smartfp7.SocialNetworkManager.SocialNetworkInterface;
import eu.smartfp7.SocialNetworkManager.SocialNetworkPostListInterface;
import eu.smartfp7.SocialNetworkSearchResults.FacebookPageData;
import eu.smartfp7.SocialNetworkSearchResults.FacebookPostData;
import com.restfb.Connection;
import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.Parameter;
import com.restfb.types.Page;
import com.restfb.types.Post;
import java.util.ArrayList;
import java.util.Date;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElementWrapper;
/**
*
* @author OnTheSpot
*/
@XmlRootElement(name = "FacebookSearch")
public class FacebookDriver extends SocialNetworkInterface {
@XmlElement(name = "FacebookPost")
ArrayList<FacebookPostData> results;
@XmlElement(name = "FacebookPage")
ArrayList<FacebookPageData> resultPages;
private Connection<Post> publicSearch;
private FacebookClient facebookClient;
private Date OldestDate = new Date();
public void SearchForTermUsingGeolocation(String queryPar, int PageSize,
double latitude, double longitude, double radius) {
if (queryPar != null) {
facebookClient = new DefaultFacebookClient();
publicSearch = facebookClient.fetchConnection("search", Post.class,
Parameter.with("q", queryPar),
Parameter.with("type", "post"),
Parameter.with("limit", PageSize),
Parameter.with("place¢er", latitude + "," + longitude),
Parameter.with("distance", radius));
for (int i = 0; i < publicSearch.getData().size(); i++) {
if (publicSearch.getData().get(i).getMessage() != null) {
results.add(new FacebookPostData(publicSearch.getData()
.get(i)));
OldestDate = publicSearch.getData().get(i).getCreatedTime();
}
}
}
}
public void setNextPage() {
results = new ArrayList();
/*
* publicSearch = facebookClient.fetchConnectionPage(
* publicSearch.getNextPageUrl(), Post.class);
*/
facebookClient = new DefaultFacebookClient();
publicSearch = facebookClient.fetchConnectionPage(
publicSearch.getNextPageUrl(), Post.class);
for (int i = 0; i < publicSearch.getData().size(); i++) {
if (publicSearch.getData().get(i).getMessage() != null) {
results.add(new FacebookPostData(publicSearch.getData().get(i)));
}
}
}
public void setPreviousPage() {
results = new ArrayList();
/*
* publicSearch = facebookClient.fetchConnectionPage(
* publicSearch.getNextPageUrl(), Post.class);
*/
facebookClient = new DefaultFacebookClient();
publicSearch = facebookClient.fetchConnectionPage(
publicSearch.getPreviousPageUrl(), Post.class);
for (int i = 0; i < publicSearch.getData().size(); i++) {
if (publicSearch.getData().get(i).getMessage() != null) {
results.add(new FacebookPostData(publicSearch.getData().get(i)));
}
}
}
@Override
public ArrayList<SocialNetworkPostListInterface> getCurrentPageResults() {
ArrayList<SocialNetworkPostListInterface> convertedResults = new ArrayList();
for (int i = 0; i < results.size(); i++) {
convertedResults.add(results.get(i));
}
return convertedResults;
}
@Override
public void SearchForTerm(String queryPar, Integer PageSize) {
if (queryPar != null) {
results = new ArrayList();
facebookClient = new DefaultFacebookClient();
publicSearch = facebookClient.fetchConnection("search", Post.class,
Parameter.with("q", queryPar),
Parameter.with("type", "post"),
Parameter.with("limit", PageSize));
for (int i = 0; i < publicSearch.getData().size(); i++) {
if (publicSearch.getData().get(i).getMessage() != null) {
results.add(new FacebookPostData(publicSearch.getData()
.get(i)));
}
}
}
}
public void SearchFacebookPages(String queryPar, Integer PageSize) {
Connection<Page> publicSearch;
if (queryPar != null) {
resultPages = new ArrayList();
facebookClient = new DefaultFacebookClient();
publicSearch = facebookClient.fetchConnection("search", Page.class,
Parameter.with("q", queryPar),
Parameter.with("type", "page"),
Parameter.with("limit", PageSize));
for (int i = 0; i < publicSearch.getData().size(); i++) {
if (publicSearch.getData().get(i).getName() != null) {
resultPages.add(new FacebookPageData(publicSearch.getData()
.get(i)));
}
}
}
}
}