package shop.kundenverwaltung.domain;
import javax.persistence.Cacheable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlTransient;
import org.hibernate.validator.constraints.NotEmpty;
import shop.artikelverwaltung.domain.Hersteller;
import shop.util.persistence.AbstractAuditable;
@Cacheable
@Entity
@Table(indexes = @Index(columnList = "plz"))
public class Adresse extends AbstractAuditable {
private static final long serialVersionUID = 6370717829606891773L;
@Id
@GeneratedValue
@Column(nullable = false, updatable = false)
private Long id;
@NotNull(message = "{Adresse.strasse.notnull}")
@Pattern(regexp = "[A-Z���][a-z���]+", message = "Adresse.strasse.pattern")
private String strasse;
@NotEmpty(message = "{adresse.haus)nummer.notempty}")
@Size(max = 6, message = "Adresse.hausnummer.size")
private String hausnummer;
@NotNull(message = "{adresse.plz.notnull}")
@Pattern(regexp = "[0-9]+", message = "Adresse.plz.pattern")
private String plz;
@NotNull(message = "{adresse.stadt.notnull")
@Pattern(regexp = "[A-Z���][a-z���]+", message = "Adresse.stadt.pattern")
private String stadt;
@OneToOne
@JoinColumn(name = "kunde_fk", unique = true)
@XmlTransient
private AbstractKunde kunde;
@OneToOne
@JoinColumn(name = "hersteller_fk", unique = true)
@XmlTransient
private Hersteller hersteller;
public Adresse() {
super();
}
public Adresse(String plz, String ort, String strasse, String hausnr, AbstractKunde kunde, Hersteller hersteller) {
super();
this.strasse = strasse;
this.hausnummer = hausnr;
this.plz = plz;
this.stadt = ort;
this.kunde = kunde;
this.hersteller = hersteller;
}
public String getStrasse() {
return strasse;
}
public void setStrasse(String strasse) {
this.strasse = strasse;
}
public String getHausnummer() {
return hausnummer;
}
public void setHausnummer(String hausnummer) {
this.hausnummer = hausnummer;
}
public String getPlz() {
return plz;
}
public void setPlz(String plz) {
this.plz = plz;
}
public String getStadt() {
return stadt;
}
public void setStadt(String stadt) {
this.stadt = stadt;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public String toString() {
return "Adresse [id=" + id + ", strasse=" + strasse + ", hausnummer="
+ hausnummer + ", plz=" + plz + ", stadt=" + stadt + ", kunde="
+ kunde + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((hausnummer == null) ? 0 : hausnummer.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((kunde == null) ? 0 : kunde.hashCode());
result = prime * result + ((plz == null) ? 0 : plz.hashCode());
result = prime * result + ((stadt == null) ? 0 : stadt.hashCode());
result = prime * result + ((strasse == null) ? 0 : strasse.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;
final Adresse other = (Adresse) obj;
if (hausnummer == null) {
if (other.hausnummer != null)
return false;
}
else if (!hausnummer.equals(other.hausnummer))
return false;
if (id == null) {
if (other.id != null)
return false;
}
else if (!id.equals(other.id))
return false;
if (kunde == null) {
if (other.kunde != null)
return false;
}
else if (!kunde.equals(other.kunde))
return false;
if (plz == null) {
if (other.plz != null)
return false;
}
else if (!plz.equals(other.plz))
return false;
if (stadt == null) {
if (other.stadt != null)
return false;
}
else if (!stadt.equals(other.stadt))
return false;
if (strasse == null) {
if (other.strasse != null)
return false;
}
else if (!strasse.equals(other.strasse))
return false;
return true;
}
public AbstractKunde getKunde() {
return kunde;
}
public void setKunde(AbstractKunde kunde) {
this.kunde = kunde;
}
public Hersteller getHersteller() {
return hersteller;
}
public void setHersteller(Hersteller hersteller) {
this.hersteller = hersteller;
}
}