Java tutorial
/* * This software was designed and created by Jason Carroll. * Copyright (c) 2002, 2003, 2004 Jason Carroll. * The author can be reached at jcarroll@cowsultants.com * ITracker website: http://www.cowsultants.com * ITracker forums: http://www.cowsultants.com/phpBB/index.php * * This program is free software; you can redistribute it and/or modify * it only under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. */ package org.itracker.model; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.CompareToBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.log4j.Logger; import org.itracker.model.util.UserUtilities; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import java.io.UnsupportedEncodingException; import java.util.*; /** * A user. * * @author ready */ public class User extends AbstractEntity implements Comparable<Entity> { /** * */ private static final long serialVersionUID = 1L; private static final Logger log = Logger.getLogger(User.class); public static final Comparator<User> NAME_COMPARATOR = new NameComparator(); public static final Comparator<User> LOGIN_COMPARATOR = new LoginComparator(); private String login; private String password; private String firstName; private String lastName; private String email; private int status; private boolean superUser; private int registrationType; /** * The Permissions of this User on all Projects. */ private Set<Permission> permissions = new TreeSet<Permission>(Permission.PERMISSION_PROPERTIES_COMPARATOR); /** * The Projects owned by this User. */ private List<Project> projects = new ArrayList<Project>(); private UserPreferences preferences; public UserPreferences getPreferences() { return preferences; } public void setPreferences(UserPreferences preferences) { this.preferences = preferences; } /** * Default constructor (required by Hibernate). * <p/> * <p> * PENDING: should be <code>private</code> so that it can only be used by * Hibernate, to ensure that the fields which form an instance's identity * are always initialized/never <tt>null</tt>. * </p> */ public User() { } public User(String login) { setLogin(login); } public User(String login, String password, String firstName, String lastName, String email, boolean superUser) { this(login, password, firstName, lastName, email, UserUtilities.REGISTRATION_TYPE_ADMIN, superUser); } public User(String login, String password, String firstName, String lastName, String email, int registrationType, boolean superUser) { this(login); this.password = password; this.firstName = firstName; this.lastName = lastName; this.email = email; this.registrationType = registrationType; setSuperUser(superUser); } public String getLogin() { return login; } public void setLogin(String login) { if (login == null) { throw new IllegalArgumentException("null login"); } this.login = login; } public String getPassword() { return password; } public void setPassword(String value) { this.password = value; } public String getFirstName() { return firstName; } public void setFirstName(String value) { firstName = value; } public String getLastName() { return lastName; } public void setLastName(String value) { this.lastName = value; } public String getFullName() { return StringUtils .defaultString(StringUtils.trimToNull((StringUtils.isNotBlank(getFirstName()) ? getFirstName() : "") + " " + (StringUtils.isNotBlank(getLastName()) ? getLastName() : "")), getLogin()); } public String getEmail() { return email; } public InternetAddress getEmailAddress() { if (null == getEmail() || getEmail().trim().length() == 0) { log.warn("getEmailAddress: failed to get eMail for user " + getLogin() + " (" + getId() + ")"); return null; } final InternetAddress adr; try { adr = new InternetAddress(getEmail()); try { adr.setPersonal(getFullName(), "utf-8"); } catch (UnsupportedEncodingException e) { log.warn("getEmailAddress: unsupported encoding for setting personal: utf-8", e); } return adr; } catch (AddressException e1) { log.error("getEmailAddress: failed to parse email '" + getEmail() + "' for user " + getLogin() + " (" + getId() + "), returning null", e1); return null; } } public void setEmail(String email) { this.email = email; } public Set<Permission> getPermissions() { return permissions; } public void setPermissions(Set<Permission> getPermissions) { this.permissions = getPermissions; } public int getRegistrationType() { return registrationType; } public void setRegistrationType(int registrationType) { this.registrationType = registrationType; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public boolean isSuperUser() { return superUser; } public void setSuperUser(boolean superUser) { this.superUser = superUser; } public String getFirstInitial() { return (null != getFirstName() && getFirstName().length() > 0 ? getFirstName().substring(0, 1).toUpperCase() + "." : ""); } public boolean hasRequiredData() { return hasRequiredData(true); } public boolean hasRequiredData(boolean passwordRequired) { if (this.getLogin() == null || this.getLogin().equals("") || this.getFirstName() == null || this.getFirstName().equals("") || this.getLastName() == null || this.getLastName().equals("") || this.getEmail() == null || this.getEmail().equals("")) { return false; } if (passwordRequired && (this.getPassword() == null || this.getPassword().equals(""))) { return false; } return true; } public List<Project> getProjects() { return projects; } public void setProjects(List<Project> projects) { this.projects = projects; } @Override public String toString() { return new ToStringBuilder(this).append("id", getId()).append("login", getLogin()).toString(); } /** * Compares 2 users by last and first name. */ private static class NameComparator implements Comparator<User> { public int compare(User a, User b) { return new CompareToBuilder().append(a.getLastName(), b.getLastName()) .append(a.getFirstName(), b.getFirstName()).append(a, b, LOGIN_COMPARATOR).toComparison(); } } public static final class LoginComparator implements Comparator<User> { public int compare(User o1, User o2) { return new CompareToBuilder().append(o1.getLogin(), o2.getLogin()).toComparison(); } } }