Java tutorial
/** * * Copyright (C) 2002-2012 "SYSNET International, Inc." * support@sysnetint.com [http://www.sysnetint.com] * * This file is part of OpenEMPI. * * OpenEMPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.openhie.openempi.model; import java.io.Serializable; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.Table; import javax.persistence.Transient; import javax.persistence.Version; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.springframework.security.GrantedAuthority; import org.springframework.security.userdetails.UserDetails; /** * This class represents the basic "user" object in AppFuse that allows for authentication * and user management. It implements Acegi Security's UserDetails interface. * * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a> * Updated by Dan Kibler (dan@getrolling.com) * Extended to implement Acegi UserDetails interface * by David Carter david@carter.net */ @Entity @Table(name = "app_user") @XmlAccessorType(XmlAccessType.NONE) public class User extends BaseObject implements Serializable, UserDetails { private static final long serialVersionUID = 3832626162173359411L; private Long id; private String username; // required private String password; // required private String confirmPassword; private String passwordHint; private String firstName; // required private String lastName; // required private String email; // required; unique private String phoneNumber; private String website; private Address address = new Address(); private Integer version; private Set<Role> roles = new HashSet<Role>(); private boolean enabled; private boolean accountExpired; private boolean accountLocked; private boolean credentialsExpired; /** * Default constructor - creates a new instance with no values set. */ public User() { } /** * Create a new instance and set the username. * @param username login name for user. */ public User(final String username) { this.username = username; } @Id @GeneratedValue(strategy = GenerationType.AUTO) @XmlElement public Long getId() { return id; } @Column(nullable = false, length = 50, unique = true) @XmlElement public String getUsername() { return username; } @Column(nullable = false) @XmlElement public String getPassword() { return password; } @Transient public String getConfirmPassword() { return confirmPassword; } @Column(name = "password_hint") @XmlElement public String getPasswordHint() { return passwordHint; } @Column(name = "first_name", nullable = false, length = 50) @XmlElement public String getFirstName() { return firstName; } @Column(name = "last_name", nullable = false, length = 50) @XmlElement public String getLastName() { return lastName; } @Column(nullable = false, unique = true) @XmlElement public String getEmail() { return email; } @Column(name = "phone_number") @XmlElement public String getPhoneNumber() { return phoneNumber; } @XmlElement public String getWebsite() { return website; } /** * Returns the full name. * @return firstName + ' ' + lastName */ @Transient public String getFullName() { return firstName + ' ' + lastName; } @Embedded @XmlElement public Address getAddress() { return address; } @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "user_role", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = @JoinColumn(name = "role_id")) public Set<Role> getRoles() { return roles; } /** * Convert user roles to LabelValue objects for convenience. * @return a list of LabelValue objects with role information */ @Transient public List<LabelValue> getRoleList() { List<LabelValue> userRoles = new ArrayList<LabelValue>(); if (this.roles != null) { for (Role role : roles) { // convert the user's roles to LabelValue Objects userRoles.add(new LabelValue(role.getName(), role.getName())); } } return userRoles; } /** * Adds a role for the user * @param role the fully instantiated role */ public void addRole(Role role) { getRoles().add(role); } public void removeRole(String roleName) { Role roleToRemove = null; for (Role role : getRoles()) { if (role.getName().equalsIgnoreCase(roleName)) { roleToRemove = role; break; } } if (roleToRemove != null) { getRoles().remove(roleToRemove); } } /** * @see org.springframework.security.userdetails.UserDetails#getAuthorities() * @return GrantedAuthority[] an array of roles. */ @Transient public GrantedAuthority[] getAuthorities() { Set<Role> roles = getRoles(); Set<GrantedAuthority> authorities = new java.util.HashSet<GrantedAuthority>(); for (Role role : roles) { authorities.addAll(role.getPermissions()); } return authorities.toArray(new GrantedAuthority[0]); } @Version public Integer getVersion() { return version; } @Column(name = "account_enabled") @XmlElement public boolean isEnabled() { return enabled; } @Column(name = "account_expired", nullable = false) @XmlElement public boolean isAccountExpired() { return accountExpired; } /** * @see org.springframework.security.userdetails.UserDetails#isAccountNonExpired() */ @Transient public boolean isAccountNonExpired() { return !isAccountExpired(); } @Column(name = "account_locked", nullable = false) @XmlElement public boolean isAccountLocked() { return accountLocked; } /** * @see org.springframework.security.userdetails.UserDetails#isAccountNonLocked() */ @Transient public boolean isAccountNonLocked() { return !isAccountLocked(); } @Column(name = "credentials_expired", nullable = false) @XmlElement public boolean isCredentialsExpired() { return credentialsExpired; } /** * @see org.springframework.security.userdetails.UserDetails#isCredentialsNonExpired() */ @Transient public boolean isCredentialsNonExpired() { return !credentialsExpired; } public void setId(Long id) { this.id = id; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setConfirmPassword(String confirmPassword) { this.confirmPassword = confirmPassword; } public void setPasswordHint(String passwordHint) { this.passwordHint = passwordHint; } public void setFirstName(String firstName) { this.firstName = firstName; } public void setLastName(String lastName) { this.lastName = lastName; } public void setEmail(String email) { this.email = email; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public void setWebsite(String website) { this.website = website; } public void setAddress(Address address) { this.address = address; } public void setRoles(Set<Role> roles) { this.roles = roles; } public void setVersion(Integer version) { this.version = version; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public void setAccountExpired(boolean accountExpired) { this.accountExpired = accountExpired; } public void setAccountLocked(boolean accountLocked) { this.accountLocked = accountLocked; } public void setCredentialsExpired(boolean credentialsExpired) { this.credentialsExpired = credentialsExpired; } /** * {@inheritDoc} */ public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof User)) { return false; } final User user = (User) o; return !(username != null ? !username.equals(user.getUsername()) : user.getUsername() != null); } /** * {@inheritDoc} */ public int hashCode() { return (username != null ? username.hashCode() : 0); } public String toString() { return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).append("username", this.username) .append("enabled", this.enabled).append("accountExpired", this.accountExpired) .append("credentialsExpired", this.credentialsExpired).append("accountLocked", this.accountLocked) .toString(); } /** * {@inheritDoc} */ public String toStringLong() { ToStringBuilder sb = new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE) .append("username", this.username).append("enabled", this.enabled) .append("accountExpired", this.accountExpired).append("credentialsExpired", this.credentialsExpired) .append("accountLocked", this.accountLocked); GrantedAuthority[] auths = this.getAuthorities(); if (auths != null) { sb.append("Granted Authorities: "); for (int i = 0; i < auths.length; i++) { if (i > 0) { sb.append(", "); } sb.append(auths[i].toString()); } } else { sb.append("No Granted Authorities"); } return sb.toString(); } }