package org.esa.snap.ui.io; import org.esa.snap.core.util.io.CsvWriter; import javax.swing.table.TableModel; import java.io.IOException; import java.io.Writer; /** * This simple TableModelCsvEncoder writes the table model content encoded * as CSV to a given writer. The separator char is {@code '\t'}. */ public class TableModelCsvEncoder implements CsvEncoder { private final TableModel model; public TableModelCsvEncoder(TableModel model) { this.model = model; } /** * Writes the table model content encoded as csv to the given writer. * The separator char is {@code '\t'}. * @param writer * @throws IOException */ @Override public void encodeCsv(Writer writer) throws IOException { CsvWriter csv = new CsvWriter(writer, "\t"); encodeHeadline(csv); encodeData(csv); } private void encodeHeadline(CsvWriter csv) throws IOException { int count = model.getColumnCount(); final String[] colNames = new String[count]; for (int col = 0; col < count; col++) { colNames[col] = model.getColumnName(col); } csv.writeRecord(colNames); } private void encodeData(CsvWriter csv) throws IOException { int columnCount = model.getColumnCount(); int rowCount = model.getRowCount(); for (int row = 0; row < rowCount; row++) { String[] record = new String[columnCount]; for (int column = 0; column < columnCount; column++) { Object value = model.getValueAt(row, column); record[column] = value != null ? value.toString() : ""; } csv.writeRecord(record); } } }