package voi.routines;

import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.sql.*;
import voi.db.*;

/**
This class writes the Query output in Ascii format
It accepts as parameters
1) FileOutputStream returned by the JFileChooser
2) ResultSet of the query
*/
public class AsciiWriter 
{
	
	private FileOutputStream fout;
	private ResultSet results;
	private String[] rowData, columnNames = new String[0];
	private DataOutputStream outFile;
	private boolean[] queryFlags;
	
	public AsciiWriter (FileOutputStream fout, ResultSet results, boolean[] queryFlags)
	{
		this.fout = fout;
		this.results = results;
		this.queryFlags = queryFlags;
	}
	
	public void writeAsAscii ()
	{
		initializeFile ();
		writeSqlData ();
		closeFiles ();
	}
	
	public void initializeFile ()
	{
					
	}
	
	public void writeSqlData ()
	{
		AssembleQueryResults assembleQuery = new AssembleQueryResults (results, queryFlags);
		columnNames = assembleQuery.getColumnNames ();
		int columns = assembleQuery.getTotalColumns ();
		
		try
		{
			outFile = new DataOutputStream (new BufferedOutputStream (fout));
			// test is used bcoz for using ResultSet.first () we need a boolean return type
			boolean setToFirst = results.first ();
			while (results.next ())
			{
				rowData = assembleQuery.getRowData (results);
			  
				String outString = returnString (rowData, columns);
	/* for debuggin	*/	//System.out.println (outString); 
				writeToAsciiFile (outString);
			}
		}
		catch (SQLException e)
		{
			System.out.println (" SQL exception while adding rows to VOTable ");
		}
	}
	
	// returns one string to be written to a File
	public String returnString (String[] rowData, int columns)
	{
		int i;
		StringBuffer temp = new StringBuffer ("");
		
		for (i = 0; i < columns - 1; i++)
		{
			temp.append (rowData [i]);
			temp.append (",");
		}
		temp.append (rowData [i]).append ("\n");;
		return temp.toString ();
	}
	
	public void writeToAsciiFile (String outString)
	{
		try
		{
			outFile.writeBytes (outString);
		}
		catch (IOException e)
		{
			System.out.println ("There was an error in writing to the File ");
		}
	}	
	
	public void closeFiles ()
	{
		try
		{
			outFile.close ();
		}
		catch (IOException e)
		{
			System.out.println ("There was an error in writing to the File ");
		}

	}
	
}
