/** * */ package net.frontlinesms.ui.handler.importexport; import java.io.File; import java.io.IOException; import java.util.List; import net.frontlinesms.csv.CsvExporter; import net.frontlinesms.csv.CsvRowFormat; import net.frontlinesms.csv.CsvUtils; import net.frontlinesms.data.domain.FrontlineMessage; import net.frontlinesms.data.domain.Keyword; import net.frontlinesms.data.domain.FrontlineMessage.Type; import net.frontlinesms.ui.UiGeneratorController; import net.frontlinesms.ui.i18n.InternationalisationUtils; /** * @author aga */ public class KeywordExportDialogHandler extends ExportDialogHandler<Keyword> { /** I18n Text Key: TODO document */ private static final String MESSAGE_EXPORTING_SELECTED_KEYWORDS = "message.exporting.selected.keywords"; /** Thinlet Component Name: TODO document */ private static final String COMPONENT_CB_KEYWORD = "cbKeyword"; /** Thinlet Component Name: TODO document */ private static final String COMPONENT_CB_DESCRIPTION = "cbDescription"; /** Thinlet Component Name: TODO document */ private static final String COMPONENT_CB_CONTACT_NOTES = "cbContactNotes"; /** Thinlet Component Name: TODO document */ private static final String COMPONENT_CB_CONTACT_EMAIL = "cbContactEmail"; /** Thinlet Component Name: TODO document */ private static final String COMPONENT_CB_CONTACT_OTHER_NUMBER = "cbContactOtherNumber"; /** Thinlet Component Name: TODO document */ private static final String COMPONENT_CB_CONTACT_NAME = "cbContactName"; /** Thinlet Component Name: TODO document */ private static final String COMPONENT_CB_RECEIVED = "cbReceived"; /** Thinlet Component Name: TODO document */ private static final String COMPONENT_CB_SENT = "cbSent"; public KeywordExportDialogHandler(UiGeneratorController ui) { super(Keyword.class, ui); } @Override String getWizardTitleI18nKey() { return MESSAGE_EXPORTING_SELECTED_KEYWORDS; } @Override String getOptionsFilePath() { return UI_FILE_OPTIONS_PANEL_KEYWORD; } @Override public void doSpecialExport(String dataPath) throws IOException { doSpecialExport(dataPath, keywordDao.getAllKeywords()); } /** * Export the supplied keywords using the settings in {@link #wizardDialog}. * @param keywords keywords to export * @param filename file to save to * @throws IOException */ @Override public void doSpecialExport(String dataPath, List<Keyword> keywords) throws IOException { //KEYWORDS log.debug("Exporting all keywords.."); FrontlineMessage.Type messageType = getMessageType(); CsvRowFormat rowFormat = getRowFormatForKeyword(messageType); if (!rowFormat.hasMarkers()) { uiController.alert(InternationalisationUtils.getI18nString(MESSAGE_NO_FIELD_SELECTED)); log.trace("EXIT"); return; } log.debug("Row Format [" + rowFormat + "]"); CsvExporter.exportKeywords(new File(dataPath), keywords, rowFormat, this.contactDao, this.messageDao, messageType); uiController.setStatus(InternationalisationUtils.getI18nString(MESSAGE_EXPORT_TASK_SUCCESSFUL)); this.uiController.infoMessage(InternationalisationUtils.getI18nString(MESSAGE_EXPORT_TASK_SUCCESSFUL)); } //> UI EVENT METHODS //> PRIVATE HELPER METHODS /** * Creates an export row format for keywords. * @param type Type of {@link FrontlineMessage} to export, e.g. {@link Type#RECEIVED} * @return The row format for exporting {@link Keyword}s to CSV */ private CsvRowFormat getRowFormatForKeyword(FrontlineMessage.Type type) { CsvRowFormat rowFormat = new CsvRowFormat(); addMarker(rowFormat, CsvUtils.MARKER_KEYWORD_KEY, COMPONENT_CB_KEYWORD); addMarker(rowFormat, CsvUtils.MARKER_KEYWORD_DESCRIPTION, COMPONENT_CB_DESCRIPTION); if (type == Type.ALL) { rowFormat.addMarker(CsvUtils.MARKER_MESSAGE_TYPE); } addMarker(rowFormat, CsvUtils.MARKER_MESSAGE_DATE, COMPONENT_CB_DATE); addMarker(rowFormat, CsvUtils.MARKER_MESSAGE_CONTENT, COMPONENT_CB_CONTENT); addMarker(rowFormat, CsvUtils.MARKER_SENDER_NUMBER, COMPONENT_CB_SENDER); addMarker(rowFormat, CsvUtils.MARKER_RECIPIENT_NUMBER, COMPONENT_CB_RECIPIENT); addMarker(rowFormat, CsvUtils.MARKER_CONTACT_NAME, COMPONENT_CB_CONTACT_NAME); addMarker(rowFormat, CsvUtils.MARKER_CONTACT_OTHER_PHONE, COMPONENT_CB_CONTACT_OTHER_NUMBER); addMarker(rowFormat, CsvUtils.MARKER_CONTACT_EMAIL, COMPONENT_CB_CONTACT_EMAIL); addMarker(rowFormat, CsvUtils.MARKER_CONTACT_NOTES, COMPONENT_CB_CONTACT_NOTES); return rowFormat; } /** * Get the type of {@link FrontlineMessage} that has been selected to export. * @return {@link Type#ALL}, {@link Type#ALL}, {@link Type#ALL} or <code>null</code> if the user would not like any messages. */ private final FrontlineMessage.Type getMessageType() { boolean sent = isChecked(COMPONENT_CB_SENT); boolean received = isChecked(COMPONENT_CB_RECEIVED); if (sent && received) { return Type.ALL; } else if (sent) { return Type.OUTBOUND; } else if (received) { return Type.RECEIVED; } else return null; } }