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