Java tutorial
/******************************************************************************* * Gisgraphy Project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA * * Copyright 2008 Gisgraphy project * David Masclet <davidmasclet@gisgraphy.com> * * *******************************************************************************/ package com.gisgraphy.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 org.springframework.security.GrantedAuthority; import org.springframework.security.userdetails.UserDetails; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; /** * 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") 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) public Long getId() { return id; } @Column(nullable = false, length = 50, unique = true) public String getUsername() { return username; } @Column(nullable = false) public String getPassword() { return password; } @Transient public String getConfirmPassword() { return confirmPassword; } @Column(name = "password_hint") public String getPasswordHint() { return passwordHint; } @Column(name = "first_name", nullable = false, length = 50) public String getFirstName() { return firstName; } @Column(name = "last_name", nullable = false, length = 50) public String getLastName() { return lastName; } @Column(nullable = false, unique = true) public String getEmail() { return email; } @Column(name = "phone_number") public String getPhoneNumber() { return phoneNumber; } public String getWebsite() { return website; } /** * Returns the full name. * * @return firstName + ' ' + lastName */ @Transient public String getFullName() { return firstName + ' ' + lastName; } @Embedded public Address getAddress() { return address; } @ManyToMany(fetch = FetchType.EAGER) @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); } /** * @see org.acegisecurity.userdetails.UserDetails#getAuthorities() * @return GrantedAuthority[] an array of roles. */ @Transient public GrantedAuthority[] getAuthorities() { return roles.toArray(new GrantedAuthority[0]); } @Version public Integer getVersion() { return version; } @Column(name = "account_enabled") public boolean isEnabled() { return enabled; } @Column(name = "account_expired", nullable = false) public boolean isAccountExpired() { return accountExpired; } /** * @see org.acegisecurity.userdetails.UserDetails#isAccountNonExpired() */ @Transient public boolean isAccountNonExpired() { return !isAccountExpired(); } @Column(name = "account_locked", nullable = false) public boolean isAccountLocked() { return accountLocked; } /** * @see org.acegisecurity.userdetails.UserDetails#isAccountNonLocked() */ @Transient public boolean isAccountNonLocked() { return !isAccountLocked(); } @Column(name = "credentials_expired", nullable = false) public boolean isCredentialsExpired() { return credentialsExpired; } /** * @see org.acegisecurity.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} */ @Override 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} */ @Override public int hashCode() { return (username != null ? username.hashCode() : 0); } /** * {@inheritDoc} */ @Override public String toString() { 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(); } }