/**
* Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
* EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://www.ewcms.com
*/
package com.ewcms.security.manage.model;
import java.io.Serializable;
import java.util.Date;
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.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import org.codehaus.jackson.annotate.JsonIgnore;
import com.ewcms.core.site.model.Organ;
/**
* <ul>
* <li>username:用户名
* <li>password:密码
* <li>enabled:是否可用(true:可用)
* <li>accountStart:授权开始时间
* <li>accountEnd:授权结束时间
* <li>userInfo:用户信息
* <li>groups:所属用户组
* <li>authorities:所属权限
* <li>organ:组织机构
* </ul>
*
* @author wangwei
*/
@Entity
@Table(name = "auth_user")
public class User implements Serializable {
private static final long serialVersionUID = 8166592379678954592L;
@Id
@Column(length = 20, nullable = false)
private String username;
@Column(length = 40, nullable = false)
private String password;
@Column
private Boolean enabled = true;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "account_start")
private Date accountStart;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "account_end")
private Date accountEnd;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "create_time", nullable = false)
private Date createTime = new Date();
@OneToOne(cascade = {CascadeType.ALL}, targetEntity = UserInfo.class,fetch = FetchType.EAGER)
@PrimaryKeyJoinColumn
private UserInfo userInfo;
@ManyToMany(cascade = {CascadeType.REFRESH}, targetEntity = Group.class, fetch = FetchType.LAZY)
@JoinTable(name = "auth_group_members", joinColumns = @JoinColumn(name = "username"), inverseJoinColumns = @JoinColumn(name = "group_name"))
private Set<Group> groups;
@ManyToMany(cascade = {CascadeType.REFRESH}, targetEntity = Authority.class, fetch = FetchType.LAZY)
@JoinTable(name = "auth_user_authorities", joinColumns =@JoinColumn(name = "username"),inverseJoinColumns =@JoinColumn(name = "authority_name"))
private Set<Authority> authorities;
@ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.EAGER, targetEntity = Organ.class)
@JoinColumn(name = "organ_id")
private Organ organ;
public User(){
}
public User(String username){
this(username,true,null,null);
}
public User(String username, Boolean enabled,Date accountStart, Date accountEnd) {
super();
this.username = username;
this.enabled = enabled;
this.accountStart = accountStart;
this.accountEnd = accountEnd;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@JsonIgnore
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isEnabled() {
return this.enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public Date getAccountEnd() {
return accountEnd;
}
public void setAccountEnd(Date accountEnd) {
this.accountEnd = accountEnd;
}
public Date getAccountStart() {
return accountStart;
}
public void setAccountStart(Date accountStart) {
this.accountStart = accountStart;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public UserInfo getUserInfo() {
return userInfo;
}
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
@JsonIgnore
public Set<Group> getGroups() {
return groups = (groups == null ? new HashSet<Group>() : groups);
}
public void setGroups(Set<Group> groups) {
this.groups = groups;
}
@JsonIgnore
public Set<Authority> getAuthorities() {
return authorities = (authorities == null ? new HashSet<Authority>() : authorities);
}
public void setAuthorities(Set<Authority> authorities) {
this.authorities = authorities;
}
public Organ getOrgan() {
return organ;
}
public void setOrgan(Organ organ) {
this.organ = organ;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final User other = (User) obj;
if ((this.username == null) ? (other.username != null) : !this.username.equals(other.username)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 23 * hash + (this.username != null ? this.username.hashCode() : 0);
return hash;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("User{");
builder.append("username:").append(username).append(";");
builder.append("enabled:").append(enabled).append(";");
builder.append("accountStart:").append(accountStart).append(";");
builder.append("accountEnd:").append(accountEnd).append(";");
builder.append("createTime").append(createTime).append(";");
if (groups != null && !groups.isEmpty()) {
builder.append("groups:[");
for (Group group : groups) {
builder.append(group.getName());
}
builder.append("];");
}
if(authorities != null && !authorities.isEmpty()) {
builder.append("authorities:[");
for (Authority auth : authorities) {
builder.append(auth.getName());
}
builder.append("];");
}
builder.append("userInfo").append(userInfo.toString()).append(";");
builder.append("}");
return builder.toString();
}
}