/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package servidor.datos;

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

/**
 *
 * @author fernando
 */
public class ResultSetSerializer {

    public String fieldSeparator;
    public String recordSeparator;

    public ResultSetSerializer(String fs, String rs) {
        fieldSeparator = fs;
        recordSeparator = rs;
    }

    public String toString(ResultSet rs) {
        StringBuilder sb = new StringBuilder();
        try {
            ResultSetMetaData meta = rs.getMetaData();
            int numCols = meta.getColumnCount();
            if (rs.getType() != ResultSet.TYPE_FORWARD_ONLY) {
                rs.beforeFirst();
            }
            while (rs.next()) {
                sb.append(recordToString(rs, numCols)).append(recordSeparator);
            }
            return sb.toString();
        } catch (Exception exc) {
            return null;
        }
    }

    public ArrayList<String> toArrayList(ResultSet rs) {
        ArrayList<String> lista = new ArrayList<>();
        try {
            ResultSetMetaData meta = rs.getMetaData();
            int numCols = meta.getColumnCount();
            if (rs.getType() != ResultSet.TYPE_FORWARD_ONLY) {
                rs.beforeFirst();
            }
            while (rs.next()) {
                lista.add(recordToString(rs, numCols));
            }
            return lista;
        } catch (Exception exc) {
            return null;
        }
    }

    private String recordToString(ResultSet rs, int numColumns) throws Exception {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < numColumns; i++) {
            String val = rs.getString(i);
            sb.append(val).append(fieldSeparator);
        }
        return sb.toString();
    }
}
