package qa.qcri.aidr.manager.service.impl;
import java.util.List;
import java.util.Map;
//import com.sun.jersey.api.client.Client; // gf 3 way
//import com.sun.jersey.api.client.ClientResponse;
//import com.sun.jersey.api.client.WebResource;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.log4j.Logger;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import qa.qcri.aidr.manager.dto.CollectionLogDataResponse;
import qa.qcri.aidr.manager.exception.AidrException;
import qa.qcri.aidr.manager.persistence.entities.CollectionLog;
import qa.qcri.aidr.manager.repository.CollectionLogRepository;
import qa.qcri.aidr.manager.service.CollectionLogService;
@Service("collectionLogService")
public class CollectionLogServiceImpl implements CollectionLogService {
private final Logger logger = Logger.getLogger(getClass());
// gf 3 way - disable @AutoWired since Client API has changed
//@Autowired
@Autowired
private CollectionLogRepository collectionLogRepository;
@Value("${persisterMainUrl}")
private String persisterMainUrl;
@Override
@Transactional(readOnly = false)
public void update(CollectionLog collectionLog) throws Exception {
collectionLogRepository.update(collectionLog);
}
@Override
@Transactional(readOnly = false)
public void delete(CollectionLog collectionLog) throws Exception {
collectionLogRepository.delete(collectionLog);
}
@Override
@Transactional(readOnly = false)
public void create(CollectionLog collectionLog) throws Exception {
collectionLogRepository.save(collectionLog);
}
@Override
@Transactional(readOnly = true)
public CollectionLog findById(Long id) throws Exception {
return collectionLogRepository.findById(id);
}
@Override
@Transactional(readOnly = true)
public CollectionLogDataResponse findAll(Integer start, Integer limit) throws Exception {
return collectionLogRepository.getPaginatedData(start, limit);
}
@Override
@Transactional(readOnly = true)
public CollectionLogDataResponse findAllForCollection(Integer start, Integer limit, Long collectionId) throws Exception {
return collectionLogRepository.getPaginatedDataForCollection(start, limit, collectionId);
}
@Override
@Transactional(readOnly = true)
public Integer countTotalDownloadedItemsForCollection(Long collectionId) throws Exception {
return collectionLogRepository.countTotalDownloadedItemsForCollection(collectionId);
}
@Override
@Transactional(readOnly = true)
public Long countTotalTweets() {
return collectionLogRepository.countTotalTweets();
}
@Override
@Transactional(readOnly = true)
public Map<Integer, Integer> countTotalDownloadedItemsForCollectionIds(List<Long> ids) throws Exception {
return collectionLogRepository.countTotalDownloadedItemsForCollectionIds(ids);
}
@Override
public Map<String, Object> generateCSVLink(String code) throws AidrException {
try {
Client client = ClientBuilder.newBuilder().register(JacksonFeature.class).build();
WebTarget webResource = client.target(persisterMainUrl + "/persister/genCSV?collectionCode=" + code);
Response clientResponse = webResource.request(MediaType.APPLICATION_JSON).get();
//String jsonResponse = clientResponse.readEntity(String.class);
Map<String, Object> jsonResponse = clientResponse.readEntity(Map.class);
return jsonResponse;
/*
if (jsonResponse != null && "http".equals(jsonResponse.substring(0, 4))) {
return jsonResponse;
} else {
return "";
}*/
} catch (Exception e) {
logger.error("Error while generating CSV link", e);
throw new AidrException("[generateCSVLink] Error while generating CSV link in Persister", e);
}
}
@Override
public Map<String, Object> generateTweetIdsLink(String code) throws AidrException {
Client client = ClientBuilder.newBuilder().register(JacksonFeature.class).build();
try {
WebTarget webResource = client.target(persisterMainUrl + "/persister/genTweetIds?collectionCode=" + code);
Response clientResponse = webResource.request(MediaType.APPLICATION_JSON).get();
//String jsonResponse = clientResponse.readEntity(String.class);
Map<String, Object> jsonResponse = clientResponse.readEntity(Map.class);
return jsonResponse;
/*
if (jsonResponse != null && "http".equals(jsonResponse.substring(0, 4))) {
return jsonResponse;
} else {
return "";
}*/
} catch (Exception e) {
logger.error("Error while generating Tweet Ids link", e);
throw new AidrException("[generateTweetIdsLink] Error while generating Tweet Ids link in Persister", e);
}
}
@Override
public Map<String, Object> generateJSONLink(String code, String jsonType) throws AidrException {
try {
Client client = ClientBuilder.newBuilder().register(JacksonFeature.class).build();
WebTarget webResource = client.target(persisterMainUrl + "/persister/genJson?collectionCode=" + code + "&jsonType=" + jsonType);
Response clientResponse = webResource.request(MediaType.APPLICATION_JSON).get();
//String jsonResponse = clientResponse.readEntity(String.class);
Map<String, Object> jsonResponse = clientResponse.readEntity(Map.class);
return jsonResponse;
/*
if (jsonResponse != null && "http".equals(jsonResponse.substring(0, 4))) {
return jsonResponse;
} else {
return "";
}*/
} catch (Exception e) {
logger.error("Error while generating JSON download link",e);
throw new AidrException("[generateJSONLink] Error while generating JSON download link in Persister", e);
}
}
@Override
public Map<String, Object> generateJsonTweetIdsLink(String code, String jsonType) throws AidrException {
Client client = ClientBuilder.newBuilder().register(JacksonFeature.class).build();
try {
WebTarget webResource = client.target(persisterMainUrl + "/persister/genJsonTweetIds?collectionCode=" + code
+ "&downloadLimited=true&"+ "&jsonType=" + jsonType);
Response clientResponse = webResource.request(MediaType.APPLICATION_JSON).get();
//String jsonResponse = clientResponse.readEntity(String.class);
Map<String, Object> jsonResponse = clientResponse.readEntity(Map.class);
return jsonResponse;
/*
if (jsonResponse != null && "http".equals(jsonResponse.substring(0, 4))) {
return jsonResponse;
} else {
return "";
}*/
} catch (Exception e) {
logger.error("Error while generating JSON Tweet Ids download link",e);
throw new AidrException("[generateJsonTweetIdsLink] Error while generating JSON Tweet Ids download link in Persister", e);
}
}
}