/**
*
*/
package net.conselldemallorca.helium.core.model.hibernate;
import java.io.Serializable;
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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.UniqueConstraint;
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.MaxLength;
import org.springmodules.validation.bean.conf.loader.annotation.handler.NotBlank;
import org.springmodules.validation.bean.conf.loader.annotation.handler.NotNull;
/**
* Objecte de domini que representa una àrea de l'organigrama.
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table( name="hel_area",
uniqueConstraints={@UniqueConstraint(columnNames={"codi", "entorn_id"})})
@org.hibernate.annotations.Table(
appliesTo = "hel_area",
indexes = {
@Index(name = "hel_area_tipus_i", columnNames = {"tipus_id"}),
@Index(name = "hel_area_entorn_i", columnNames = {"entorn_id"}),
@Index(name = "hel_area_pare_i", columnNames = {"pare_id"})})
public class Area implements Serializable, GenericEntity<Long> {
private Long id;
@NotBlank
@MaxLength(64)
private String codi;
@NotBlank
@MaxLength(255)
private String nom;
@MaxLength(255)
private String descripcio;
@NotNull
private AreaTipus tipus;
@NotNull
private Entorn entorn;
private Area pare;
private Set<Area> fills = new HashSet<Area>();
private Set<Carrec> carrecs = new HashSet<Carrec>();
private Set<AreaMembre> membres = new HashSet<AreaMembre>();
public Area() {}
public Area(String codi, String nom, Entorn entorn) {
this.codi = codi;
this.nom = nom;
this.entorn = entorn;
}
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator="gen_area")
@TableGenerator(name="gen_area", table="hel_idgen", pkColumnName="taula", valueColumnName="valor")
@Column(name="id")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name="codi", length=64, nullable=false)
public String getCodi() {
return codi;
}
public void setCodi(String codi) {
this.codi = codi;
}
@Column(name="nom", length=255, nullable=false)
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
@Column(name="descripcio", length=255)
public String getDescripcio() {
return descripcio;
}
public void setDescripcio(String descripcio) {
this.descripcio = descripcio;
}
@ManyToOne(optional=false)
@JoinColumn(name="tipus_id")
@ForeignKey(name="hel_areatipus_area_fk")
public AreaTipus getTipus() {
return tipus;
}
public void setTipus(AreaTipus tipus) {
this.tipus = tipus;
}
@ManyToOne(optional=false)
@JoinColumn(name="entorn_id")
@ForeignKey(name="hel_entorn_area_fk")
public Entorn getEntorn() {
return entorn;
}
public void setEntorn(Entorn entorn) {
this.entorn = entorn;
}
@ManyToOne(optional=true)
@JoinColumn(name="pare_id")
@ForeignKey(name="hel_area_area_fk")
public Area getPare() {
return pare;
}
public void setPare(Area pare) {
this.pare = pare;
}
@OneToMany(mappedBy="pare")
public Set<Area> getFills() {
return this.fills;
}
public void setFills(Set<Area> fills) {
this.fills = fills;
}
public void addFill(Area fill) {
getFills().add(fill);
}
public void removeFill(Area fill) {
getFills().remove(fill);
}
@OneToMany(mappedBy="area", cascade=CascadeType.REMOVE)
public Set<Carrec> getCarrecs() {
return this.carrecs;
}
public void setCarrecs(Set<Carrec> carrecs) {
this.carrecs = carrecs;
}
public void addCarrec(Carrec carrec) {
getCarrecs().add(carrec);
}
public void removeCarrec(Carrec carrec) {
getCarrecs().remove(carrec);
}
@OneToMany(mappedBy="area", cascade=CascadeType.ALL)
public Set<AreaMembre> getMembres() {
return this.membres;
}
public void setMembres(Set<AreaMembre> membres) {
this.membres = membres;
}
public void addMembre(AreaMembre membre) {
getMembres().add(membre);
}
public void removeMembre(AreaMembre membre) {
getMembres().remove(membre);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((codi == null) ? 0 : codi.hashCode());
result = prime * result + ((entorn == null) ? 0 : entorn.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;
Area other = (Area) obj;
if (codi == null) {
if (other.codi != null)
return false;
} else if (!codi.equals(other.codi))
return false;
if (entorn == null) {
if (other.entorn != null)
return false;
} else if (!entorn.equals(other.entorn))
return false;
return true;
}
private static final long serialVersionUID = 1L;
}