package net.conselldemallorca.helium.core.model.hibernate; import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.ForeignKey; import org.hibernate.annotations.Index; import org.springmodules.validation.bean.conf.loader.annotation.handler.Email; import org.springmodules.validation.bean.conf.loader.annotation.handler.InThePast; import org.springmodules.validation.bean.conf.loader.annotation.handler.MaxLength; import org.springmodules.validation.bean.conf.loader.annotation.handler.NotBlank; /** * Objecte de domini que representa una persona * * @author Limit Tecnologies <limit@limit.es> */ @Entity @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @Table(name="hel_persona") @org.hibernate.annotations.Table( appliesTo = "hel_persona", indexes = @Index(name = "hel_persona_relleu_i", columnNames = {"relleu_id"})) public class Persona implements Serializable, GenericEntity<Long> { public enum Sexe { SEXE_HOME, SEXE_DONA} public enum Fonts { FONT_INTERNA, FONT_EXTERNA} private Long id; @NotBlank @MaxLength(64) private String codi; @NotBlank @MaxLength(255) private String nom; @NotBlank @MaxLength(255) private String llinatge1; @MaxLength(255) private String llinatge2; @MaxLength(64) private String dni; @InThePast private Date dataNaixement; @NotBlank @MaxLength(255) @Email private String email; private Sexe sexe = Sexe.SEXE_HOME; private boolean avisCorreu; private Fonts font; private Persona relleu; public Persona() {} public Persona(String codi, String nom, String llinatge1, String email) { this.codi = codi; this.nom = nom; this.llinatge1 = llinatge1; this.email = email; } @Id @GeneratedValue(strategy = GenerationType.TABLE, generator="gen_persona") @TableGenerator(name="gen_persona", table="hel_idgen", pkColumnName="taula", valueColumnName="valor") @Column(name="id") public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } @Column(name="codi", length=64, nullable=false, unique=true) public String getCodi() { return this.codi; } public void setCodi(String codi) { this.codi = codi; } @Column(name="nom", length=255, nullable=false) public String getNom() { return this.nom; } public void setNom(String nom) { this.nom = nom; } @Column(name="llinatge1", length=255, nullable=false) public String getLlinatge1() { return this.llinatge1; } public void setLlinatge1(String llinatge1) { this.llinatge1 = llinatge1; } @Column(name="llinatge2", length=255) public String getLlinatge2() { return this.llinatge2; } public void setLlinatge2(String llinatge2) { this.llinatge2 = llinatge2; } @Column(name="llinatges") public String getLlinatges() { if (llinatge2 != null && llinatge2.length() > 0) return getLlinatge1() + " " + getLlinatge2(); else return getLlinatge1(); } public void setLlinatges(String llinatges) { if (llinatges != null && llinatge1 == null && llinatge2 == null) { int index = llinatges.lastIndexOf(" "); if (index == -1) { setLlinatge1(llinatges); setLlinatge2(null); } else { setLlinatge1(llinatges.substring(0, index)); setLlinatge2(llinatges.substring(index + 1)); } } } @Column(name="dni", length=64) public String getDni() { return dni; } public void setDni(String dni) { this.dni = dni; } @Column(name="nom_sencer") public String getNomSencer() { StringBuffer nomSencer = new StringBuffer(); nomSencer.append(getNom()); nomSencer.append(" "); nomSencer.append(getLlinatge1()); if (getLlinatge2() != null && getLlinatge2().length() > 0) { nomSencer.append(" "); nomSencer.append(getLlinatge2()); } return nomSencer.toString(); } public void setNomSencer(String nomSencer) { if (nomSencer != null) { int index = nomSencer.indexOf(" "); if (index != -1) { setNom(nomSencer.substring(0, index)); setLlinatges(nomSencer.substring(index + 1)); } } } @Column(name="data_naixement") @Temporal(TemporalType.DATE) public Date getDataNaixement() { return this.dataNaixement; } public void setDataNaixement(Date dataNaixement) { this.dataNaixement = dataNaixement; } @Column(name="email") public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } @Enumerated @Column(name="sexe", nullable=false) public Sexe getSexe() { return this.sexe; } public void setSexe(Sexe sexe) { this.sexe = sexe; } @Column(name="avis_correu", nullable=false) public Boolean getAvisCorreu() { return this.avisCorreu; } public void setAvisCorreu(Boolean avisCorreu) { this.avisCorreu = avisCorreu; } @Column(name="font", nullable=true) public Fonts getFont() { return this.font; } public void setFont(Fonts font) { this.font = font; } @ManyToOne(optional=true) @JoinColumn(name="relleu_id") @ForeignKey(name="hel_relleu_persona_fk") public Persona getRelleu() { return this.relleu; } public void setRelleu(Persona relleu) { this.relleu = relleu; } @Transient public String getInicialsNomSencer() { StringBuffer inicials = new StringBuffer(); String[] strings = getNomSencer().split(" "); for (int i = 0; i < strings.length; i++){ if (strings[i].length() > 0 && !"i".equalsIgnoreCase(strings[i]) && !"de".equalsIgnoreCase(strings[i])) { strings[i] = strings[i].trim(); char inicial = strings[i].charAt(0); inicials.append(inicial); } } return inicials.toString(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((codi == null) ? 0 : codi.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Persona other = (Persona) obj; if (codi == null) { if (other.codi != null) return false; } else if (!codi.equals(other.codi)) return false; return true; } @Override public String toString() { return "Persona id=" + id + ", codi= " + codi + ", nom=" + getNomSencer() + ", email =" + email + ", sexe=" + sexe; } private static final long serialVersionUID = 1L; }