//** Copyright Statement ***************************************************
//The Salmon Open Framework for Internet Applications (SOFIA)
// Copyright (C) 1999 - 2002, Salmon LLC
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License version 2
// as published by the Free Software Foundation;
//
// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// For more information please visit http://www.salmonllc.com
//** End Copyright Statement ***************************************************
/////////////////////////
//$Archive: /JADE/SourceCode/com/salmonllc/util/DataTextWriter.java $
//$Author: Dan $
//$Revision: 7 $
//$Modtime: 10/30/02 2:59p $
/////////////////////////
import java.util.*;
import java.io.*;
/**
* This object allows you to write a flat text file with data elements separated by Separators and such.
*/
public class DataTextWriter {
private int NumColumns=0;
private Vector[] Columns;
private String LineBreak="\r\n";
private String Separator=",";
private boolean Quoted=false;
private char QuoteCharacter='\0';
private StringBuffer sbTextBuffer=new StringBuffer();
/**
* Builds a DataTextWriter with each row containing iNumColumns.
* @param iNumCols The number of columns in a row of the DataTextWriter.
*/
public DataTextWriter(int iNumCols) {
this(iNumCols,"","",'\0',false);
}
/**
* Builds a DataTextWriter with each row containing iNumCols and each piece of Data separated by sSeparator.
* @param iNumCols The number of columns in a row of the DataTextWriter.
* @param sSeparator The separator used to separate data columns in a row.
*/
public DataTextWriter(int iNumCols,String sSeparator) {
this(iNumCols,sSeparator,"",'\0',false);
}
/**
* Builds a DataTextWriter with each row containing iNumCols and each piece of Data separated by sSeparator
* and row separated by sLineBreak.
* @param iNumCols The number of columns in a row of the DataTextWriter.
* @param sSeparator The separator used to separate data columns in a row.
* @param sLineBreak The separator used to separate individual rows.
*/
public DataTextWriter(int iNumCols,String sSeparator,String sLineBreak) {
this(iNumCols,sSeparator,sLineBreak,'\0',false);
}
/**
* Builds a DataTextWriter with each row containing iNumColumns and each piece of Data separated by sSeparator
* and row separated by sLineBreak and each piece of Data is surrounded by cQuoteChar if bQuoted is true.
* @param iNumCols The number of columns in a row of the DataTextWriter.
* @param sSeparator The separator used to separate data columns in a row.
* @param sLineBreak The separator used to separate individual rows.
* @param cQuoteChar The character used to quote indivividual data columns.
* @param bQuoted The flag to indicate if data columns are to be quoted.
*/
public DataTextWriter(int iNumCols,String sSeparator,String sLineFeed,char cQuoteChar,boolean bQuoted) {
NumColumns=iNumCols;
Separator=sSeparator;
LineBreak=sLineFeed;
QuoteCharacter=cQuoteChar;
Quoted=bQuoted;
Columns=new Vector[iNumCols];
for (int i=0;i<iNumCols;i++)
Columns[i]=new Vector(100,100);
}
/**
* Adds a piece of data to a specific column in this DataTextWriter.
* @param iColumn The column which the specified data belongs to.
* @param sData The data for the specified column.
*/
public void addData(int iColumn,String sData) throws Exception {
if (iColumn<0 || iColumn>=NumColumns)
throw new Exception("Column Index is out of range. Valid Range is (0-"+(NumColumns-1)+").");
Columns[iColumn].addElement(sData);
int iCount=Columns[0].size();
for (int i=1;i<NumColumns;i++)
if (Columns[i].size()!=iCount)
return;
int i=Columns[iColumn].size()-1;
for (int j=0;j<(NumColumns-1);j++) {
if (Quoted)
sbTextBuffer.append(QuoteCharacter+(String)Columns[j].elementAt(i)+QuoteCharacter+Separator);
else
sbTextBuffer.append((String)Columns[j].elementAt(i)+Separator);
}
if (Quoted)
sbTextBuffer.append(QuoteCharacter+(String)Columns[NumColumns-1].elementAt(i)+QuoteCharacter+LineBreak);
else
sbTextBuffer.append((String)Columns[NumColumns-1].elementAt(i)+LineBreak);
}
/**
* This method returns the Data in DataTextWriter in formatted output string.
* @return Formatted Output
*/
public String getText() /*throws DataTextWriterException*/ {
// StringBuffer sb=new StringBuffer();
/* int iCount=Columns[0].size();
for (int i=1;i<NumColumns;i++)
if (Columns[i].size()!=iCount)
throw new DataTextWriterException("There is not an equal number data values in each column.");*/
/* for (int i=0;i<iCount;i++) {
for (int j=0;j<NumColumns-1;j++) {
if (Quoted)
sb.append(QuoteCharacter+(String)Columns[j].elementAt(i)+QuoteCharacter+Separator);
else
sb.append((String)Columns[j].elementAt(i)+Separator);
}
if (Quoted)
sb.append(QuoteCharacter+(String)Columns[NumColumns-1].elementAt(i)+QuoteCharacter+LineBreak);
else
sb.append((String)Columns[NumColumns-1].elementAt(i)+LineBreak);
} */
return sbTextBuffer.toString();
}
/**
* This method returns the length of the Data in DataTextWriter in formatted output string.
* @return Formatted Output
*/
public int getTextLength() {
return sbTextBuffer.length();
}
/**
* Sets the LineBreak Separator in this DataTextWriter.
* @param sLineBreak The separator used to separate individual rows.
*/
public void setLineBreak(String sLineBreak) {
LineBreak=sLineBreak;
}
/**
* Sets the Character to be used for Quoting Data Columns in this DataTextWriter.
* @param cQuoteChar The character used to quote individual data columns.
*/
public void setQuoteCharacter(char cQuoteChar) {
QuoteCharacter=cQuoteChar;
}
/**
* Sets the Flag to to inicate that Data Columns are to be quoted in this DataTextWriter.
* @param bQuoted The flag used to indicate if data columns are quoted.
*/
public void setQuoted(boolean bQuoted) {
Quoted=bQuoted;
}
/**
* Sets the Separator to be used for separating individual Data Columns in this DataTextWriter.
* @param sSeparator The separator used to separate individual data columns.
*/
public void setSeparator(String sSeparator) {
Separator=sSeparator;
}
/**
* This method creates a flat file containing the data added to this DataTextWriter.
* @param sFilename The name of flat file to create.
*/
public void writeFile(String sFilename) throws Exception {
try {
FileOutputStream fos=new FileOutputStream(sFilename);
PrintWriter pw=new PrintWriter(fos);
pw.print(getText());
pw.close();
fos.close();
}
catch(Exception e) {
throw new Exception(e.getMessage());
}
}
}
|