BuilderMaster é uma lib que vai criar Builders para as suas entidades. Utiliza conceitos como DataBuilder, Method Chaining e Fluent Interface.
Para gerar os códigos para uma classe, adicione o jar no classpath do seu código e faça a seguinte chamada:
new BuilderMaster().gerarCodigoClasse(SuaClasse.class);
O código será impresso no console. Feito isso, basta copiar todo o código gerado. Criar uma classe com o nome SuaClasseBuilder e colar o código gerado deixando apenas a declaração do pacote.
Como exemplo, segue o código de uma entidade:
package br.ce.wcaquino.entidades;
public class Usuario {
private String nome;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
E agora, o código do builder gerado para a entidade acima:
package br.ce.wcaquino.entidades; //Única linha que não foi gerada pelo BuilderMaster
import java.util.Arrays;
import java.lang.String;
import br.ce.wcaquino.entidades.Usuario;
public class UsuarioBuilder {
private Usuario elemento;
private UsuarioBuilder(){}
public static UsuarioBuilder umUsuario() {
UsuarioBuilder builder = new UsuarioBuilder();
inicializarDadosPadroes(builder);
return builder;
}
public static void inicializarDadosPadroes(UsuarioBuilder builder) {
builder.elemento = new Usuario();
Usuario elemento = builder.elemento;
elemento.setNome("");
}
public UsuarioBuilder comNome(String param) {
elemento.setNome(param);
return this;
}
public Usuario agora() {
return elemento;
}
}
Esse projeto possui mais classe que o necessário. A única classe para essa geração é a br.ce.wcaquino.buildermaster.BuilderMaster
.
As demais classes fazem parte de um projeto para um plugin do Eclipse que você poderia utilizá-la apenas selecionando a classe na árvore estrutural do projeto, e solicitando a geração dos códigos para o builder da entidade selecionada. O código já ficaria disponível na área de transferência.
Porém, para esse trabalho, não era possível utilizar o Reflection do JAVA (java.lang.reflect.*
), foi necessário utilizar a lib jdt do eclipse (org.eclipse.jdt.core.*
). Essa lib é bem mais complexa que o Reflection com a documentação mais escassa. Consegui fazer funcionar o básico do builder mas não encontrei portar todas as funcionalidades da versão do reflection para o jdt. Por questões de tempo, acabei deixando esse projeto de lado.
Abri o projeto atualmente, e não está nem compilando. Não perdi tempo tentando consertá-la, mas deixei o código mesmo assim para fins didáticos... ou caso alguém queira levar o projeto para frente.