MatriculaDAO.java

package persistencia;

import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Vector;
import java.util.ArrayList;

import negocio.controllers.MatriculaException.*;
import negocio.entities.*;

public class MatriculaDAO {

//fecha, pagado, atributo, modoPago, cursoPropio_id, estudiante_dni

	private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
	
	public int crearNuevaMatricula(Matricula matricula) throws SQLException {
		Date fechaCreacion= new Date();
		Date fechaActualizacion = fechaCreacion;
		
		String tipoPago = null;
		if (matricula.tipoPago != null) tipoPago = matricula.tipoPago.toString();
		
		return GestorBD.getInstancia().insert("INSERT INTO matricula (fecha, pagado, atributo, modoPago, cursoPropio_id, cursoPropio_edicion, estudiante_dni, fechaCreacion, fechaActualizacion) VALUES ('"
				+ dateFormat.format(matricula.getFecha())+"', "
				+ matricula.isPagado()+", "
				+ matricula.getAttribute()+", '"
				+ tipoPago+ "', '"
				+ matricula.titulo.getId()+"', "
				+ matricula.titulo.getEdicion()+", '"
				+ matricula.estudiante.getDni()+"', '"
				+ dateFormat.format(fechaCreacion)+"', '"
				+ dateFormat.format(fechaActualizacion)+"')");
	}

	public Matricula seleccionarMatricula(Matricula matricula) throws SQLException, MatriculaNoExisteException { 
		Vector datosMatricula = GestorBD.getInstancia().select("SELECT * FROM matricula WHERE cursoPropio_id='"+matricula.titulo.getId()+"' AND cursoPropio_edicion="+matricula.titulo.getEdicion()+" AND estudiante_dni='"+matricula.estudiante.getDni()+"'");
		if (datosMatricula.isEmpty())
			throw new MatriculaNoExisteException("No existe el curso seleccionado en la base de datos");
		
		datosMatricula = (Vector) datosMatricula.get(0);

		Date fecha= (Date) datosMatricula.get(0);
		Boolean pagado = (Boolean) datosMatricula.get(1);
		int attribute = (Integer) datosMatricula.get(2);
		ModoPago tipoPago = ModoPago.valueOf((String) datosMatricula.get(3));
		CursoPropio cursoPropio = new CursoPropio((String) datosMatricula.get(4), (int) datosMatricula.get(5));
		Estudiante estudiante = new Estudiante((String) datosMatricula.get(6));
		
		return new Matricula(fecha, pagado, attribute, tipoPago, cursoPropio, estudiante);
	}
	
	public int editarMatricula(Matricula matricula) throws SQLException {
		String tipoPago = null;
		if (matricula.tipoPago != null) tipoPago = matricula.tipoPago.toString();
		
		Date fechaActualizacion = new Date();

		return GestorBD.getInstancia().update("UPDATE matricula SET "
				+ "fecha='" + matricula.getFecha() + "', "
				+ "pagado=" + matricula.isPagado() + ", "
				+ "attribute=" + matricula.getAttribute() + ", "
				+ "modopago='" + tipoPago + "', "
				+ "dni='" + matricula.estudiante.getDni() + "', "
				+ "fechaActualizacion='" + dateFormat.format(fechaActualizacion)
				+ "' WHERE cursoPropio_id='"+matricula.titulo.getId()+"' AND cursoPropio_edicion="+matricula.titulo.getEdicion());
	}

	public int eliminarMatricula(Matricula matricula) throws SQLException {
		return GestorBD.getInstancia().delete("DELETE FROM matricula WHERE cursoPropio_id='"+matricula.titulo.getId()+"' AND cursoPropio_edicion="+matricula.titulo.getEdicion());
	}

	public List<Matricula> listarMatriculasPorCurso(CursoPropio curso) throws SQLException {
		Vector matriculasDatos = GestorBD.getInstancia().select("SELECT * FROM matricula WHERE cursoPropio_id = '"+curso.getId()+"'");
		
		List <Matricula> listaMatriculas=new ArrayList<>();
		
		for (int i=0; i<matriculasDatos.size(); i++){
			Vector matDatosTemp = (Vector) matriculasDatos.get(i);

			Date fecha= (Date) matDatosTemp.get(0);
			Boolean pagado = (Boolean) matDatosTemp.get(1);
			int attribute = (Integer) matDatosTemp.get(2);
			ModoPago tipoPago = ModoPago.valueOf((String) matDatosTemp.get(3));
			CursoPropio cursoPropio = new CursoPropio((String) matDatosTemp.get(4), (int) matDatosTemp.get(5));
			Estudiante estudiante = new Estudiante((String) matDatosTemp.get(6));
			
			listaMatriculas.add(new Matricula(fecha, pagado, attribute, tipoPago, cursoPropio, estudiante));
		}
		
		return listaMatriculas; 
	}
}