com.google.code.mymon3y.model.Usuario.java Source code

Java tutorial

Introduction

Here is the source code for com.google.code.mymon3y.model.Usuario.java

Source

/*
 * Copyright (C) 2009
 * 
 * Jaindson Valentim Santana (jaindsonvs [at] gmail [dot] com)
 * Matheus Gaudencio do Rgo (matheusgr [at] gmail [dot] com)
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or any later version.
 * You may obtain a copy of the License at
 *
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * 
 * 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 com.google.code.mymon3y.model;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.validator.Email;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotEmpty;

import com.google.code.mymon3y.util.Hasher;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * Entidade que representa um Usurio do sistema.
 * 
 * @author Jaindson Valentim Santana
 * @author Matheus Gaudencio do Rgo
 * 
 */
@Entity
@Table(name = "tb_usuario")
@NamedQueries({ @NamedQuery(name = "usuario.login", query = "select u from Usuario u where u.login like :login") })
public class Usuario implements Identificavel {

    /**
     * Verso da classe.
     */
    @Transient
    private static final long serialVersionUID = 1L;

    /**
     * Tamanho mnimo da senha do Usurio.
     */
    @Transient
    public static final int MIN_PASSWORD_LENGTH = 5;

    /**
     * True caso a senha j tenha sido criptografada. False caso contrrio.
     */
    @Transient
    private boolean criptografada;

    /**
     * Identificador nico da entidade.
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * Login de acesso ao sistema (e-mail).
     */
    @NotEmpty(message = "Login invlido.")
    @Column(nullable = false, unique = true)
    @Email(message = "Login invlido.")
    private String login;

    /**
     * Senha do Usurio.
     */
    @NotEmpty(message = "A senha deve ter no mnimo 5 caracteres.")
    @Length(min = MIN_PASSWORD_LENGTH, message = "A senha deve ter no mnimo 5 caracteres.")
    @Column(nullable = false)
    private String senha;

    /**
     * Categorias que o Usurio possui.
     */
    @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "usuario")
    private Set<Categoria> categorias;

    /**
     * Construtor vazio.
     */
    public Usuario() {
        this(null, null);
    }

    /**
     * Construtor de Usurio.
     * 
     * @param login
     *            Login de acesso ao sistema (e-mail).
     * @param senha
     *            Senha do Usurio.
     */
    public Usuario(String login, String senha) {
        this.login = login;
        this.senha = senha;
        this.criptografada = false;
        inicializarCategorias();
    }

    /**
     * Inicializao das Categorias padres.
     */
    private void inicializarCategorias() {
        this.categorias = new HashSet<Categoria>();
        this.categorias.add(new Categoria(this, "Outro"));
        this.categorias.add(new Categoria(this, "Automvel"));
        this.categorias.add(new Categoria(this, "Despesas Bancrias"));
        this.categorias.add(new Categoria(this, "Faturas"));
        this.categorias.add(new Categoria(this, "Retirada de Dinheiro"));
        this.categorias.add(new Categoria(this, "Doaes"));
        this.categorias.add(new Categoria(this, "Bab"));
        this.categorias.add(new Categoria(this, "Roupas"));
        this.categorias.add(new Categoria(this, "Carto de Crdito"));
        this.categorias.add(new Categoria(this, "Depsito"));
        this.categorias.add(new Categoria(this, "Jantar Fora"));
        this.categorias.add(new Categoria(this, "Educao"));
        this.categorias.add(new Categoria(this, "Eletrnicos"));
        this.categorias.add(new Categoria(this, "Entretenimento"));
        this.categorias.add(new Categoria(this, "Famlia"));
        this.categorias.add(new Categoria(this, "Alimentao"));
        this.categorias.add(new Categoria(this, "Combustvel"));
        this.categorias.add(new Categoria(this, "Presentes"));
        this.categorias.add(new Categoria(this, "Mercearia"));
        this.categorias.add(new Categoria(this, "Casa"));
        this.categorias.add(new Categoria(this, "Seguros"));
        this.categorias.add(new Categoria(this, "Despesas do Trabalho"));
        this.categorias.add(new Categoria(this, "Lazer"));
        this.categorias.add(new Categoria(this, "Emprstimos"));
        this.categorias.add(new Categoria(this, "Sade"));
        this.categorias.add(new Categoria(this, "Pessoal"));
        this.categorias.add(new Categoria(this, "Animal de Estimao"));
        this.categorias.add(new Categoria(this, "Telefone"));
        this.categorias.add(new Categoria(this, "Poupana"));
        this.categorias.add(new Categoria(this, "Impostos"));
        this.categorias.add(new Categoria(this, "Transporte"));
        this.categorias.add(new Categoria(this, "Utilitrios"));
        this.categorias.add(new Categoria(this, "Frias"));
    }

    /**
     * Retorna True caso a senha j tenha sido criptografada, False caso contrrio.
     * 
     * @return True caso a senha j tenha sido criptografada, False caso contrrio.
     */
    public boolean isCriptografada() {
        return criptografada;
    }

    /**
     * Atribui um novo estado  senha (criptografada ou no) do Usurio.
     * 
     * @param criptografada
     *            Novo estado.
     */
    public void setCriptografada(boolean criptografada) {
        this.criptografada = criptografada;
    }

    /**
     * @see com.google.code.mymon3y.model.Identificavel#getId()
     */
    public Long getId() {
        return id;
    }

    /**
     * Atribui um novo id  Categoria.
     * 
     * @param id
     *            Novo id.
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * Retorna o login do Usurio.
     * 
     * @return Login do Usurio.
     */
    public String getLogin() {
        return login;
    }

    /**
     * Atribui um novo login ao Usurio.
     * 
     * @param login
     *            Novo login.
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**
     * Retorna a senha do Usurio.
     * 
     * @return A senha do Usurio.
     */
    public String getSenha() {
        return senha;
    }

    /**
     * Atribui uma nova senha ao Usurio.
     * 
     * @param senha
     *            Nova senha.
     */
    public void setSenha(String senha) {
        this.senha = senha;
        this.criptografada = false;
    }

    /**
     * Retorna as Categorias de Transao que o Usurio possui.
     * 
     * @return Categorias que o Usurio possui.
     */
    public Set<Categoria> getCategorias() {
        return categorias;
    }

    /**
     * Atribui novas Categorias de Transao ao Usurio.
     * 
     * @param categorias
     *            Novas Categorias de Transao.
     */
    public void setCategorias(Set<Categoria> categorias) {
        this.categorias = categorias;
    }

    /**
     * Adiciona uma nova Categoria de Transao ao Usurio.
     * 
     * @param categoria
     *            Nova Categoria de Transao.
     */
    public void addCategorias(Categoria categoria) {
        this.categorias.add(categoria);
    }

    /**
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((login == null) ? 0 : login.hashCode());
        return result;
    }

    /**
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Usuario other = (Usuario) obj;
        if (login == null) {
            if (other.login != null)
                return false;
        } else if (!login.equals(other.login))
            return false;
        return true;
    }

    /**
     * Criptografa a senha do Usurio.
     */
    public void criptografarSenha() {
        if (!isCriptografada()) {
            this.senha = Hasher.getSha256(this.senha);
            this.setCriptografada(true);
        }
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", id).append("login", login)
                .append("senha", senha).append("categorias", categorias).toString();
    }

}