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

Java tutorial

Introduction

Here is the source code for com.google.code.mymon3y.model.Transacao.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.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.ForeignKey;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.lang.builder.ToStringBuilder;

/**
 * Entidade que representa uma Transao. Uma Transao representa qualquer movimento de dinheiro realizado pelo
 * Usurio.
 * 
 * @author Jaindson Valentim Santana
 * @author Matheus Gaudencio do Rgo
 * 
 */
@Entity
@Table(name = "tb_transacao")
@NamedQueries({
        @NamedQuery(name = "transacao.todasTransacoesLoginDoUsuario", query = "from Transacao t where t.categoria.usuario.login like :loginDoUsuario"),
        @NamedQuery(name = "transacao.todasTransacoesLoginDoUsuarioIdCategoria", query = "from Transacao t where t.categoria.usuario.login like :loginDoUsuario and t.categoria.id = :idCategoria"),
        @NamedQuery(name = "transacao.transacoes", query = "from Transacao t where t.categoria.usuario.login like :loginDoUsuario and :dataInicio <= t.data and t.data <= :dataFim"),
        @NamedQuery(name = "transacao.loginDoUsuario", query = "select count(*) from Transacao t where t.categoria.usuario.login like :loginDoUsuario"),
        @NamedQuery(name = "transacao.porUsuarioEData", query = "select count(*) from Transacao t where t.categoria.usuario.id = :idDoUsuario and t.dataAvisoPrevio = :data"),
        @NamedQuery(name = "transacao.notificacoes", query = "from Transacao t where :dataAvisoPrevio = t.dataAvisoPrevio") })
public class Transacao implements Identificavel {

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

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

    /**
     * Pequena descrio da Transao.
     */
    @NotNull(message = "Descrio Invlida.")
    @NotEmpty(message = "Descrio Invlida.")
    @Column(nullable = false)
    private String descricao;

    /**
     * Data que a Transao foi/ser realizada.
     */
    @Column(nullable = false)
    private Date data;

    /**
     * Valor monetrio da Transao em centavos (menor unidade da moeda).
     */
    @Column(nullable = false)
    private Integer valor;

    /**
     * Algum comentrio a respeito da Transao. Utilizada quando a {@link #descricao} no for descritiva o suficiente.
     */
    @Column
    private String comentario;

    /**
     * Data de quando o aviso a respeito da Transao deve ser enviado ao Usurio dono da Transao.
     */
    @Column
    private Date dataAvisoPrevio;

    /**
     * Identifica se a Transao  de crdito (true) ou dbito (false).
     */
    @Column(nullable = false)
    private Boolean credito;

    /**
     * Categoria que esta Transao pertence.
     */
    @ManyToOne
    @ForeignKey(name = "fk_categoria_constraint")
    @JoinColumn(name = "fk_categoria", nullable = false)
    private Categoria categoria;

    /**
     * Construtor vazio.
     */
    public Transacao() {
        super();
    }

    /**
     * Construtor da Transao.
     * 
     * @param descricao
     *            Pequena descrio da Transao.
     * @param data
     *            Data que a Transao foi/ser realizada.
     * @param valor
     *            Valor monetrio da Transao em centavos (menor unidade da moeda).
     * @param comentario
     *            Algum comentrio a respeito da Transao.
     * @param dataAvisoPrevio
     *            Data de quando o aviso a respeito da Transao deve ser enviado ao Usurio dono da Transao.
     * @param credito
     *            Crdito (true) ou Dbito (false).
     */
    public Transacao(String descricao, Date data, Integer valor, String comentario, Date dataAvisoPrevio,
            Boolean credito) {
        super();
        setDescricao(descricao);
        this.data = data;
        this.valor = valor;
        this.comentario = comentario;
        this.dataAvisoPrevio = dataAvisoPrevio;
        this.credito = credito;
    }

    /**
     * @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 a descrio associada com esta Transao.
     * 
     * @return A descrio associada com esta Transao.
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * Atribui uma nova descrio  Transao.
     * 
     * @param descricao
     *            Nova descrio.
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao.trim();
    }

    /**
     * Retorna a data que a Transao foi/ser realizada.
     * 
     * @return a data que a Transao foi/ser realizada.
     */
    public Date getData() {
        return data;
    }

    /**
     * Atribui uma nova data  Transao.
     * 
     * @param data
     *            Nova data.
     */
    public void setData(Date data) {
        this.data = data;
    }

    /**
     * Retorna o valor monetrio da Transao em centavos (menor unidade da moeda).
     * 
     * @return O valor monetrio da Transao em centavos (menor unidade da moeda).
     */
    public Integer getValor() {
        return valor;
    }

    /**
     * Atribui um novo valor monetrio  Transao.
     * 
     * @param valor
     *            Novo valor.
     */
    public void setValor(Integer valor) {
        this.valor = valor;
    }

    /**
     * Retorna o comentrio a respeito da Transao.
     * 
     * @return comentrio a respeito da Transao.
     */
    public String getComentario() {
        return comentario;
    }

    /**
     * Atribui um novo comentrio  Transao.
     * 
     * @param comentario
     *            Novo comentrio.
     */
    public void setComentario(String comentario) {
        this.comentario = comentario;
    }

    /**
     * Retorna a data de quando o aviso a respeito da Transao deve ser enviado ao Usurio dono da Transao.
     * 
     * @return A data de quando o aviso a respeito da Transao deve ser enviado ao Usurio dono da Transao.
     */
    public Date getDataAvisoPrevio() {
        return dataAvisoPrevio;
    }

    /**
     * Atribui uma nova data de aviso prvio  Transao.
     * 
     * @param dataAvisoPrevio
     *            Nova data.
     */
    public void setDataAvisoPrevio(Date dataAvisoPrevio) {
        this.dataAvisoPrevio = dataAvisoPrevio;
    }

    /**
     * Retorna True caso a Transao seja de crdito e False caso seja de dbito.
     * 
     * @return True caso a Transao seja de crdito e False caso seja de dbito.
     */
    public Boolean getCredito() {
        return credito;
    }

    /**
     * Atribui um novo tipo de movimento (crdito ou dbito)  Transao.
     * 
     * @param credito
     *            Novo tipo de movimento (crdito ou dbito).
     */
    public void setCredito(Boolean credito) {
        this.credito = credito;
    }

    /**
     * Retorna a Categoria associada com a Transao.
     * 
     * @return Categoria associada com a Transao.
     */
    public Categoria getCategoria() {
        return categoria;
    }

    /**
     * Atribui uma nova Categoria  Transao.
     * 
     * @param categoria
     *            Nova Categoria.
     */
    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }

    /**
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.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;
        Transacao other = (Transacao) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", id)
                .append("descricao", descricao).append("data", data).append("valor", valor)
                .append("comentario", comentario).append("dataAvisoPrevio", dataAvisoPrevio)
                .append("credito", credito).append("categoria", categoria).toString();
    }

}