Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.gov.al.saude.srv.model;

import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import org.hibernate.envers.AuditTable;
import org.hibernate.envers.Audited;
import org.hibernate.envers.RelationTargetAuditMode;
import br.gov.al.saude.framework.core.generic.identidade.Identidade;
import br.gov.al.saude.framework.core.interfaces.Alterar;
import br.gov.al.saude.framework.core.interfaces.Cadastrar;
import br.gov.al.saude.framework.model.SetorView;

@Audited
@AuditTable(value="srv_hist_servidor_dadofuncional", schema="sc_srv")
@Entity
@Table(name = "srv_servidor_dadofuncional", schema = "sc_srv")
@Inheritance(strategy=InheritanceType.JOINED)
public class ServidorDadoFuncional implements Serializable, Identidade, Comparable<ServidorDadoFuncional> {
        private static final long serialVersionUID = 1L;

        private Long sequencial;
        private FormaIngresso formaIngresso;
        private Date dataInicio;
        private Integer cargaHoraria;
        private Orgao orgaoLotacao;
        private Unidade unidadeLotacao;
        private Servidor servidor;
        private Especialidade especialidade;
        private SetorView setorView;
        private ServidorDadoFuncionalConselho servidorDadoFuncionalConselho;
        private Set<EventoServidorDadoFuncional> eventosServidorDadoFuncional = new HashSet<EventoServidorDadoFuncional>();

        public ServidorDadoFuncional() {}
       
        public ServidorDadoFuncional(Servidor servidor) {
                this.servidor = servidor;
        }

        @Id
        @Column(name="seq_servidor_dadofuncional", nullable=false)     
        @GeneratedValue(generator = "SERVIDOR_DADO_FUNCIONAL_GENERATOR", strategy = GenerationType.SEQUENCE)
        @SequenceGenerator(name = "SERVIDOR_DADO_FUNCIONAL_GENERATOR", sequenceName = "sc_srv.sq_servdadofunc", initialValue = 1, allocationSize = 1)
        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }

        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @JoinColumn(name="cod_forma_ingresso", referencedColumnName="cod_forma_ingresso", nullable=false)
        @NotNull(message="Obrigatório informar a forma de ingresso.", groups={Cadastrar.class, Alterar.class})
        public FormaIngresso getFormaIngresso() {
                return formaIngresso;
        }
        public void setFormaIngresso(FormaIngresso formaIngresso) {
                this.formaIngresso = formaIngresso;
        }

        @Temporal(TemporalType.DATE)
        @Column(name="dat_inicio", nullable=false)
        @NotNull(message="Obrigatório informar a data de início (data de admissão).", groups={Cadastrar.class, Alterar.class})
        public Date getDataInicio() {
                return dataInicio;
        }
        public void setDataInicio(Date dataInicio) {
                this.dataInicio = dataInicio;
        }

        @Column(name="num_carga_horaria", nullable=false, length=2)
        @NotNull(message="Obrigatório informar a carga horária.", groups={Cadastrar.class, Alterar.class})
        public Integer getCargaHoraria() {
                return cargaHoraria;
        }
        public void setCargaHoraria(Integer cargaHoraria) {
                this.cargaHoraria = cargaHoraria;
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @JoinColumn(name="seq_orgao_lotacao", referencedColumnName="seq_orgao", nullable=false)
        @NotNull(message="Obrigatório informar o órgão de lotação.", groups={Cadastrar.class, Alterar.class})
        public Orgao getOrgaoLotacao() {
                return orgaoLotacao;
        }
        public void setOrgaoLotacao(Orgao orgaoLotacao) {
                this.orgaoLotacao = orgaoLotacao;
        }

        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @JoinColumn(name="cod_unidade_lotacao", referencedColumnName="cod_unidade", nullable=false)
        @NotNull(message="Obrigatório informar a unidade de lotação.", groups={Cadastrar.class, Alterar.class})
        public Unidade getUnidadeLotacao() {
                return unidadeLotacao;
        }
        public void setUnidadeLotacao(Unidade unidadeLotacao) {
                this.unidadeLotacao = unidadeLotacao;
        }

        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @JoinColumn(name="cod_especialidade", referencedColumnName="cod_especialidade")
        public Especialidade getEspecialidade() {
                return especialidade;
        }      
        public void setEspecialidade(Especialidade especialidade) {
                this.especialidade = especialidade;
        }
       
        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @JoinColumn(name="cod_localidade_setor", referencedColumnName="cod_localidade")
        public SetorView getSetorView() {
                return setorView;
        }      
        public void setSetorView(SetorView setorView) {
                this.setorView = setorView;
        }

        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @Valid
        @OneToOne(mappedBy="servidorDadoFuncional", cascade=CascadeType.ALL, orphanRemoval=true)
        public ServidorDadoFuncionalConselho getServidorDadoFuncionalConselho() {
                return servidorDadoFuncionalConselho;
        }

        public void setServidorDadoFuncionalConselho(ServidorDadoFuncionalConselho servidorDadoFuncionalConselho) {
                this.servidorDadoFuncionalConselho = servidorDadoFuncionalConselho;
        }

        @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
        @ManyToOne
        @JoinColumn(name="seq_pessoa_servidor", referencedColumnName="seq_pessoa_servidor", nullable=false)
        public Servidor getServidor() {
                return servidor;
        }      
        public void setServidor(Servidor servidor) {
                this.servidor = servidor;
        }
       
        @OneToMany(mappedBy="servidorDadoFuncional", cascade=CascadeType.ALL, orphanRemoval=true)
        public Set<EventoServidorDadoFuncional> getEventosServidorDadoFuncional() {
                return eventosServidorDadoFuncional;
        }
       
        public void setEventosServidorDadoFuncional(Set<EventoServidorDadoFuncional> eventosServidorDadoFuncional) {
                this.eventosServidorDadoFuncional = eventosServidorDadoFuncional;
        }
       
        @Transient
        @Override
        public Object getId() {
                return this.sequencial;
        }
        @Override
        public void setId(Object id) {
                this.sequencial = (Long) id;
        }

        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result
                                + ((sequencial == null) ? 0 : sequencial.hashCode());
                result = prime * result
                                + ((servidor == null) ? 0 : servidor.hashCode());
                return result;
        }

        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (!(obj instanceof ServidorDadoFuncional))
                        return false;
                ServidorDadoFuncional other = (ServidorDadoFuncional) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                if (servidor == null) {
                        if (other.servidor != null)
                                return false;
                } else if (!servidor.equals(other.servidor))
                        return false;
                return true;
        }
       
        @Override
        public int compareTo(ServidorDadoFuncional sdf) {
                return getSequencial().compareTo(sdf.getSequencial());
        }

}