package qa.qcri.aidr.data.service;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.Date;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import qa.qcri.aidr.data.config.Configurations;
import qa.qcri.aidr.data.util.CommonUtil;
@Service
public class PersisterService {
@Autowired
private CommonUtil commonUtil;
public String generateDownloadTwitterLink(String code, String queryString, String userName, Integer count, boolean removeRetweet, String jsonType, Date createdTimestamp) throws Exception {
String url = "";
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -3);
if(createdTimestamp.before(cal.getTime())){
url = Configurations.getPersisterURLForOlderCollections() ;
}
else{
url = Configurations.getPersisterURL();
}
String downloadLink = null;
if(commonUtil.isCurrentUserIsAdmin()){
url += "/AIDRPersister/webresources/taggerPersister/filter/";
if(jsonType.equalsIgnoreCase("CSV")){
url += "genCSV";
}
else if (jsonType.equalsIgnoreCase("JSON")){
url += "genJson";
}
url += "?collectionCode=" + code + "&exportLimit=" + count + "&jsonType=" + jsonType + "&userName=" + userName + "&removeRetweet=" + removeRetweet;
downloadLink = sendPost(queryString, url);
} else {
url += "/AIDRPersister/webresources/taggerPersister/filter/genTweetIdsOnly";
url += "?collectionCode=" + code + "&exportLimit=" + count + "&userName=" + userName + "&removeRetweet=" + removeRetweet;
downloadLink = sendPost("", url);
}
return downloadLink;
}
public String sendPost(String data, String url) {
int responseCode = -1;
HttpClient httpClient = new DefaultHttpClient();
String str = "";
try {
HttpPost request = new HttpPost(url);
StringEntity params =new StringEntity(data, "UTF-8");
params.setContentType("application/json");
request.addHeader("content-type", "application/json");
request.setEntity(params);
HttpResponse response = httpClient.execute(request);
responseCode = response.getStatusLine().getStatusCode();
if ( responseCode == 200 || responseCode == 204) {
if(response.getEntity()!=null){
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
while ((output = br.readLine()) != null) {
str = str + output;
}
}
}
else{
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
}catch (Exception ex) {
return null;
} finally {
httpClient.getConnectionManager().shutdown();
}
return str;
}
public String sendGET(String url) {
int responseCode = -1;
HttpClient httpClient = new DefaultHttpClient();
String str = "";
try {
HttpGet request = new HttpGet(url);
request.addHeader("content-type", "application/json");
HttpResponse response = httpClient.execute(request);
responseCode = response.getStatusLine().getStatusCode();
if ( responseCode == 200 || responseCode == 204) {
if(response.getEntity()!=null){
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
while ((output = br.readLine()) != null) {
str = str + output;
}
}
}
else{
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
}catch (Exception ex) {
return null;
} finally {
httpClient.getConnectionManager().shutdown();
}
return str;
}
public String generateDownloadFacebookLink(String code, Integer count) {
String url = Configurations.getPersisterURL();
String downloadLink = null;
url += "/AIDRPersister/webresources/taggerPersister/downloadFacebookPosts";
url += "?collectionCode=" + code + "&exportLimit=" + count;
downloadLink = sendGET(url);
return downloadLink;
}
}