sexta-feira, 28 de setembro de 2012

Reimplementação de métodos da classe br.com.jbc.controller.Controller

Sobrecarga de método para alterar lógica de negócio


Para reimplementar a classe controller, devemos declarar uma classe que herde de br.com.jbc.controller.Controller, sendo necessário especificar o tipo de classe de manipulação.

Vejamos como utilizar diretamente a classe Controller para inserir um registro de Venda:

br.com.jbc.controller.Controller<Venda> controller = 
                          new br.com.jbc.controller.Controller<Venda>();
try {

    Venda venda = new Venda();
    venda.setValor(50.00");
    venda.setProduto(new Produto(1));
    venda.setQuantidade(10);

    controller.insert(venda);

} catch (Exception e) {
    e.printStackTrace();
}

Convenhamos que para algumas operações precisamos efetuar algumas atualizações em outras entidades, porém isto deve ser feito na mesma transação, então declaramos a classe para que seja possível reimplementar o método inserir Venda, pois precisamos atualizar o estoque do Produto 1:

public class VendaController extends br.com.jbc.controller.Controller<Venda>{

    @Override
    public Boolean insert(Venda venda){

        long estoqueProduto = venda.getProduto().getQuantidade();

        // atualiza o estoque com a quantidade vendida
        venda.getProduto().setQuantidade(estoqueProduto - venda.getQuantidade());
        super.insert(venda);
   }

}

Invocamos super.insert(venda) para chamar o método da classe pai, neste caso a classe br.com.jbc.controller.Controller

Para este exemplo, consideramos que o produto esteja delcarado na classe Venda com uma anotação org.hibernate.annotations.CascadeType.ALL

Em seguida, utilizamos a classe criada:

VendaController vendaController = new VendaController();

try {
    Venda vendaController = new Venda();
    venda.setValor(50.00");
    venda.setProduto(new Produto(1));
    venda.setQuantidade(10);
    vendaController.insert(venda);
} catch (Exception e) {
    e.printStackTrace();
}

Dando atenção a declaração da classe VendaController e a insersão da Venda, códigos que se encontram destacados e em negrito.

Com a sobrescrita do método insert, foi possível fazer a atualização do estoque do produto vendido.

Nenhum comentário:

Postar um comentário

Muito obrigado por contribuir com o JBC!