package org.activityinfo.geoadmin; import java.awt.Component; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.prefs.Preferences; import javax.swing.JComponent; import javax.swing.JFileChooser; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.TableModel; /** * Exports the contents of a JTable to a CSV file * */ public class TableExporter { private static Preferences prefs = Preferences .userNodeForPackage(TableExporter.class); public static void export(TableModel table, JComponent owner) { File file = chooseFile(owner); if (file != null) { PrintWriter writer; try { writer = new PrintWriter(file); } catch (FileNotFoundException e) { throw new RuntimeException(e); } writeTable(table, writer); writer.close(); } } private static void writeTable(TableModel table, PrintWriter writer) { // write headers for (int column = 0; column != table.getColumnCount(); ++column) { if (column > 0) { writer.print("\t"); } writer.print(table.getColumnName(column)); } writer.println(); // write data for (int row = 0; row != table.getRowCount(); ++row) { for (int column = 0; column != table.getColumnCount(); ++column) { if (column > 0) { writer.print("\t"); } writer.print(table.getValueAt(row, column)); } writer.println(); } writer.flush(); } private static File chooseFile(Component owner) { File initialDir = new File(prefs.get("export_dir", "")); JFileChooser chooser = new JFileChooser(initialDir); chooser.setFileFilter(new FileNameExtensionFilter( "Tab seperated values", "tab")); int returnVal = chooser.showSaveDialog(owner); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); prefs.put("export_dir", file.getParent()); return file; } return null; } }