package qa.qcri.aidr.persister.api;
/**
* This class provides the REST APIs to manage the persister for a collection - start/stop and download based on various filters and requested file types.
* @author Imran, Koushik
*
*/
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.OPTIONS;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import net.minidev.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import qa.qcri.aidr.common.filter.DeserializeFilters;
import qa.qcri.aidr.common.filter.JsonQueryList;
import qa.qcri.aidr.common.values.DownloadType;
import qa.qcri.aidr.entity.FacebookDataFeed;
import qa.qcri.aidr.persister.tagger.RedisTaggerPersister;
import qa.qcri.aidr.service.FacebookDataFeedService;
import qa.qcri.aidr.utils.DownloadJsonType;
import qa.qcri.aidr.utils.GenericCache;
import qa.qcri.aidr.utils.JsonDeserializer;
import qa.qcri.aidr.utils.PersisterConfigurationProperty;
import qa.qcri.aidr.utils.PersisterConfigurator;
import qa.qcri.aidr.utils.ResultStatus;
@Path("taggerPersister")
@Component
public class Persister4TaggerAPI {
private static Logger logger = Logger.getLogger(Persister4TaggerAPI.class.getName());
@Context
private UriInfo context;
public Persister4TaggerAPI() {
}
@GET
@Produces("application/json")
@Consumes("application/json")
@Path("/start")
public Response startPersister(@QueryParam("file") String fileLocation, @QueryParam("collectionCode") String collectionCode) {
logger.info(collectionCode + ": In tagger persister start");
String response = "";
try {
fileLocation = PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_PERSISTER_FILE_PATH); //OVERRIDING PATH RECEIVED FROM EXTERNAL REQUEST
if (StringUtils.isNotEmpty(fileLocation) && StringUtils.isNotEmpty(collectionCode)) {
if (GenericCache.getInstance().getTaggerPersisterMap(collectionCode) != null) {
response = "A tagger persister is already running for this collection code [" + collectionCode + "]";
return Response.ok(response).build();
}
RedisTaggerPersister p = new RedisTaggerPersister(fileLocation, collectionCode);
p.startMe();
GenericCache.getInstance().setTaggerPersisterMap(collectionCode, p);
response = "Started tagger persisting to " + fileLocation;
return Response.ok(response).build();
}
} catch (Exception ex) {
logger.error(collectionCode + ": failed to start persister");
}
return Response.ok(response).build();
}
@GET
@Produces("application/json")
@Consumes("application/json")
@Path("/stop")
public Response stopPersister(@QueryParam("collectionCode") String collectionCode) {
logger.info(collectionCode + ": In tagger persister stop");
String response;
RedisTaggerPersister p = GenericCache.getInstance().getTaggerPersisterMap(collectionCode);
if (p != null) {
try {
logger.debug(collectionCode + ": Aborting tagger persister...");
GenericCache.getInstance().delTaggerPersisterMap(collectionCode);
p.suspendMe();
logger.info(collectionCode + ": Aborting done for " + collectionCode);
response = "Tagger Persistance of [" + collectionCode + "] has been stopped.";
return Response.ok(response).build();
} catch (InterruptedException ex) {
//Logger.getLogger(Persister4TaggerAPI.class.getName()).log(Level.SEVERE, null, ex);
logger.error(collectionCode + ": failed to stop persister");
}
}
response = "Unable to locate a running tagger persister with the given collection code:[" + collectionCode + "]";
return Response.ok(response).build();
}
@GET
@Produces("application/json")
@Path("/ping")
public Response ping() throws UnknownHostException {
String response = "{\"application\":\"aidr-taggerPersister\", \"status\":\"RUNNING\"}";
return Response.ok(response).build();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/genCSV")
public Response generateCSVFromLastestJSON(@QueryParam("collectionCode") String collectionCode,
@QueryParam("exportLimit") int exportLimit) throws UnknownHostException {
logger.debug("In tagger-persister genCSV");
logger.info("Received request for collection: " + collectionCode);
JsonDeserializer jsonD = new JsonDeserializer();
exportLimit = Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEETS_EXPORT_LIMIT)); // Koushik: added to override user specs
String fileName = jsonD.taggerGenerateJSON2CSV_100K_BasedOnTweetCount(collectionCode, exportLimit);
fileName = PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_DOWNLOAD_URL) + collectionCode + "/" + fileName;
logger.info("Done processing request for collection: " + collectionCode + ", returning created file: " + fileName);
//return Response.ok(fileName).build();
JSONObject obj = new JSONObject();
try {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, null, fileName, true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, null, fileName, true));
return Response.ok(obj.toJSONString()).build();
} catch (Exception e) {
logger.error("Unable to return result ");
obj.putAll(ResultStatus.getUIWrapper(collectionCode, null, fileName, false));
return Response.ok(obj.toJSONString()).build();
}
}
/**
*
* @param collectionCode
* @param exportLimit
* @return CSV format output from JSON filtered by user provided list of label names
* @throws UnknownHostException
*/
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/filter/genCSV")
public Response generateCSVFromLastestJSONFiltered(String queryString,
@QueryParam("collectionCode") String collectionCode,
@QueryParam("exportLimit") Integer exportLimit,
@QueryParam("removeRetweet") boolean removeRetweet,
@QueryParam("userName") String userName) throws UnknownHostException {
DeserializeFilters des = new DeserializeFilters();
JsonQueryList queryList = des.deserializeConstraints(queryString);
JsonDeserializer jsonD = new JsonDeserializer();
logger.info("received request for collection: " + collectionCode + ", count = " + exportLimit + ", from user = " + userName);
if (queryList != null) {
logger.info(collectionCode + ": received constraints = " + queryList.toString());
} else {
logger.info(collectionCode + ": received constraints = " + queryList);
}
if (null == exportLimit) exportLimit = Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEETS_EXPORT_LIMIT));
Map<String, Object> generatedFileMap = jsonD.taggerGenerateJSON2CSVBasedOnTweetCountFiltered(collectionCode, exportLimit, queryList, userName, removeRetweet);
String fileName = (String) generatedFileMap.get("fileName");
logger.info("done processing request for collection: " + collectionCode + ", returning created file: " + fileName);
JSONObject obj = new JSONObject();
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), fileName, true));
obj.put("feedCount", generatedFileMap.get("currentSize"));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), fileName, true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/genTweetIds")
public Response generateTweetsIDSCSVFromAllJSON(@QueryParam("collectionCode") String collectionCode,
@DefaultValue("true") @QueryParam("downloadLimited") Boolean downloadLimited) throws UnknownHostException {
logger.debug("In tagger-persister genTweetIds");
logger.info("received request for collection: " + collectionCode);
JsonDeserializer jsonD = new JsonDeserializer();
Map<String, Object> result = jsonD.generateClassifiedJson2TweetIdsCSV(collectionCode, downloadLimited);
String fileName = PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_DOWNLOAD_URL) + collectionCode + "/" + (String) result.get("fileName");
logger.info("Done processing request for collection: " + collectionCode + ", returning created file: " + fileName);
//return Response.ok(fileName).build();
JSONObject obj = new JSONObject();
if ((Integer) result.get("count") < Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT))) {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), fileName, true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), fileName, true));
return Response.ok(obj.toJSONString()).build();
} else {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), fileName, true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), fileName, true));
return Response.ok(obj.toJSONString()).build();
}
}
/**
*
* @param collectionCode
* @return CSV format output(tweetIds and classifiers) from JSON filtered by user provided list of label names
* @throws UnknownHostException
*/
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/filter/genTweetIds")
public Response generateTweetsIDSCSVFromAllJSONFiltered(String queryString,
@QueryParam("collectionCode") String collectionCode,
@DefaultValue("true") @QueryParam("downloadLimited") Boolean downloadLimited,
@QueryParam("userName") String userName)
throws UnknownHostException {
DeserializeFilters des = new DeserializeFilters();
JsonQueryList queryList = des.deserializeConstraints(queryString);
JsonDeserializer jsonD = new JsonDeserializer();
logger.info("received request for collection: " + collectionCode);
if (queryList != null) {
logger.info(collectionCode + ": received constraints = " + queryList.toString());
} else {
logger.info(collectionCode + ": received constraints = " + queryList);
}
Map<String, Object> result = jsonD.generateClassifiedJson2TweetIdsAndClassifiersCSVFiltered(collectionCode, queryList, downloadLimited, userName);
logger.info("Done processing request for collection: " + collectionCode + ", returning created file: " + result.get("fileName"));
JSONObject obj = new JSONObject();
if ((Integer) result.get("count") < Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT))) {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
} else {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}
}
/**
*
* @param collectionCode
* @return CSV format output(tweetIds only) from JSON filtered by user provided list of label names
* @throws UnknownHostException
*/
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/filter/genTweetIdsOnly")
public Response generateTweetsIDSOnlyCSVFromAllJSONFiltered(String queryString,
@QueryParam("collectionCode") String collectionCode,
@QueryParam("exportLimit") Integer exportLimit,
@QueryParam("removeRetweet") boolean removeRetweet,
@QueryParam("userName") String userName)
throws UnknownHostException {
DeserializeFilters des = new DeserializeFilters();
JsonQueryList queryList = des.deserializeConstraints(queryString);
JsonDeserializer jsonD = new JsonDeserializer();
logger.info("received request for collection: " + collectionCode);
if (queryList != null) {
logger.info(collectionCode + ": received constraints = " + queryList.toString());
} else {
logger.info(collectionCode + ": received constraints = " + queryList);
}
if (null == exportLimit) exportLimit = Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT));
Map<String, Object> result = jsonD.generateClassifiedJson2TweetIdsOnlyCSVFiltered(collectionCode, exportLimit, queryList, userName, removeRetweet);
logger.info("Done processing request for collection: " + collectionCode + ", returning created file: " + result.get("fileName"));
JSONObject obj = new JSONObject();
obj.put("feedCount", result.get("count"));
if ((Integer) result.get("count") < Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT))) {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
} else {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/genJson")
public Response generateJSONFromLastestJSON(@QueryParam("collectionCode") String collectionCode,
@QueryParam("exportLimit") int exportLimit,
@DefaultValue(DownloadType.TEXT_JSON) @QueryParam("jsonType") String jsonType) throws UnknownHostException {
logger.debug("In tagger-persister genCSV");
logger.info("Received request for collection: " + collectionCode + " with jsonType = " + jsonType);
JsonDeserializer jsonD = new JsonDeserializer();
if (0 == exportLimit) exportLimit = Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEETS_EXPORT_LIMIT));
String fileName = jsonD.taggerGenerateJSON2JSON_100K_BasedOnTweetCount(collectionCode, exportLimit, DownloadJsonType.getDownloadJsonTypeFromString(jsonType));
fileName = PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_DOWNLOAD_URL) + collectionCode + "/" + fileName;
logger.info("Done processing request for collection: " + collectionCode + ", returning created file: " + fileName);
//return Response.ok(fileName).build();
JSONObject obj = new JSONObject();
obj.putAll(ResultStatus.getUIWrapper(collectionCode, null, fileName, true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, null, fileName, true));
return Response.ok(obj.toJSONString()).build();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/genJsonTweetIds")
public Response generateTweetsIDSJSONFromAllJSON(@QueryParam("collectionCode") String collectionCode,
@DefaultValue("true") @QueryParam("downloadLimited") Boolean downloadLimited,
@DefaultValue(DownloadType.TEXT_JSON) @QueryParam("jsonType") String jsonType) throws UnknownHostException {
logger.debug("In tagger-persister genTweetIds");
logger.info("Received request for collection: " + collectionCode + " with jsonType = " + jsonType);
JsonDeserializer jsonD = new JsonDeserializer();
Map<String, Object> result = jsonD.generateClassifiedJson2TweetIdsJSON(collectionCode, downloadLimited, DownloadJsonType.getDownloadJsonTypeFromString(jsonType));
String fileName = PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_DOWNLOAD_URL) + collectionCode + "/" + result.get("fileName");
logger.info("Done processing request for collection: " + collectionCode + ", returning created file: " + fileName);
//return Response.ok(fileName).build();
JSONObject obj = new JSONObject();
if ((Integer) result.get("count") < Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT))) {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, null, fileName, true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, null, fileName, true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
} else {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX), fileName, true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), fileName, true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Path("/filter/genJson")
public Response generateJSONFromLastestJSONFiltered(String queryString,
@QueryParam("collectionCode") String collectionCode,
@QueryParam("exportLimit") Integer exportLimit,
@DefaultValue(DownloadType.TEXT_JSON) @QueryParam("jsonType") String jsonType,
@QueryParam("userName") String userName,
@QueryParam("removeRetweet") boolean removeRetweet) throws UnknownHostException {
logger.debug("In tagger-persister genCSV");
logger.info("Received request for collection: " + collectionCode + " with jsonType = " + jsonType);
DeserializeFilters des = new DeserializeFilters();
JsonQueryList queryList = des.deserializeConstraints(queryString);
if (queryList != null) {
logger.info(collectionCode + ": received constraints = " + queryList.toString());
} else {
logger.info(collectionCode + ": received constraints = " + queryList);
}
JsonDeserializer jsonD = new JsonDeserializer();
if (null == exportLimit) exportLimit = Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEETS_EXPORT_LIMIT)); // Koushik: added to override user specs
Map<String, Object> generatedFileMap = jsonD.taggerGenerateJSON2JSONBasedOnTweetCountFiltered(collectionCode, exportLimit, queryList, DownloadJsonType.getDownloadJsonTypeFromString(jsonType), userName, removeRetweet);
String fileName = (String) generatedFileMap.get("fileName");
logger.info("Done processing request for collection: " + collectionCode + ", returning created file: " + fileName);
//return Response.ok(fileName).build();
JSONObject obj = new JSONObject();
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), fileName, true));
obj.put("feedCount", generatedFileMap.get("currentSize"));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), fileName, true));
return Response.ok(obj.toJSONString()).build();
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Path("/filter/genJsonTweetIds")
public Response generateTweetsIDSJSONFromAllJSONFiltered(String queryString,
@QueryParam("collectionCode") String collectionCode,
@DefaultValue("true") @QueryParam("downloadLimited") Boolean downloadLimited,
@DefaultValue(DownloadType.TEXT_JSON) @QueryParam("jsonType") String jsonType,
@QueryParam("userName") String userName) throws UnknownHostException {
logger.debug("In tagger-persister genTweetIds");
logger.info("Received request for collection: " + collectionCode + " with jsonType = " + jsonType);
DeserializeFilters des = new DeserializeFilters();
JsonQueryList queryList = des.deserializeConstraints(queryString);
if (queryList != null) {
logger.info(collectionCode + ": received constraints = " + queryList.toString());
} else {
logger.info(collectionCode + ": received constraints = " + queryList);
}
JsonDeserializer jsonD = new JsonDeserializer();
Map<String, Object> result = jsonD.generateClassifiedJson2TweetIdsJSONFiltered(collectionCode, downloadLimited, queryList, DownloadJsonType.getDownloadJsonTypeFromString(jsonType), userName);
logger.info("Done processing request for collection: " + collectionCode + ", returning created file: " + result.get("fileName"));
//return Response.ok(fileName).build();
JSONObject obj = new JSONObject();
if ((Integer) result.get("count") < Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT))) {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
} else {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Path("/filter/genJsonTweetIdsOnly")
public Response generateTweetsIDSOnlyJSONFromAllJSONFiltered(String queryString,
@QueryParam("collectionCode") String collectionCode,
@QueryParam("exportLimit") Integer exportLimit,
@QueryParam("removeRetweet") boolean removeRetweet,
@DefaultValue(DownloadType.TEXT_JSON) @QueryParam("jsonType") String jsonType,
@QueryParam("userName") String userName) throws UnknownHostException {
logger.debug("In tagger-persister genTweetIds");
logger.info("Received request for collection: " + collectionCode + " with jsonType = " + jsonType);
DeserializeFilters des = new DeserializeFilters();
JsonQueryList queryList = des.deserializeConstraints(queryString);
if (queryList != null) {
logger.info(collectionCode + ": received constraints = " + queryList.toString());
} else {
logger.info(collectionCode + ": received constraints = " + queryList);
}
JsonDeserializer jsonD = new JsonDeserializer();
Map<String, Object> result = jsonD.generateClassifiedJson2TweetIdsOnlyJSONFiltered(collectionCode, exportLimit, queryList, DownloadJsonType.getDownloadJsonTypeFromString(jsonType), userName, removeRetweet);
logger.info("Done processing request for collection: " + collectionCode + ", returning created file: " + result.get("fileName"));
//return Response.ok(fileName).build();
JSONObject obj = new JSONObject();
if ((Integer) result.get("count") < Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT))) {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
} else {
obj.putAll(ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
logger.info("Returning JSON object: " + ResultStatus.getUIWrapper(collectionCode, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_PREFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.DEFAULT_TWEETID_VOLUME_LIMIT)+ PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.TWEET_DOWNLOAD_LIMIT_MSG_SUFFIX) + PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.PERSISTER_CHANGE_NOTIFY_MSG), result.get("fileName").toString(), true));
return Response.ok(obj.toJSONString())
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}
}
/////////////////////////////////////////////////////////////////////////
// Also set response header in OPTIONS pre-flight to enable CORS
@OPTIONS
@Produces(MediaType.APPLICATION_JSON)
@Path("/filter/genCSV")
public Response generateCSVFromLastestJSONFiltered(@QueryParam("collectionCode") String collectionCode,
@QueryParam("exportLimit") int exportLimit) throws UnknownHostException {
return Response.ok()
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}
@OPTIONS
@Produces(MediaType.APPLICATION_JSON)
@Path("/filter/genTweetIds")
public Response generateTweetsIDSCSVFromAllJSONFiltered(@QueryParam("collectionCode") String collectionCode,
@DefaultValue("true") @QueryParam("downloadLimited") Boolean downloadLimited)
throws UnknownHostException {
return Response.ok()
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}
@Deprecated
@OPTIONS
@Produces(MediaType.APPLICATION_JSON)
@Path("/filter/getClassifiedTweets")
public Response get_N_LatestClassifiedTweetsFiltered(@QueryParam("collectionCode") String collectionCode,
@QueryParam("exportLimit") int exportLimit,
@QueryParam("callback") String callback) throws UnknownHostException {
return Response.ok()
.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/downloadFacebookPosts")
public Response downloadFacebookPosts(@QueryParam("collectionCode") String collectionCode,
@QueryParam("exportLimit") Integer exportLimit) throws UnknownHostException {
ApplicationContext appContext = new ClassPathXmlApplicationContext("spring/spring-servlet.xml");
FacebookDataFeedService facebookDataFeedService = (FacebookDataFeedService) appContext.getBean("facebookDataFeedService");
if (null == exportLimit) {
exportLimit = Integer
.parseInt(PersisterConfigurator
.getInstance()
.getProperty(PersisterConfigurationProperty.DEFAULT_FACEBOOK_VOLUME_LIMIT));
}
List<FacebookDataFeed> fbFeeds = facebookDataFeedService.findbyCollectionCode(collectionCode, exportLimit);
JsonDeserializer jsonD = new JsonDeserializer();
Map<String, Object> result = jsonD.generateFileForFacebookDataFeed(collectionCode, fbFeeds);
JSONObject obj = new JSONObject();
result.put("feedCount", fbFeeds.size());
obj.putAll(result);
return Response.ok(obj.toJSONString()).build();
/*.allow("POST", "OPTIONS", "HEAD")
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, OPTIONS, HEAD")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With")
.build();*/
}
}