/* * Copyright (C) 2010-2012 Stichting Akvo (Akvo Foundation) * * This file is part of Akvo FLOW. * * Akvo FLOW is free software: you can redistribute it and modify it under the terms of * the GNU Affero General Public License (AGPL) as published by the Free Software Foundation, * either version 3 of the License or any later version. * * Akvo FLOW is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Affero General Public License included below for more details. * * The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>. */ package org.waterforpeople.mapping.notification; import java.io.PrintWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.waterforpeople.mapping.dao.SurveyInstanceDAO; import org.waterforpeople.mapping.domain.SurveyInstance; /** * report notification handler that can generate the field status report (a simple report consisting * only of the list of instances for a given survey). The format of the report is currently a * tab-delimited text file with the following columns:<br> * Collection Date, Country Code, Community Name * * @author Christopher Fagiani */ public class FieldStatusReportNotificationHandler extends AbstractReportNotificationHandler { public static final String TYPE = "fieldStatusReport"; private static final String EMAIL_TITLE = "FLOW Field Status Report for survey: "; private static final String EMAIL_BODY = "Please see the latest field status report here (Recommend you open in Microsoft Excel) for Survey : "; private static final int PAGE_SIZE = 100; private static final String REPORT_DATE_FORMAT = "MM-dd-yyyy"; private SurveyInstanceDAO instanceDao; private DateFormat df = new SimpleDateFormat(DATE_DISPLAY_FORMAT); private DateFormat reportDateFormat = new SimpleDateFormat( REPORT_DATE_FORMAT); public FieldStatusReportNotificationHandler() { super(); instanceDao = new SurveyInstanceDAO(); } @Override protected void writeReport(Long entityId, String serverBase, PrintWriter pw) { if (entityId != null) { String cursor = null; pw.print("Date\tCountry\tCommunity\n"); do { List<SurveyInstance> tempList = instanceDao .listSurveyInstanceBySurvey(entityId, PAGE_SIZE, cursor); if (tempList == null) { cursor = null; } else { for (SurveyInstance inst : tempList) { pw.print(reportDateFormat.format(inst .getCollectionDate()) + "\t" + (inst.getCountryCode() != null ? inst .getCountryCode() : "") + "\t" + (inst.getCommunity() != null ? inst .getCommunity() : "") + "\n"); } if (tempList.size() < PAGE_SIZE) { cursor = null; } else { cursor = SurveyInstanceDAO.getCursor(tempList); } } } while (cursor != null); pw.flush(); } } @Override protected String getEmailBody() { return EMAIL_BODY; } @Override protected String getEmailSubject() { return EMAIL_TITLE; } @Override protected String getFileName(String entityId) { return TYPE + "-" + entityId + "-" + df.format(new Date()) + ".txt"; } }