Escritura.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.licensis.notaire.negocio;

import com.licensis.notaire.dto.DtoEscritura;
import com.licensis.notaire.dto.DtoFolio;
import com.licensis.notaire.dto.DtoTramite;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import jakarta.persistence.Basic;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.NamedQueries;
import jakarta.persistence.NamedQuery;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.persistence.Temporal;
import jakarta.persistence.TemporalType;
import jakarta.persistence.Version;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlTransient;

/**
 *
 * @author juanca
 */
@Entity
@Table(name = "escrituras")
@XmlRootElement
@NamedQueries(
        {
            @NamedQuery(name = "Escritura.findAll", query = "SELECT e FROM Escritura e"),
            @NamedQuery(name = "Escritura.findByIdEscritura", query = "SELECT e FROM Escritura e WHERE e.idEscritura = :idEscritura"),
            @NamedQuery(name = "Escritura.findByNumero", query = "SELECT e FROM Escritura e WHERE e.numero = :numero"),
            @NamedQuery(name = "Escritura.findByFechaEscrituracion", query = "SELECT e FROM Escritura e WHERE e.fechaEscrituracion = :fechaEscrituracion"),
            @NamedQuery(name = "Escritura.findByFechaInscripcion", query = "SELECT e FROM Escritura e WHERE e.fechaInscripcion = :fechaInscripcion")
        })
public class Escritura implements Serializable
{

    @Basic(optional = false)
    @Column(name = "fecha_escrituracion")
    @Temporal(TemporalType.DATE)
    private Date fechaEscrituracion;
    @Column(name = "fecha_inscripcion")
    @Temporal(TemporalType.DATE)
    private Date fechaInscripcion;
    @Basic(optional = false)
    @Column(name = "version")
    @Version
    private int version;
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_escritura")
    private Integer idEscritura;
    @Basic(optional = false)
    @Column(name = "numero")
    private int numero;
    @Basic(optional = false)
    @Column(name = "cuerpo")
    private String cuerpo;
    @Basic(optional = false)
    @Column(name = "estado")
    private String estado = ConstantesNegocio.ESCRITURA_SIN_FIRMAR;
    @Column(name = "matricula_inscripcion")
    private String matriculaInscripcion;
    @Column(name = "observaciones")
    private String observaciones;
    @com.fasterxml.jackson.annotation.JsonIgnore
    @OneToMany(mappedBy = "fkIdEscritura", fetch = FetchType.LAZY)
    @com.fasterxml.jackson.annotation.JsonIgnoreProperties({"fkIdEscritura"})
    private List<Folio> folioList = null;
    @com.fasterxml.jackson.annotation.JsonIgnore
    @OneToMany(mappedBy = "fkIdEscritura", fetch = FetchType.LAZY)
    @com.fasterxml.jackson.annotation.JsonIgnoreProperties({"fkIdEscritura"})
    private List<Tramite> tramiteList = null;
    @com.fasterxml.jackson.annotation.JsonIgnore
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkIdEscritura", fetch = FetchType.LAZY)
    @com.fasterxml.jackson.annotation.JsonIgnoreProperties({"fkIdEscritura"})
    private List<Testimonio> testimonioList = null;

    public Escritura()
    {
    }

    public Escritura(Integer idEscritura)
    {
        this.idEscritura = idEscritura;
    }

    public Escritura(Integer idEscritura, int numero, Date fechaEscrituracion, String cuerpo, String estado)
    {
        this.idEscritura = idEscritura;
        this.numero = numero;
        this.fechaEscrituracion = fechaEscrituracion;
        this.cuerpo = cuerpo;
        this.estado = estado;
    }

    public Integer getIdEscritura()
    {
        return idEscritura;
    }

    public void setIdEscritura(Integer idEscritura)
    {
        this.idEscritura = idEscritura;
    }

    public int getNumero()
    {
        return numero;
    }

    public void setNumero(int numero)
    {
        this.numero = numero;
    }

    public Date getFechaEscrituracion()
    {
        return fechaEscrituracion;
    }

    public void setFechaEscrituracion(Date fechaEscrituracion)
    {
        this.fechaEscrituracion = fechaEscrituracion;
    }

    public String getCuerpo()
    {
        return cuerpo;
    }

    public void setCuerpo(String cuerpo)
    {
        this.cuerpo = cuerpo;
    }

    public String getEstado()
    {
        return estado;
    }

    public void setEstado(String estado)
    {
        this.estado = estado;
    }

    public String getMatriculaInscripcion()
    {
        return matriculaInscripcion;
    }

    public void setMatriculaInscripcion(String matriculaInscripcion)
    {
        this.matriculaInscripcion = matriculaInscripcion;
    }

    public Date getFechaInscripcion()
    {
        return fechaInscripcion;
    }

    public void setFechaInscripcion(Date fechaInscripcion)
    {
        this.fechaInscripcion = fechaInscripcion;
    }

    public String getObservaciones()
    {
        return observaciones;
    }

    public void setObservaciones(String observaciones)
    {
        this.observaciones = observaciones;
    }

    @XmlTransient
    @JsonIgnore
    public List<Folio> getFolioList()
    {
        return folioList;
    }

    public void setFolioList(List<Folio> folioList)
    {
        this.folioList = folioList;
    }

    @XmlTransient
    @JsonIgnore
    public List<Tramite> getTramiteList()
    {
        return tramiteList;
    }

    public void setTramiteList(List<Tramite> tramiteList)
    {
        this.tramiteList = tramiteList;
    }

    @XmlTransient
    @JsonIgnore
    public List<Testimonio> getTestimonioList()
    {
        return testimonioList;
    }

    public void setTestimonioList(List<Testimonio> testimonioList)
    {
        this.testimonioList = testimonioList;
    }

    public void setAtributos(DtoEscritura miDtoEscritura)
    {
        if (miDtoEscritura != null)
        {
            if (idEscritura != null)
            {
                idEscritura = miDtoEscritura.getIdEscritura();
            }

            numero = miDtoEscritura.getNumero();
            fechaEscrituracion = miDtoEscritura.getFechaEscrituracion();

            if (miDtoEscritura.getFolios() != null)
            {
                folioList = new ArrayList<>();
                for (Iterator<DtoFolio> it = miDtoEscritura.getFolios().iterator(); it.hasNext();)
                {
                    DtoFolio dtoFolio = it.next();
                    Folio miFolio = new Folio();

                    miFolio.setAtributos(dtoFolio);

                    folioList.add(miFolio);
                }
            }

            if (miDtoEscritura.getTramites() != null)
            {
                tramiteList = new ArrayList<>();
                for (Iterator<DtoTramite> it = miDtoEscritura.getTramites().iterator(); it.hasNext();)
                {
                    DtoTramite dtoTramite = it.next();
                    Tramite miTramite = new Tramite();

                    miTramite.setIdTramite(dtoTramite.getIdTramite());
                    tramiteList.add(miTramite);
                }
            }
            cuerpo = miDtoEscritura.getCuerpo();
            estado = miDtoEscritura.getEstado();
            version = miDtoEscritura.getVersion();
        }
    }

    @com.fasterxml.jackson.annotation.JsonIgnore
    public DtoEscritura getDto()
    {
        DtoEscritura miDtoEscritura = new DtoEscritura();

        miDtoEscritura.setIdEscritura(idEscritura);
        miDtoEscritura.setFechaEscrituracion(fechaEscrituracion);
        miDtoEscritura.setNumero(numero);
        miDtoEscritura.setCuerpo(cuerpo);
        miDtoEscritura.setEstado(estado);
        miDtoEscritura.setMatriculaInscripcion(matriculaInscripcion);
        miDtoEscritura.setFechaInscripcion(fechaInscripcion);

        miDtoEscritura.setVersion(version);

        if (folioList != null && !folioList.isEmpty())
        {

            for (Iterator<Folio> it = folioList.iterator(); it.hasNext();)
            {
                Folio folio = it.next();
                DtoFolio miDtoFolio = folio.getDto();

                miDtoEscritura.getFolios().add(miDtoFolio);
            }
        } else
        {
            miDtoEscritura.setFolios(null);
        }

        if (tramiteList != null && !tramiteList.isEmpty())
        {
            for (Iterator<Tramite> it = tramiteList.iterator(); it.hasNext();)
            {
                Tramite tramite = it.next();
                DtoTramite miDtoTramite = tramite.getDto();

                miDtoEscritura.getTramites().add(miDtoTramite);
            }
        } else
        {
            miDtoEscritura.setTramites(null);
        }

        return miDtoEscritura;
    }

    @Override
    public int hashCode()
    {
        int hash = 0;
        hash += (idEscritura != null ? idEscritura.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object)
    {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Escritura))
        {
            return false;
        }
        Escritura other = (Escritura) object;
        if ((this.idEscritura == null && other.idEscritura != null) || (this.idEscritura != null && !this.idEscritura.equals(other.idEscritura)))
        {
            return false;
        }
        return true;
    }

    @Override
    public String toString()
    {
        return "Escritura[ idEscritura=" + idEscritura + " ]"
                + "[ numero=" + numero
                + ", fecha escrituracion: " + this.fechaEscrituracion
                + ", fecha inscripcion: " + this.fechaInscripcion
                + ", Estado: " + this.estado + " ]";
    }

    public int getVersion()
    {
        return version;
    }

    public void setVersion(int version)
    {
        this.version = version;
    }
}