
package paqueteDAO;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import paqueteBL.VM;
import paqueteBL.VMext;

public class VmDAO extends BaseDAO{

    public void readFromRS(VM vm,ResultSet rs) throws Exception
    {
        vm.setId(rs.getInt("idvm"));
        vm.setIdHost(rs.getInt("idHost"));
        vm.setIp(quitaNull(rs.getString("ip")));
        vm.setNombre(rs.getString("nombre"));
        vm.setResponsable(quitaNull((String)rs.getString("Responsable")));
        vm.setEstado(rs.getInt("estado"));
        vm.setDataRep(quitaNull(rs.getString("dataRep")));
        vm.setDataRep(quitaNull(rs.getString("pathDataRep")));
        vm.setDataRep(quitaNull(rs.getString("path")));
    }


    public VMext read(int id) throws Exception
    {
        String sql="SELECT * FROM vm WHERE idvm='" + id + "'";
        Statement scSQL = null;
        ResultSet rsListaRegistros;
        Connection co=null;
        try
        {
        co=getConexion();
        scSQL=co.createStatement();
        //scSQL =  getStatement();
        rsListaRegistros = scSQL.executeQuery(sql);
        if(rsListaRegistros.next())
        {
            VMext vm = new VMext();
            readFromRS(vm,rsListaRegistros);
            return vm;
        }
        else
           return null;
        } finally
        {
            if(scSQL!=null) scSQL.close();
            if (co!=null) liberaConexion(co);
        }
    }
    
    public void insert(VM vm) throws Exception
    {
        Statement scSQL = null;
        ResultSet rsListaRegistros;
        Connection co=null;
        try
        {

        co=getConexion();
        scSQL=co.createStatement();
        String valores="(null,'"+vm.getNombre()+"','"+vm.getIp()+"',"+vm.getIdHost()+","+vm.getEstado();
        valores=concatena(valores,vm.getDataRep());
        valores=concatena(valores,vm.getPathDataRep());
        valores=concatena(valores,vm.getPath());
        valores+=",'')";
        System.out.println(valores);
        scSQL.executeUpdate("INSERT INTO vm (idvm,nombre,ip,idHost,estado,datarep,pathdatarep,path,responsable) values "+valores);
        rsListaRegistros = scSQL.executeQuery("SELECT LAST_INSERT_ID();");
        rsListaRegistros.next();
        vm.setId(rsListaRegistros.getInt(1));
        } finally
        {
            if(scSQL!=null) scSQL.close();
            if (co!=null) liberaConexion(co);
        }
    }



    public void updateEstado(int id,int estado) throws Exception
    {
        Statement scSQL = null;
        Connection co=null;
        try
        {
            co=getConexion();
            scSQL=co.createStatement();
            scSQL.executeUpdate("UPDATE vm SET estado="+estado+" WHERE idVM="+id);
        } finally
        {
            if(scSQL!=null) scSQL.close();
            if (co!=null) liberaConexion(co);
        }
    }

     public void update(VM vm) throws Exception
    {
        Statement scSQL = null;
        Connection co=null;
        try
        {
            co=getConexion();
            scSQL=co.createStatement();
            String s=sets("","ip",vm.getIp());
            s=sets(s,"nombre",vm.getNombre());
            s=sets(s,"responsable",vm.getResponsable());
            System.out.println("UPDATE VM SET "+s+" WHERE idVM="+vm.getId());
            scSQL.executeUpdate("UPDATE VM SET "+s+" WHERE idVM="+vm.getId());
        } finally
        {
            if(scSQL!=null) scSQL.close();
            if (co!=null) liberaConexion(co);
        }
    }

    public List<VMext> findByQuery(String sql) throws Exception
    {
        List<VMext> lista=new ArrayList<VMext>();
        ResultSet rsListaRegistros;
        Statement scSQL = null;
        Connection co=null;
        try
        {
            co=getConexion();
            scSQL=co.createStatement();

        rsListaRegistros = scSQL.executeQuery(sql);

        while(rsListaRegistros.next())
        {
            VMext vm=new VMext();
            readFromRS(vm,rsListaRegistros);
            lista.add(vm);
        }
        return lista;
        } finally
        {
            if(scSQL!=null) scSQL.close();
            if (co!=null) liberaConexion(co);
        }
    }

    public VMext findByNombre(String nombre) throws Exception
    {
        List<VMext> vms=findByQuery("Select * from VM Where nombre='"+nombre+"'");
        if (vms.size()>0) return vms.get(0); else return null;
    }

}

