package org.dddlib.organisation.domain; import org.dayatang.domain.AbstractEntity; import javax.persistence.*; import java.util.*; @Entity @Table(name = "persons") public class Person extends AbstractEntity { private static final long serialVersionUID = 4180083929142881138L; @Embedded private PersonName name; private String idNumber; @ElementCollection @CollectionTable(name = "person_emails", joinColumns = @JoinColumn(name = "person_id")) private Set<Email> emails = new HashSet<Email>(); @ElementCollection @CollectionTable(name = "person_ims", joinColumns = @JoinColumn(name = "person_id")) @MapKeyColumn(name = "im_type") @MapKeyEnumerated(EnumType.STRING) @Column(name = "im_address") private Map<ImType, String> ims = new HashMap<ImType, String>(); @Embedded @AttributeOverrides({ @AttributeOverride(name = "province", column = @Column(name = "home_province")), @AttributeOverride(name = "city", column = @Column(name = "home_city")), @AttributeOverride(name = "detail", column = @Column(name = "home_detail")) }) private Address homeAddress; @Embedded @AttributeOverrides({ @AttributeOverride(name = "province", column = @Column(name = "mail_province")), @AttributeOverride(name = "city", column = @Column(name = "mail_city")), @AttributeOverride(name = "detail", column = @Column(name = "mail_detail")) }) private Address mailAddress; public Person(PersonName name) { this.name = name; } public Person(String firstName, String lastName) { this.name = new PersonName(firstName, lastName); } public PersonName getName() { return name; } public void setName(PersonName name) { this.name = name; } public String getIdNumber() { return idNumber; } public void setIdNumber(String idNumber) { this.idNumber = idNumber; } public Set<Email> getEmails() { return Collections.unmodifiableSet(emails); } public void setEmails(Set<Email> emails) { if (emails == null) { return; } this.emails = new HashSet<Email>(emails); } public void addEmail(Email email) { emails.add(email); } public void removeEmail(Email email) { emails.remove(email); } public Map<ImType, String> getIms() { return Collections.unmodifiableMap(ims); } public void setIms(Map<ImType, String> ims) { if (ims == null) { return; } this.ims = new EnumMap<ImType, String>(ims); } public void setIm(ImType imType, String imAddress) { ims.put(imType, imAddress); } public void removeIm(ImType imType) { ims.remove(imType); } public Address getHomeAddress() { return homeAddress; } public void setHomeAddress(Address homeAddress) { this.homeAddress = homeAddress; } public Address getMailAddress() { return mailAddress; } public void setMailAddress(Address mailAddress) { this.mailAddress = mailAddress; } @Override public String[] businessKeys() { return new String[]{"name", "idNumber"}; } @Override public String toString() { return name.toString(); } }