strolch/src/ch/eitchnet/privilege/model/internal/User.java

217 lines
4.8 KiB
Java

/*
* Copyright (c) 2010
*
* Robert von Burg
* eitch@eitchnet.ch
*
* All rights reserved.
*
*/
package ch.eitchnet.privilege.model.internal;
import java.util.Collections;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import ch.eitchnet.privilege.i18n.PrivilegeException;
import ch.eitchnet.privilege.model.UserRep;
import ch.eitchnet.privilege.model.UserState;
/**
* This class defines the actual login information for a given user which can be granted privileges. Every user is
* granted a set of {@link Role}s and has a {@link UserState} including detail information like first name and surname
*
* <p>
* Note: This is an internal object which is not to be serialized or passed to clients, {@link UserRep}s are used for
* that
* </p>
*
* @author rvonburg
*
*/
public final class User {
private final String userId;
private final String username;
private final String password;
private final String firstname;
private final String surname;
private final UserState userState;
private final Set<String> roles;
private final Locale locale;
/**
* Default constructor
*
* @param userId
* the user's id
* @param username
* the user's login name
* @param password
* the user's password (hashed)
* @param firstname
* the user's first name
* @param surname
* the user's surname
* @param userState
* the user's {@link UserState}
* @param roles
* the set of {@link Role}s assigned to this user
* @param locale
* the user's {@link Locale}
*/
public User(String userId, String username, String password, String firstname, String surname, UserState userState,
Set<String> roles, Locale locale) {
if (userId == null || userId.isEmpty()) {
throw new PrivilegeException("No UserId defined!");
}
if (username == null || username.isEmpty()) {
throw new PrivilegeException("No username defined!");
}
// password may be null, meaning not able to login
if (firstname == null || firstname.isEmpty()) {
throw new PrivilegeException("No firstname defined!");
}
if (surname == null || surname.isEmpty()) {
throw new PrivilegeException("No surname defined!");
}
if (userState == null) {
throw new PrivilegeException("No userState defined!");
}
// roles may be null, meaning not able to login and must be added later
// local may be null, meaning use system default
this.userId = userId;
this.username = username;
this.password = password;
this.userState = userState;
this.firstname = firstname;
this.surname = surname;
this.roles = Collections.unmodifiableSet(roles);
this.locale = locale;
}
/**
* @return the userId
*/
public String getUserId() {
return this.userId;
}
/**
* @return the username
*/
public String getUsername() {
return this.username;
}
/**
* Returns the hashed password for this {@link User}
*
* @return the hashed password for this {@link User}
*/
public String getPassword() {
// TODO is it possible that there is a hidden way of accessing this
// field even though? The User object should be private, but maybe I
// forgot something?
return this.password;
}
/**
* @return the firstname
*/
public String getFirstname() {
return this.firstname;
}
/**
* @return the surname
*/
public String getSurname() {
return this.surname;
}
/**
* @return the userState
*/
public UserState getUserState() {
return this.userState;
}
/**
* @return the roles
*/
public Set<String> getRoles() {
return this.roles;
}
/**
* Returns true if this user has the specified role
*
* @param role
* the name of the {@link Role} to check for
*
* @return true if the this user has the specified role
*/
public boolean hasRole(String role) {
return this.roles.contains(role);
}
/**
* @return the locale
*/
public Locale getLocale() {
return this.locale;
}
/**
* @return a {@link UserRep} which is a representation of this object used to serialize and view on clients
*/
public UserRep asUserRep() {
return new UserRep(this.userId, this.username, this.firstname, this.surname, this.userState,
new HashSet<String>(this.roles), this.locale);
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("User [userId=");
builder.append(this.userId);
builder.append(", username=");
builder.append(this.username);
builder.append(", firstname=");
builder.append(this.firstname);
builder.append(", surname=");
builder.append(this.surname);
builder.append(", locale=");
builder.append(this.locale);
builder.append(", userState=");
builder.append(this.userState);
builder.append(", roles=");
builder.append(this.roles);
builder.append("]");
return builder.toString();
}
}