import java.util.*;
import java.sql.*;   


/***
 * A ResultSetMetaData capable of being serialized.  
 * This implements the ResultSetMetaData interface.
 * Please send any bug reports or enhancements to mitch[at]fincher[dot]org
 * @author mitch fincher
 * @see SerializableResultSet
**/

////////////////////////////////////////////////////////////////
public class SerializableResultSetMetaData implements 
                           ResultSetMetaData, java.io.Serializable
////////////////////////////////////////////////////////////////
{
int NumberOfColumns = 0;
String ColumnTypeNamesArray[];
String ColumnNamesArray[];

////////////////////////////////////////////////////////////////
public SerializableResultSetMetaData (int inNumberOfColumns)
////////////////////////////////////////////////////////////////
  {
    NumberOfColumns = inNumberOfColumns;
    ColumnTypeNamesArray = new String[NumberOfColumns+1];
    ColumnNamesArray = new String[NumberOfColumns+1];
  }

////////////////////////////////////////////////////////////////
public String getColumnTypeName(int column) throws SQLException 
////////////////////////////////////////////////////////////////
  {
    if((column <= NumberOfColumns) && (column > 0))
      {
	return(ColumnTypeNamesArray[column]);
      }
    else
      {
	System.out.println("SerializableResultSetMetaData.getColumnTypeName(): invalid columnnumber, " + column);System.out.flush();
	return("");
      }
  }

////////////////////////////////////////////////////////////////
public int getColumnCount() throws SQLException
////////////////////////////////////////////////////////////////
  {
    return(NumberOfColumns);
  }

////////////////////////////////////////////////////////////////
public String getColumnLabel(int column) throws SQLException
////////////////////////////////////////////////////////////////
  {
    return(ColumnNamesArray[column]);
  }


public String getCatalogName(int column) throws SQLException {return("");}
public String getColumnName(int column) throws SQLException {return("");}
public String getSchemaName(int column) throws SQLException {return("");}
public String getTableName(int column) throws SQLException {return("");}
public boolean isAutoIncrement(int column) throws SQLException {return(false);}
public boolean isCaseSensitive(int column) throws SQLException{return(false);}
public boolean isCurrency(int column) throws SQLException{return(false);}
public boolean isDefinitelyWritable(int column) throws SQLException{return(false);}
public boolean isReadOnly(int column) throws SQLException{return(false);}
public boolean isSearchable(int column) throws SQLException{return(false);}
public boolean isSigned(int column) throws SQLException{return(false);}
public boolean isWritable(int column) throws SQLException{return(false);}
public int getColumnDisplaySize(int column) throws SQLException{return(-1);}
public int getColumnType(int column) throws SQLException{return(-1);}
public int getPrecision(int column) throws SQLException{return(-1);}
public int getScale(int column) throws SQLException{return(-1);}
public int isNullable(int column) throws SQLException{return(-1);}

////////////////////////////////////////////////////////////////
public void  setColumnTypeName(int ColumnNumber, String ColumnTypeName)
////////////////////////////////////////////////////////////////
  {
    ColumnTypeNamesArray[ColumnNumber] = ColumnTypeName;
  }

////////////////////////////////////////////////////////////////
public void  setColumnName(int ColumnNumber, String ColumnName)
////////////////////////////////////////////////////////////////
  {
    ColumnNamesArray[ColumnNumber] = ColumnName;
  }

////////////////////////////////////////////////////////////////
public String toString()
////////////////////////////////////////////////////////////////
  {
    String desc="";
    desc += "\n***********************************************";
    desc += "\nSerializableResultSetMetaData: ";
    desc += "\n***********************************************";
    desc += "\nNumberOfColumns: " + NumberOfColumns;
    desc += "\nColumnTypeNamesArray: ";
try {
    for(int i=1;i<=NumberOfColumns;i++)
      desc += "\n " + i + ": \"" +  getColumnTypeName(i) + "\"";
}
   catch(Exception ex){ System.err.println("SerializableResultSet.toString:" + ex);}
    return(desc);
  }
////////////////////////////////////////////////////////////////
public static void  main(String argv[])
////////////////////////////////////////////////////////////////
  {
    int cols = 12;
    SerializableResultSetMetaData rsmd = new SerializableResultSetMetaData(cols);
    System.out.println("rsmd: " + rsmd);
  } // main

} // SerializableResultSetMetaData
