package org.multibit.mbm.core.model; import com.google.common.collect.Sets; import org.multibit.mbm.utils.ObjectUtils; import javax.persistence.*; import java.util.Set; /** *  <p>DTO to provide the following to {@link ContactMethod}:<br> *  <ul> *  <li>Provision of detail fields for the contact method </li> *  </ul> *  </p> *   */ @Entity @Table(name = "contact_method_details") public class ContactMethodDetail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) private Long id = null; @Column(name = "primary_detail") private String primaryDetail; @ElementCollection(fetch = FetchType.EAGER) @CollectionTable( name = "contact_method_secondary_details", joinColumns = @JoinColumn(name = "contact_method_id" )) @Column(name = "secondary_detail") private Set<String> secondaryDetails = Sets.newLinkedHashSet(); public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getPrimaryDetail() { return primaryDetail; } public void setPrimaryDetail(String primaryDetail) { this.primaryDetail = primaryDetail; } public Set<String> getSecondaryDetails() { return secondaryDetails; } public void setSecondaryDetails(Set<String> secondaryDetails) { this.secondaryDetails = secondaryDetails; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final ContactMethodDetail other = (ContactMethodDetail) obj; return ObjectUtils.isEqual( id, other.id, primaryDetail, other.primaryDetail ); } @Override public int hashCode() { return ObjectUtils.getHashCode(id, primaryDetail); } @Override public String toString() { return String.format("ContactMethodDetail[id=%s, primaryDetail='%s']]", id, primaryDetail); } }