/* * Biblioteca de codigo Java * Desenvolvida por Diego Tadeu e Jose Renato */ package jrdis.gen.objeto; /** * IObjetoComEstados e uma interface que deve ser implementada para todos os * objetos que possuam o conceito de estados. * * O conceito de estados de objeto serve para identificar qual e o estado de * um objeto, por exemplo: * - Quando um objeto e recuperado da base de dados, o seu estado e * ANTIGO_INALTERADO. * * Isso porque esse conceito se aplica em relacao aos dados que o objeto * encapsula, e nao a instancia do objeto em si. * * Outros exemplos: * - Quando um objeto e recuperado da base de dados e o mesmo tem algum de * seus atributos alterados apos essa recuperacao, seu estado deve ser * ANTIGO_ALTERADO. * - Quando um objeto e recuperado da base de dados e e marcada para ser * excluido, seu estado passa a ser ANTIGO_EXCLUIDO. * * TODO objeto ao ser criado, devera assumir o ESTADO_INICIAL, que e NOVO. * * Um objeto com estado tambem deve ser clonavel e copiavel, para que se possa * fazer operacoes em uma instancia de um objeto, valida-las e depois sim, * repassar os dados ao objeto original. * * @see objeto.IObjetoComEstados.EstadoObjeto * @see objeto.IObjetoComEstados.CtrlEstadoObjeto * * @author Diego Tadeu e Jose Renato */ public interface IObjetoComEstados extends Cloneable { // Declaracao das constantes public final EstadoObjeto ESTADO_INICIAL = EstadoObjeto.NOVO; // Fim da declaracao das constantes /** * EstadoObjeto sao os estados possiveis que o objeto pode assumir. */ public enum EstadoObjeto { /** * NOVO e o estado inicial do objeto, indicando que os valores do objeto * ainda nao foram aramazenados. */ NOVO, /** * ANTIGO_INALTERADO e o estado que o objeto assume quando acaba de ser * recuperado de uma base de dados e ainda nao foi alterado. */ ANTIGO_INALTERADO, /** * ANTIGO_ALTERADO e o estado que o objeto assume quando, apos ser * recuperado de uma base de dados, sofre alteracoes em seus atributos. */ ANTIGO_ALTERADO, /** * ANTIGO_EXCLUIDO e o estado que o objeto assume quando, apos ser * recuperado de uma base de dados, e marcada para exclusao. */ ANTIGO_EXCLUIDO } // Fim do enum EstadoObjeto /** * getEstadoInterno e o getter do atributo que guardo o estado do objeto. * * @return retorna o estado interno atual. * @see objeto.ObjetoComEstados.EstadoObjeto */ public abstract EstadoObjeto getEstadoInterno(); /** * settEstadoInterno e o setter do atributo que guarda o estado do objeto. * * @param estado sera o novo valor do atributo estado interno do objeto. */ public abstract void setEstadoInterno(EstadoObjeto estado); /** * clone e um metodo que retorna uma nova instancia do objeto que foi * chamdado. * * @return retorna uma nova instancia com os dados copiados. */ public abstract IObjetoComEstados clone(); /** * copiarDados copia os dados do objeto passado por parametro para o objeto * de onde e chamado * * @param objetoOrigem e o objeto com os dados a serem copiados. */ public abstract void copiarDados(IObjetoComEstados objetoOrigem); /** * CtrlEstadoObjeto e a classe responsavel por fazer a transicao dos estados * do objeto passado por parametro. */ public class CtrlEstadosObjeto { /** * alterar ira marcar o objeto como ANTIGO_ALTERADO, desde que o mesmo * seja diferente de NOVO. * * @param objeto a ser alterado. */ public static void alterar(IObjetoComEstados objeto) { // Teste para evitar NullPointerExceptions if ( null == objeto ) { return; } // Obtem o estado atual EstadoObjeto estado = objeto.getEstadoInterno(); // Verifica o estado atual e define o novo estado if ( EstadoObjeto.NOVO != estado ) { objeto.setEstadoInterno( EstadoObjeto.ANTIGO_ALTERADO ); } } /** * excluir ira marcar o objeto como ANTIGO_EXCLUIDO, desde que o mesmo * seja diferente de NOVO. * * @param objeto a ser excluido. */ public static void excluir(IObjetoComEstados objeto) { // Teste para evitar NullPointerExceptions if ( null == objeto ) { return; } // Obtem o estado atual EstadoObjeto estado = objeto.getEstadoInterno(); // Verifica o estado atual e define o novo estado if ( EstadoObjeto.NOVO != estado ) { objeto.setEstadoInterno( EstadoObjeto.ANTIGO_EXCLUIDO ); } } } // Fim da classe CtrlEstadosObjeto } // Fim da interface IObjetoComEstados