/* TableModelExporter.java created 2007-12-07
*
*/
package org.signalml.app.model.components;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import javax.swing.table.TableModel;
import org.signalml.exception.SanityCheckException;
import org.signalml.util.Util;
/** TableModelExporter
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class TableToTextExporter implements ClipboardOwner {
public static final String DEFAULT_COLUMN_SEPARATOR = "\t";
public static final String DEFAULT_ROW_SEPARATOR = Util.LINE_SEP;
private String columnSeparator = DEFAULT_COLUMN_SEPARATOR;
private String rowSeparator = DEFAULT_ROW_SEPARATOR;
public String getColumnSeparator() {
return columnSeparator;
}
public void setColumnSeparator(String columnSeparator) {
this.columnSeparator = columnSeparator;
}
public String getRowSeparator() {
return rowSeparator;
}
public void setRowSeparator(String rowSeparator) {
this.rowSeparator = rowSeparator;
}
public void export(TableModel model, Writer writer) throws IOException {
export(model, null, null, writer);
}
public void export(TableModel model, TableModel columnHeaderModel, TableModel rowHeaderModel, Writer writer) throws IOException {
int rowCnt = model.getRowCount();
int colCnt = model.getColumnCount();
int i,e;
boolean needSep = false;
Object value;
if (rowHeaderModel != null) {
needSep = true;
}
if (columnHeaderModel != null) {
for (i=0; i<colCnt; i++) {
if (needSep || i > 0) {
writer.append(columnSeparator);
}
value = columnHeaderModel.getValueAt(0, i);
writer.append(value != null ? value.toString() : "(none)");
}
} else {
String columnName;
for (i=0; i<colCnt; i++) {
if (needSep || i > 0) {
writer.append(columnSeparator);
}
columnName = model.getColumnName(i);
writer.append(columnName != null ? columnName : "");
}
}
writer.append(rowSeparator);
for (i=0; i<rowCnt; i++) {
if (rowHeaderModel != null) {
value = rowHeaderModel.getValueAt(i, 0);
writer.append(value != null ? value.toString() : "(none)");
}
for (e=0; e<colCnt; e++) {
if (needSep || e > 0) {
writer.append(columnSeparator);
}
value = model.getValueAt(i, e);
writer.append(value != null ? value.toString() : "(none)");
}
writer.append(rowSeparator);
}
}
public void export(TableModel model, File file) throws IOException {
export(model, null, null, file);
}
public void export(TableModel model, TableModel columnHeaderModel, TableModel rowHeaderModel, File file) throws IOException {
Writer writer = null;
try {
writer = new BufferedWriter(new FileWriter(file));
export(model, columnHeaderModel, rowHeaderModel, writer);
} finally {
writer.close();
}
}
public void exportToClipboard(TableModel model) {
exportToClipboard(model, null, null);
}
public void exportToClipboard(TableModel model, TableModel columnHeaderModel, TableModel rowHeaderModel) {
StringWriter writer = new StringWriter();
try {
export(model, columnHeaderModel, rowHeaderModel, writer);
} catch (IOException ex) {
throw new SanityCheckException("StringWriter threw IOException", ex);
}
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(new StringSelection(writer.toString()), this);
}
public void export(WriterExportableTable exportable, File file) throws IOException {
export(exportable, file, null);
}
public void export(WriterExportableTable exportable, File file, Object userObject) throws IOException {
Writer writer = null;
try {
writer = new BufferedWriter(new FileWriter(file));
exportable.export(writer, columnSeparator, rowSeparator, userObject);
} finally {
if (writer != null) {
writer.close();
}
}
}
public void exportToClipboard(WriterExportableTable exportable) {
exportToClipboard(exportable, null);
}
public void exportToClipboard(WriterExportableTable exportable, Object userObject) {
StringWriter writer = new StringWriter();
try {
exportable.export(writer, columnSeparator, rowSeparator, userObject);
} catch (IOException ex) {
throw new SanityCheckException("StringWriter threw IOException", ex);
}
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(new StringSelection(writer.toString()), this);
}
@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {
// don't care
}
}