package qa.qcri.aidr.trainer.pybossa.service.impl; import au.com.bytecode.opencsv.CSVWriter; import org.apache.log4j.Logger; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import qa.qcri.aidr.trainer.pybossa.entity.*; import qa.qcri.aidr.trainer.pybossa.format.impl.CVSRemoteFileFormatter; import qa.qcri.aidr.trainer.pybossa.service.*; import qa.qcri.aidr.trainer.pybossa.store.PybossaConf; import qa.qcri.aidr.trainer.pybossa.store.LookupCode; import qa.qcri.aidr.trainer.pybossa.store.URLPrefixCode; import qa.qcri.aidr.trainer.pybossa.util.DateTimeConverter; import java.util.Iterator; import java.util.List; /** * Created with IntelliJ IDEA. * User: jlucas * Date: 11/22/13 * Time: 2:29 PM * To change this template use File | Settings | File Templates. */ @Service("reportProductService") @Transactional(readOnly = false) public class ReportProductServiceImpl implements ReportProductService { protected static Logger logger = Logger.getLogger(ReportProductServiceImpl.class); @Autowired private ClientService clientService; @Autowired private ClientAppService clientAppService; @Autowired private ReportTemplateService reportTemplateService; @Autowired private ClientAppSourceService clientAppSourceService; @Autowired private ClientAppEventService clientAppEventService; private Client client; private PybossaCommunicator pybossaCommunicator = new PybossaCommunicator(); public void setClassVariable() throws Exception{ client = clientService.findClientByCriteria("name", LookupCode.SYSTEM_USER_NAME); } @Override public void generateCVSReportForGeoClicker() throws Exception{ setClassVariable(); if(client == null){ return; } List<ReportTemplate> temps = reportTemplateService.getReportTemplateWithUniqueKey("clientAppID"); Iterator itr= temps.iterator(); while(itr.hasNext()){ Long clientAppID = (long)itr.next(); List<ReportTemplate> templateList = reportTemplateService.getReportTemplateByClientApp(clientAppID, LookupCode.TEMPLATE_IS_READY_FOR_EXPORT); if(templateList.size() > LookupCode.MIN_REPORT_TEMPLATE_EXPORT_SIZE){ CVSRemoteFileFormatter formatter = new CVSRemoteFileFormatter(); ClientApp clientApp = clientAppService.findClientAppByID("clientAppID", clientAppID); String sTemp = reformatFileName(clientApp.getShortName()) ; String fileName = PybossaConf.DEFAULT_TRAINER_FILE_PATH + sTemp; CSVWriter writer = formatter.instanceToOutput(fileName); for(int i=0; i < templateList.size(); i++){ ReportTemplate rpt = templateList.get(i); String answer = rpt.getAnswer().trim().toLowerCase(); formatter.addToCVSOuputFile(generateOutputData(rpt),writer); rpt.setStatus(LookupCode.TEMPLATE_EXPORTED); reportTemplateService.updateReportItem(rpt); } formatter.finalizeCVSOutputFile(writer); ClientAppEvent targetClinetApp = clientAppEventService.getNextSequenceClientAppEvent(clientApp.getClientAppID()); if(targetClinetApp != null ){ ClientAppSource appSource = new ClientAppSource(targetClinetApp.getClientAppID(), LookupCode.EXTERNAL_DATA_SOURCE_ACTIVE, fileName); clientAppSourceService.insertNewClientAppSource(appSource); } } } } private String[] generateOutputData(ReportTemplate rpt){ String[] data = new String[8]; data[0] = rpt.getTweetID().toString(); data[1] = rpt.getTweet(); data[2] = rpt.getAuthor(); data[3] = rpt.getLat(); data[4] = rpt.getLon(); data[5] = rpt.getUrl(); data[6] = rpt.getCreated(); data[7] = rpt.getAnswer(); return data; } private String reformatFileName(String shortName){ String sTemp = DateTimeConverter.reformattedCurrentDateForFileName() + shortName ; if(sTemp.length() > 50){ int iCutCount = sTemp.length() - 50; iCutCount = sTemp.length() - iCutCount; sTemp = sTemp.substring(0, iCutCount) ; } sTemp = sTemp + "export.csv"; return sTemp; } }