package at.intelligentminds.service.model; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinTable; import javax.persistence.JoinColumn; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @Entity @Table(name = "user") public class User { private String email; private String accountName; private String firstName; private String lastName; private String pwHash; private String profileText; private String gender; private Set<User> usersForContactId = new HashSet<User>(0); private Set<Message> messagesForUserReceiverId = new HashSet<Message>(0); private Set<User> usersForUserId = new HashSet<User>(0); private Set<Message> messagesForUserSenderId = new HashSet<Message>(0); private Set<Group> groups = new HashSet<Group>(0); @OneToMany(mappedBy = "confirmer") private Set<Request> confirmerRequests = new HashSet<Request>(0); @OneToMany(mappedBy = "requester") private Set<Request> requesterRequests = new HashSet<Request>(0); public User() { } public User(String email) { this.email = email; } public User(String email, String accountName, String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; this.accountName = accountName; this.email = email; } public User(String email, String accountName, String firstName, String lastName, String pwHash, String profileText, String gender, Set<User> usersForContactId, Set<Message> messagesForUserReceiverId, Set<User> usersForUserId, Set<Message> messagesForUserSenderId, Set<Group> groups, Set<Request> userRequests, Set<Request> requesterRequests) { this.firstName = firstName; this.lastName = lastName; this.accountName = accountName; this.pwHash = pwHash; this.email = email; this.profileText = profileText; this.gender = gender; this.usersForContactId = usersForContactId; this.messagesForUserReceiverId = messagesForUserReceiverId; this.usersForUserId = usersForUserId; this.messagesForUserSenderId = messagesForUserSenderId; this.groups = groups; this.confirmerRequests = userRequests; this.requesterRequests = requesterRequests; } @Id @Column(name = "email", nullable = false) public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Column(name = "accountName", length=50) public String getAccountName() { return this.accountName; } public void setAccountName(String accountName) { this.accountName = accountName; } @Column(name = "firstName") public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } @Column(name = "lastName") public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Column(name = "pwHash") public String getPwHash() { return pwHash; } public void setPwHash(String pwHash) { this.pwHash = pwHash; } @Column(name = "profile_text", length = 256) public String getProfileText() { return this.profileText; } public void setProfileText(String profileText) { this.profileText = profileText; } @Column(name = "gender", length = 6) public String getGender() { return this.gender; } public void setGender(String gender) { this.gender = gender; } @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "user_contact", catalog = "mindmessages", joinColumns = { @JoinColumn(name = "user_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "contact_id", nullable = false, updatable = false) }) public Set<User> getUsersForContactId() { return this.usersForContactId; } public void setUsersForContactId(Set<User> usersForContactId) { this.usersForContactId = usersForContactId; } @OneToMany(fetch = FetchType.LAZY, mappedBy = "userByUserReceiverId", cascade = CascadeType.ALL) public Set<Message> getMessagesForUserReceiverId() { return this.messagesForUserReceiverId; } public void setMessagesForUserReceiverId(Set<Message> messagesForUserReceiverId) { this.messagesForUserReceiverId = messagesForUserReceiverId; } @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "user_contact", catalog = "mindmessages", joinColumns = { @JoinColumn(name = "contact_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "user_id", nullable = false, updatable = false) }) public Set<User> getUsersForUserId() { return this.usersForUserId; } public void setUsersForUserId(Set<User> usersForUserId) { this.usersForUserId = usersForUserId; } @OneToMany(fetch = FetchType.LAZY, mappedBy = "userByUserSenderId", cascade = CascadeType.ALL) public Set<Message> getMessagesForUserSenderId() { return this.messagesForUserSenderId; } public void setMessagesForUserSenderId(Set<Message> messagesForUserSenderId) { this.messagesForUserSenderId = messagesForUserSenderId; } @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "user_group", catalog = "mindmessages", joinColumns = { @JoinColumn(name = "user_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "group_id", nullable = false, updatable = false) }) public Set<Group> getGroups() { return this.groups; } public void setGroups(Set<Group> groups) { this.groups = groups; } @Override public int hashCode() { final int prime = 31; int result = 3; result = prime * result + ((accountName == null) ? 0 : accountName.hashCode()); result = prime * result + ((email == null) ? 0 : email.hashCode()); result = prime * result + ((firstName == null) ? 0 : firstName.hashCode()); result = prime * result + ((gender == null) ? 0 : gender.hashCode()); result = prime * result + ((lastName == null) ? 0 : lastName.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; } User other = (User) obj; if (accountName == null) { if (other.accountName != null) { return false; } } else if (!accountName.equals(other.accountName)) { return false; } if (email == null) { if (other.email != null) { return false; } } else if (!email.equals(other.email)) { return false; } if (firstName == null) { if (other.firstName != null) { return false; } } else if (!firstName.equals(other.firstName)) { return false; } if (gender == null) { if (other.gender != null) { return false; } } else if (!gender.equals(other.gender)) { return false; } if (lastName == null) { if (other.lastName != null) { return false; } } else if (!lastName.equals(other.lastName)) { return false; } return true; } }