/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.evasion.plugin.common.entity;
import com.evasion.EntityJPA;
import com.evasion.entity.Person;
import com.evasion.entity.security.User;
import com.evasion.module.common.entity.AccountDTO;
import javax.persistence.*;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
/**
*
* @author sebastien.glon
*/
@Entity(name = Account.ENTITY_NAME)
@Table(name = Account.ENTITY_NAME)
@NamedQuery(name=Account.QUERY_ACCOUNT_BY_USERNAME, query="select DISTINCT a from "+Account.ENTITY_NAME+" a where a.user.username = ?1")
public class Account extends EntityJPA<Long> {
/**
* *
* serialVersionUID.
*/
private static final long serialVersionUID = 1L;
public static final String ENTITY_NAME = "COM_ACCOUNT";
public static final String QUERY_ACCOUNT_BY_USERNAME ="account_by_username";
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne
@JoinColumn(unique=true)
private User user;
@OneToOne
@JoinColumn(unique=true)
private Person person;
public Account() {
}
public Account(User user, Person person) {
this.user = user;
this.person = person;
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public static AccountDTO toDTO(Account account) {
AccountDTO dto = new AccountDTO();
dto.setId(account.getId());
dto.setEmail(account.getUser().getEmail());
dto.setPassword(account.getUser().getPassword());
dto.setPerson(account.getPerson());
dto.setUsername(account.getUser().getUsername());
dto.setCreationDate(account.getUser().getCreationDate());
dto.setLastLogin(account.getUser().getLastLogin());
return dto;
}
public void mergeFromDTO(AccountDTO dto) {
if (this.getPerson()==null) {
this.setPerson(dto.getPerson());
} else {
this.getPerson().setEmail(dto.getEmail());
this.setPerson(dto.getPerson());
}
if (this.getUser()==null) {
this.setUser(new User());
}
this.getUser().setUsername(dto.getUsername());
this.getUser().setPassword(dto.getPassword());
this.getUser().setEmail(dto.getEmail());
}
/**
* {@inheritDoc }
*/
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
if (!(obj instanceof Account)) {
return false;
}
Account rhs = (Account) obj;
return new EqualsBuilder().append(this.user, rhs.user).append(this.person, rhs.person).isEquals();
}
/**
* Calcul du hashcode sur la clé naturelle.
*
* @return valeur du hashCode.
*/
@Override
public int hashCode() {
HashCodeBuilder hash = new HashCodeBuilder();
hash.append(this.getUser()).append(this.getPerson());
return hash.toHashCode();
}
@Override
public String toString() {
return new ToStringBuilder(this).append(user).append(person).toString();
}
}