GenericPresentationModel

20/02/2010

Ola pessoal Estou com o seguinte problema para resolver: Em meu sistema existem várias classes as quais possuem comportamento semelhante e poucas funcionalidades tais como: Estado, Cidade, Categoria, SubCategoria, se formos observar estas classes possuem comportamentos semelhantes. Então estou tentando criar uma classe de modelo de apresentação (PresentationModel) genérica que servirá para grande parte dos cadastros. O que estou tentando fazer é o seguinte: Observe que a classe OrderModel é ma classe que estende a classe PresentationModel que por padrão ja declara um tipo genérico em sua assinatura
veja a documentação desta classe no link abaixo: C:\JGoodies\docs\binding\api\com\jgoodies\binding\PresentationModel.html esta é uma classe que realiza o bind das propriedades de um bean com seu editor(formulário onde os dados são apresentados).   Da forma como ela esta tudo funciona normalmente exceto o metodo abaixo:    private void updateValidationResult() {
        Order order = (Order) getBean(); 
        ValidationResult result = new OrderValidator().validate(order);
        validationResultModel.setResult(result);
    }   onde é necessário realizar um cast para o objeto de negócio desejado exemplo:   Order order = (Order) getBean(); Categoria categoria (Categoria) getBean(); Cidade cidade (Cidade) getBean();   O problema reside no fato de que o metodo getBean() da classe PresentationModel<B> a qual é superClasse da que estou tentando implementar esta retornando Object e não o objeto passado como parametro quando eu a instancio como abaixo:   public ComponentFeedbackExample() {          orderModel = new OrderModel(new Order()); }Observer que passei um objeto do tipo Order. Existe uma maneira de resolver este problema do cast para tornar o componente genérico?   Observe que este é o primeiro ponto a ser resolvido o proximo é: realizar a instanciação da classe correta de validação de acordo com cada objeto passado. Exemplo: se eu  passar um objeto do tipo Order eu tenho que instanciar sua classe de validação correspondente no metodo  updateValidationResult() que foi descrito acima.   ValidationResult result = new OrderValidator().validate(order);
ValidationResult result = new CategoriaValidator().validate(categoria); ValidationResult result = new SubCategoriaValidator().validate(subCategoria);

  Sera que estou no caminho correto? Se você quiser ai esta o link para o codigo fonte completo do exemplo. http://video.devmedia.com.br/discovirtual/200152/GenericPresentationModel/Copy of Validation.zip   /**
 * Provides all models to bind an order editor to its domain model,
 * an instance of {@link Order}.
 *
 * @author Karsten Lentzsch
 * @version $Revision: 1.15 $
 */
public class OrderModel<T> extends PresentationModel<T> {     private final ValidationResultModel validationResultModel;     // Instance Creation ******************************************************     public OrderModel(T order) {
        super(order);
        validationResultModel = new DefaultValidationResultModel();
        initEventHandling();
        updateValidationResult();
    }  
    // Exposing Models ********************************************************     public ValidationResultModel getValidationResultModel() {
        return validationResultModel;
    }
    // Initialization *********************************************************     /**
     * Listens to changes in all properties of the current Order
     * and to Order changes.
     */
    private void initEventHandling() {
        PropertyChangeListener handler = new ValidationUpdateHandler();
        addBeanPropertyChangeListener(handler);
        getBeanChannel().addValueChangeListener(handler);
    }
    // Event Handling *********************************************************     private void updateValidationResult() {
   ----------------  Order order = (Order) getBean(); ----------------------
        ValidationResult result = new OrderValidator().validate(order);
        validationResultModel.setResult(result);
    }  
    /**
     * Validates the order using an OrderValidator and
     * updates the validation result.
     */
    private final class ValidationUpdateHandler implements PropertyChangeListener {         public void propertyChange(PropertyChangeEvent evt) {
            updateValidationResult();
        }     } }
Israel Barbosa

Israel Barbosa

Curtidas 0

Respostas

Henrique Weissmann

Henrique Weissmann

20/02/2010

Oi Israel,

o link incluido no seu chamado aponta para o seu HD local. Será que você poderia disponibilizar este texto em algum lugar na Internet para que eu possa avaliá-lo?
GOSTEI 0
Israel Barbosa

Israel Barbosa

20/02/2010

O javadocs da classe PresentationModel esta anexo a um email que te mandei. Fiz isto porque não achei o link na internet. E tbm porque estou com com uma internet discada que neste momento me disponibiliza velocidade de navegação de 26kbps , impossivel de fazer upload para o disco virtual nesta velocidade.   Qualquer coisa me avise se não encontrar o email.
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

20/02/2010

Oi Israel,

vamos ao primeiro problema:

"(...) Existe uma maneira de resolver este problema do cast para tornar o componente genérico?"

Não há muito o que fazer neste caso. Essencialmente, por retornar uma instância de Object o método já é o mais genérico possível visto ser Object a classe base de todas as outras. Nâo sei se é o caso, mas já vi bibliotecas que foram feitas para dar suporte ao Java pré 1.5 apresentar probleams com o uso de genéricos. Pode ser que seja o caso.

Agora com relação ao segundo problema: na realidade, não há problema algum Israel, você está indo no caminho certo. É exatamente assim que se faz.
GOSTEI 0
Israel Barbosa

Israel Barbosa

20/02/2010

Bao tarde Henrique O pacote de validação faz parte do modelo ou no controlador?   Após responder pode fechar este chamado?    
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

20/02/2010

O pacote de validação faz parte do modelo, visto que o trabalho do controlador é apenas o de intermediar as chamadas da visualização para o modelo e vice-versa.
GOSTEI 0
POSTAR