app.datos.clases.FiltroInmueble.java Source code

Java tutorial

Introduction

Here is the source code for app.datos.clases.FiltroInmueble.java

Source

/**
 * Copyright (C) 2016 Fernando Berti - Daniel Campodonico - Emiliano Gioria - Lucas Moretti - Esteban Rebechi - Andres Leonel Rico
 * This file is part of Olimpo.
 *
 * Olimpo is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Olimpo is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Olimpo. If not, see <http://www.gnu.org/licenses/>.
 */
package app.datos.clases;

import org.hibernate.Query;

import app.datos.entidades.Barrio;
import app.datos.entidades.Localidad;
import app.datos.entidades.Pais;
import app.datos.entidades.Provincia;

/**
 * Clase que representa las opciones de bsqueda de un inmueble
 */
public class FiltroInmueble {

    private String consulta;
    private String nombreEntidad = "Inmu";
    private String pais;
    private String provincia;
    private String localidad;
    private String barrio;
    private TipoInmuebleStr tipoInmueble;
    private Integer cantidadDormitorios;
    private Double precioMaximo;
    private Double precioMinimo;
    private EstadoInmuebleStr estadoInmueble;

    private FiltroInmueble() {
        super();
    }

    private FiltroInmueble(FiltroInmueble filtro) {
        this();
        this.consulta = filtro.consulta;
        this.nombreEntidad = filtro.nombreEntidad;
        this.pais = filtro.pais;
        this.provincia = filtro.provincia;
        this.localidad = filtro.localidad;
        this.barrio = filtro.barrio;
        this.tipoInmueble = filtro.tipoInmueble;
        this.cantidadDormitorios = filtro.cantidadDormitorios;
        this.precioMaximo = filtro.precioMaximo;
        this.precioMinimo = filtro.precioMinimo;
        this.estadoInmueble = filtro.estadoInmueble;
    }

    /**
     * Clase que construye el filtro
     */
    public static class Builder {

        private FiltroInmueble filtroInmueble;

        public Builder() {
            super();
            filtroInmueble = new FiltroInmueble();
        }

        public Builder pais(Pais pais) {
            if (pais != null) {
                filtroInmueble.pais = pais.getNombre();
            }
            return this;
        }

        public Builder provincia(Provincia provincia) {
            if (provincia != null) {
                filtroInmueble.provincia = provincia.getNombre();
            }
            return this;
        }

        public Builder localidad(Localidad localidad) {
            if (localidad != null) {
                filtroInmueble.localidad = localidad.getNombre();
            }
            return this;
        }

        public Builder barrio(Barrio barrio) {
            if (barrio != null) {
                filtroInmueble.barrio = barrio.getNombre();
            }
            return this;
        }

        public Builder tipoInmueble(TipoInmuebleStr tipoInmueble) {
            filtroInmueble.tipoInmueble = tipoInmueble;
            return this;
        }

        public Builder cantidadDormitorios(Integer cantidadDormitorios) {
            filtroInmueble.cantidadDormitorios = cantidadDormitorios;
            return this;
        }

        public Builder precioMaximo(Double precioMaximo) {
            filtroInmueble.precioMaximo = precioMaximo;
            return this;
        }

        public Builder precioMinimo(Double precioMinimo) {
            filtroInmueble.precioMinimo = precioMinimo;
            return this;
        }

        public Builder estadoInmueble(EstadoInmuebleStr estadoInmueble) {
            filtroInmueble.estadoInmueble = estadoInmueble;
            return this;
        }

        public FiltroInmueble build() {
            filtroInmueble.setConsulta();
            return new FiltroInmueble(filtroInmueble);
        }
    }

    /**
     * Genera la consulta hql para hibernate con los parmetros con los que lo construyeron
     */
    private void setConsulta() {
        consulta = this.getSelect() + this.getFrom() + this.getWhere() + this.getOrderBy();
    }

    /**
     * Genera el select de la consulta hql para hibernate con los parmetros con los que lo construyeron
     */
    private String getSelect() {
        String select = "SELECT " + nombreEntidad;
        return select;
    }

    /**
     * Genera el from de la consulta hql para hibernate con los parmetros con los que lo construyeron
     */
    private String getFrom() {
        String from = " FROM Inmueble " + nombreEntidad;
        return from;
    }

    /**
     * Genera el where de la consulta hql para hibernate con los parmetros con los que lo construyeron
     */
    private String getWhere() {
        String where = ((pais != null)
                ? (nombreEntidad + ".direccion.localidad.provincia.pais.nombre LIKE :pai AND ")
                : (""))
                + ((provincia != null) ? (nombreEntidad + ".direccion.localidad.provincia.nombre LIKE :pro AND ")
                        : (""))
                + ((localidad != null) ? (nombreEntidad + ".direccion.localidad.nombre LIKE :loc AND ") : (""))
                + ((barrio != null) ? (nombreEntidad + ".direccion.barrio.nombre LIKE :bar AND ") : (""))
                + ((tipoInmueble != null) ? (nombreEntidad + ".tipo.tipo = :tii AND ") : (""))
                + ((cantidadDormitorios != null) ? (nombreEntidad + ".datosEdificio.dormitorios >= :cad AND ")
                        : (""))
                + ((precioMaximo != null) ? (nombreEntidad + ".precio <= :pma AND ") : (""))
                + ((precioMinimo != null) ? (nombreEntidad + ".precio >= :pmi AND ") : (""))
                + ((estadoInmueble != null) ? (nombreEntidad + ".estadoInmueble.estado = :esi AND ") : (""));

        where = " WHERE " + where + nombreEntidad + ".estado.estado = 'ALTA'";
        return where;
    }

    /**
     * Genera el order by de la consulta hql para hibernate con los parmetros con los que lo construyeron
     */
    private String getOrderBy() {
        String orderBy = " ORDER BY " + nombreEntidad + ".fechaCarga ASC";
        return orderBy;
    }

    /**
     * Setea los parmetros con los que lo construyeron a la consulta hql de hibernate
     */
    public Query setParametros(Query query) {
        if (pais != null) {
            query.setParameter("pai", "%" + pais + "%");
        }
        if (provincia != null) {
            query.setParameter("pro", "%" + provincia + "%");
        }
        if (localidad != null) {
            query.setParameter("loc", "%" + localidad + "%");
        }
        if (barrio != null) {
            query.setParameter("bar", "%" + barrio + "%");
        }
        if (tipoInmueble != null) {
            query.setParameter("tii", tipoInmueble);
        }
        if (cantidadDormitorios != null) {
            query.setParameter("cad", cantidadDormitorios);
        }
        if (precioMaximo != null) {
            query.setParameter("pma", precioMaximo);
        }
        if (precioMinimo != null) {
            query.setParameter("pmi", precioMinimo);
        }
        if (estadoInmueble != null) {
            query.setParameter("esi", estadoInmueble);
        }
        return query;
    }

    /**
     * Devuelve la consulta hql de hibernate generada al construirse
     */
    public String getConsultaDinamica() {
        return consulta;
    }
}