/* * org.openmicroscopy.shoola.util.file.TextWriter * *------------------------------------------------------------------------------ * Copyright (C) 2006 University of Dundee. All rights reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *------------------------------------------------------------------------------ */ package org.openmicroscopy.shoola.util.file; //Java imports import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.swing.table.AbstractTableModel; //Third-party libraries //Application-internal dependencies /** * * * @author Jean-Marie Burel      * <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a> * @author <br>Andrea Falconi      * <a href="mailto:a.falconi@dundee.ac.uk"> * a.falconi@dundee.ac.uk</a> * @version 2.2 * <small> * (<b>Internal version:</b> $Revision$ $Date$) * </small> * @since OME2.2 */ public class WriterText { private static final String ROW = "row"; private static final String COLUMN = "column"; private static final String NUMBER = "num"; private static final String VALUE = "value"; //TODO: MUST BE ASCII/CRLF= 0x0D 0x0A //private static final String RECORD_SEPARATOR = ""; /** Save the content of a table as a text file. */ public static void writeTableAsText(File f, AbstractTableModel table) throws Exception { if (table == null) throw new Exception("Table cannot be null."); BufferedWriter output = new BufferedWriter(new FileWriter(f)); String tail = ""; int col = table.getColumnCount(); StringBuffer buffer = new StringBuffer(); for (int k = 0; k < col; k++) { if (k < col-1) tail = ","; buffer.append(table.getColumnName(k)); buffer.append(tail); tail = ""; } output.write(buffer.toString()); output.newLine(); int i, j; for (i = 0; i < table.getRowCount(); i++) { buffer = new StringBuffer(); for (j = 0; j < col; j++) { if (j < col-1) tail = ","; buffer.append(table.getValueAt(i, j)); buffer.append(tail); tail = ""; } output.write(buffer.toString()); output.newLine(); } output.close(); } /** Save the content of a table as an XML file. */ public static void writeTableAsXML(File f, AbstractTableModel table) throws Exception { if (table == null) throw new Exception("Table cannot be null."); BufferedWriter output = new BufferedWriter(new FileWriter(f)); output.write(WriterTextCst.XML_HEADER); output.newLine(); output.write(writeOpenTag(WriterTextCst.ROOT, WriterTextCst.ATTRIBUTES_ROOT, false)); output.newLine(); writeTable(output, table); output.write(writeCloseTag(WriterTextCst.ROOT)); output.close(); } /** Write the table in an XML format. */ private static void writeTable(BufferedWriter output, AbstractTableModel table) throws Exception { Map rowAttributes = new HashMap(), columnAttributes = new HashMap(); String key = VALUE; int i, j; for (i = 0; i < table.getRowCount(); i++) { rowAttributes.put(NUMBER, ""+i); output.write(writeOpenTag(ROW, rowAttributes, false)); output.newLine(); for (j = 0; j < table.getColumnCount(); j++) { columnAttributes.put(NUMBER, ""+j); if (table.getColumnName(j) != null) key = table.getColumnName(j); columnAttributes.put(key, ""+table.getValueAt(i, j)); output.write(writeOpenTag(COLUMN, columnAttributes, true)); output.newLine(); columnAttributes.remove(key); } output.write(writeCloseTag(ROW)); output.newLine(); } } /** Follow basic methods to write the tag. NOT A XML editor. */ private static String writeOpenTag(String tagName, Map attributes, boolean emptyTag) { String tag = "<"+tagName; if (attributes != null) { Entry entry; Iterator i = attributes.entrySet().iterator(); String key, value; while (i.hasNext()) { entry = (Entry) i.next(); key = (String) entry.getKey(); value = (String)entry.getValue(); tag+= " "+key+"=\""+value+"\""; } } if (emptyTag) tag += "/>"; else tag += ">"; return tag; } private static String writeCloseTag(String tagName) { return "</"+tagName+">"; } }