package casarural; import java.util.Vector; import java.sql.Date; import java.util.Enumeration; import java.io.*; import excepciones.NoSePuedeReservarException; /** * @author kdreamer */ public class OfertasEnMemoriaPrincipal implements Serializable { /** * @uml.property name="ofertas" */ private Vector ofertas = new Vector(); public OfertasEnMemoriaPrincipal() { } /** * Añade una reserva al objeto OfertasEnMemoriaPrincipal * * @param dia * de inicio, dia de fin, numero de oferta y precio * @return Nada */ public void anadirReserva(java.sql.Date diaIni, java.sql.Date diaFin, String numOferta, float precio) { try { Oferta ofert = new Oferta(); ofert.setDiaIni(diaIni); ofert.setDiaFin(diaFin); ofert.setNumOferta(numOferta); ofert.setPrecio(precio); this.ofertas.addElement(ofert); } catch (Exception e) { e.printStackTrace(); } } /** * Añade una reserva al objeto OfertasEnMemoriaPrincipal * * @param dia * de inicio, dia de fin, numero de oferta, precio y numero de * reserva * @return Nada */ public void anadirReserva(java.sql.Date diaIni, java.sql.Date diaFin, String numOferta, float precio, String numReserva) { try { Oferta ofert = new Oferta(); ofert.setDiaIni(diaIni); ofert.setDiaFin(diaFin); ofert.setNumOferta(numOferta); ofert.setPrecio(precio); ofert.setNumReserva(numReserva); this.ofertas.addElement(ofert); } catch (Exception e) { e.printStackTrace(); } } /** * Obtiene el conjunto de ofertas que se encuentran entre diaIni y diaFin * * @param dia * de inicio y dia de fin * @return Vector de objetos de la clase Oferta */ public Vector obtenerOfertasIncluidasEntre(java.sql.Date diaIni, java.sql.Date diaFin) { Vector vector = new Vector(); try { java.sql.Date dateAuxIni; java.sql.Date dateAuxFin; String numReserva; Oferta oferta; Enumeration e = this.ofertas.elements(); while (e.hasMoreElements()) { oferta = (Oferta) e.nextElement(); dateAuxIni = oferta.getDiaIni(); dateAuxFin = oferta.getDiaFin(); numReserva = oferta.getNumReserva(); if ((dateAuxIni.after(diaIni) || dateAuxIni.equals(diaIni)) && (dateAuxFin.before(diaFin) || dateAuxFin .equals(diaFin)) && (numReserva == null)) { Oferta ofert = new Oferta(); ofert.setNumOferta(oferta.getNumOferta()); ofert.setDiaIni(oferta.getDiaIni()); ofert.setDiaFin(oferta.getDiaFin()); ofert.setNumReserva(oferta.getNumReserva()); ofert.setPrecio(oferta.getPrecio()); vector.addElement(ofert); } } } catch (Exception exc) { exc.printStackTrace(); } return vector; } /** * Obtiene la oferta que incluye el diaIni en su periodo de oferta * * @param dia * de inicio y dia de fin * @return el numero de oferta */ public String obtenerOfertaAnteriorAYSolapadaCon(java.sql.Date diaIni, java.sql.Date diaFin) { try { java.sql.Date dateAuxIni; java.sql.Date dateAuxFin; Oferta oferta; Enumeration e = this.ofertas.elements(); while (e.hasMoreElements()) { oferta = (Oferta) e.nextElement(); dateAuxIni = oferta.getDiaIni(); dateAuxFin = oferta.getDiaFin(); if ((dateAuxIni.before(diaIni) || dateAuxIni.equals(diaIni)) && (dateAuxFin.after(diaIni) || dateAuxFin .equals(diaIni))) { return oferta.getNumOferta(); } } } catch (Exception exc) { exc.printStackTrace(); } return "cero"; } /** * Obtiene la oferta que incluye el diaFin en su periodo de oferta * * @param dia * de inicio y dia de fin * @return el numero de oferta */ public String obtenerOfertaPosteriorAYSolapadaCon(java.sql.Date diaIni, java.sql.Date diaFin) { try { java.sql.Date dateAuxIni; java.sql.Date dateAuxFin; Oferta oferta; Enumeration e = this.ofertas.elements(); while (e.hasMoreElements()) { oferta = (Oferta) e.nextElement(); dateAuxIni = oferta.getDiaIni(); dateAuxFin = oferta.getDiaFin(); if ((dateAuxIni.before(diaFin) || dateAuxIni.equals(diaFin)) && (dateAuxFin.after(diaFin) || dateAuxFin .equals(diaFin))) { return oferta.getNumOferta(); } } } catch (Exception exc) { exc.printStackTrace(); } return "cero"; } /** * Nos dice si tiene almacenada alguna oferta que esta reservada * * @param Nada * @return ¿Hay alguna oferta reservada? */ public boolean existeOfertaReservada() { Oferta oferta; Enumeration e = this.ofertas.elements(); while (e.hasMoreElements()) { oferta = (Oferta) e.nextElement(); if (!(oferta.getNumReserva() == null)) return true; } return false; } /** * Obtiene la el conjunto de ofertas que componen la reserva completa * * @param dia * de inicio y dia de fin * @return Vector de objetos de la clase ReservaCompleta */ public Vector obtenerReservaCompleta(java.sql.Date diaIni, java.sql.Date diaFin) throws NoSePuedeReservarException { Vector vector = new Vector(); java.sql.Date dateAuxIni; java.sql.Date dateAuxFin; String numReserva; Oferta oferta; java.sql.Date diaActual = new java.sql.Date(System.currentTimeMillis()); int anoActual = diaActual.getYear() + 1900; Integer anoActualAux = new Integer(anoActual + 10); java.sql.Date minDiaIni = java.sql.Date.valueOf(anoActualAux.toString() + "-12-31"); java.sql.Date maxDiaFin = new java.sql.Date( System.currentTimeMillis() - 1000 * 3600 * 24); Enumeration e = this.ofertas.elements(); while (e.hasMoreElements()) { oferta = (Oferta) e.nextElement(); dateAuxIni = oferta.getDiaIni(); dateAuxFin = oferta.getDiaFin(); numReserva = oferta.getNumReserva(); if ((dateAuxFin.after(diaIni) || dateAuxFin.equals(diaIni)) && (dateAuxIni.before(diaFin) || dateAuxIni.equals(diaFin)) && (numReserva == null)) { if (dateAuxFin.after(maxDiaFin)) maxDiaFin = (java.sql.Date) dateAuxFin.clone(); if (dateAuxIni.before(minDiaIni)) minDiaIni = (java.sql.Date) dateAuxIni.clone(); ReservaCompleta resComp = new ReservaCompleta(); resComp.setNumOferta(oferta.getNumOferta()); resComp.setPrecio(oferta.getPrecio()); vector.addElement(resComp); } } if (!vector.elements().hasMoreElements()) throw new NoSePuedeReservarException( "La casa no se encuentra disponible estos dias"); if (minDiaIni.after(diaIni)) throw new NoSePuedeReservarException( "La casa solo esta disponible a partir del dia " + minDiaIni); if (maxDiaFin.before(diaFin)) throw new NoSePuedeReservarException( "La casa solo esta disponible hasta el dia " + maxDiaFin); return vector; } /** * Obtiene el conjunto de ofertas que desde la que incluye a diaIni hasta la * que incluye a diaFin * * @param dia * de inicio y dia de fin * @return Vector de objetos de la clase Oferta */ public Vector obtenerOfertasEntre(java.sql.Date diaIni, java.sql.Date diaFin) { Vector vector = new Vector(); try { java.sql.Date dateAuxIni; java.sql.Date dateAuxFin; String numReserva; Oferta oferta; Enumeration e = this.ofertas.elements(); while (e.hasMoreElements()) { oferta = (Oferta) e.nextElement(); dateAuxIni = oferta.getDiaIni(); dateAuxFin = oferta.getDiaFin(); numReserva = oferta.getNumReserva(); if ((diaIni.after(dateAuxIni) || diaIni.equals(dateAuxIni)) && (diaIni.before(dateAuxFin) || diaIni .equals(dateAuxFin)) && (numReserva == null)) { Oferta ofert = new Oferta(); ofert.setNumOferta(oferta.getNumOferta()); ofert.setDiaIni(oferta.getDiaIni()); ofert.setDiaFin(oferta.getDiaFin()); ofert.setNumReserva(oferta.getNumReserva()); ofert.setPrecio(oferta.getPrecio()); vector.addElement(ofert); } else if ((dateAuxIni.after(diaIni) || dateAuxIni .equals(diaIni)) && (dateAuxFin.before(diaFin) || dateAuxFin .equals(diaFin)) && (numReserva == null)) { Oferta ofert = new Oferta(); ofert.setNumOferta(oferta.getNumOferta()); ofert.setDiaIni(oferta.getDiaIni()); ofert.setDiaFin(oferta.getDiaFin()); ofert.setNumReserva(oferta.getNumReserva()); ofert.setPrecio(oferta.getPrecio()); vector.addElement(ofert); } else if ((diaFin.after(dateAuxIni) || diaFin .equals(dateAuxIni)) && (diaFin.before(dateAuxFin) || diaFin .equals(dateAuxFin)) && (numReserva == null)) { Oferta ofert = new Oferta(); ofert.setNumOferta(oferta.getNumOferta()); ofert.setDiaIni(oferta.getDiaIni()); ofert.setDiaFin(oferta.getDiaFin()); ofert.setNumReserva(oferta.getNumReserva()); ofert.setPrecio(oferta.getPrecio()); vector.addElement(ofert); } } } catch (Exception exc) { exc.printStackTrace(); } return vector; } /** * Devuelve el estado de la casa rural en un dia concreto * * @param dia * @return String con el estado en el que se encuentra la casa */ public String estadoCasaRural(java.sql.Date dia, Vector ompVector) { // /////////////////////////////////////////////////////////////// // /////////////se mira si el dia concreto se encuentra dentro de los // plazos para la reserva// Vector ompVectorAux = new Vector(); ompVectorAux = ompVector; try { java.sql.Date dateAuxIni; java.sql.Date dateAuxFin; Oferta oferta; Enumeration e = ompVectorAux.elements(); while (e.hasMoreElements()) { oferta = (Oferta) e.nextElement(); dateAuxIni = oferta.getDiaIni(); dateAuxFin = oferta.getDiaFin(); if ((dateAuxIni.before(dia) || dateAuxIni.equals(dia)) && (dateAuxFin.after(dia) || dateAuxFin.equals(dia))) {// ///////si // el // dia // esta // dentro // del // plazo // posible // para // la // reserva, // devolvemos // estado // libre/// return "libre"; } } } catch (Exception exc) { exc.printStackTrace(); } // /////al salir del bucle no estara libre y devolveremos reservada//// return "reservada"; } /** * Devuelve todas las ofertas * @return Las ofertas * @uml.property name="ofertas" */ public Vector getOfertas() { return ofertas; } }