org.itracker.model.User.java Source code

Java tutorial

Introduction

Here is the source code for org.itracker.model.User.java

Source

/*
 * 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();
        }
    }

}