na classe LeilaoBuilder nao existe o metodo comLance, Devo cria-lo?
na classe LeilaoBuilder nao existe o metodo comLance, Devo cria-lo?
Não existe uma classe LanceDao tambem
Oi , Ana!
Realmente não existe o método "comLance" na classe LeilaoBuilder. O exemplo apenas mostrou um forma "elegante" de adicionar os lances no leilão.
A classe LanceDao não precisa ser criada porque a classe Leilão já gerencia a persistência dos lances com o Hibernate.
@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true, mappedBy="leilao") private List lances;
Olá Ana.
Caso deseje implementar, segue uma solução simples
public class LeilaoBuilder {
private Usuario dono;
private double valor;
private String nome;
private boolean usado;
private Calendar dataAbertura;
private boolean encerrado;
private List<Lance> lances;
public LeilaoBuilder() {
this.dono = new Usuario("Joao da Silva", "joao@silva.com.br");
this.valor = 1500.0;
this.nome = "XBox";
this.usado = false;
this.dataAbertura = Calendar.getInstance();
this.lances = new ArrayList<>();
}
public LeilaoBuilder comDono(Usuario dono) {
this.dono = dono;
return this;
}
public LeilaoBuilder comValor(double valor) {
this.valor = valor;
return this;
}
public LeilaoBuilder comNome(String nome) {
this.nome = nome;
return this;
}
public LeilaoBuilder usado() {
this.usado = true;
return this;
}
public LeilaoBuilder encerrado() {
this.encerrado = true;
return this;
}
public LeilaoBuilder diasAtras(int dias) {
Calendar data = Calendar.getInstance();
data.add(Calendar.DAY_OF_MONTH, -dias);
this.dataAbertura = data;
return this;
}
public Leilao constroi() {
Leilao leilao = new Leilao(nome, valor, dono, usado);
leilao.setDataAbertura(dataAbertura);
if (encerrado) {
leilao.encerra();
}
for(Lance lance : lances){
lance.setLeilao(leilao);
leilao.adicionaLance(lance);
}
return leilao;
}
public LeilaoBuilder comLance(Calendar data, Usuario dono, double valor){
lances.add(new Lance(dataAbertura, dono, valor, null));
return this;
}
}
Pessoal, construí o teste usando o que o código já disponibilizava e ficou dessa forma:
@Test
public void deveRetornarLeilaoNaoEncerradoComMaisDeTresLancesEntreValor() {
Usuario fulano = new Usuario("Fulano de Tal", "fulano@email.com");
Usuario beltrano = new Usuario("Beltrano Silva", "beltrano@email.com");
Usuario ciclano = new Usuario("Ciclano Costa", "ciclano@email.com");
usuarioDao.salvar(fulano);
usuarioDao.salvar(beltrano);
usuarioDao.salvar(ciclano);
Leilao leilao1 = new LeilaoBuilder().comNome("Playstation").comDono(fulano).comValor(1200.0).build();
Lance lanceGame1 = new Lance(Calendar.getInstance(), beltrano, 1250.0, leilao1);
Lance lanceGame2 = new Lance(Calendar.getInstance(), ciclano, 1300.0, leilao1);
Lance lanceGame3 = new Lance(Calendar.getInstance(), beltrano, 1400.0, leilao1);
Lance lanceGame4 = new Lance(Calendar.getInstance(), ciclano, 1499.0, leilao1);
leilao1.adicionaLance(lanceGame1);
leilao1.adicionaLance(lanceGame2);
leilao1.adicionaLance(lanceGame3);
leilao1.adicionaLance(lanceGame4);
// leilao sem lances
Leilao leilao2 = new LeilaoBuilder().comNome("Smartphone").comDono(fulano).comValor(799.0).build();
// leilao com lances mas encerrado
Leilao leilao3 = new LeilaoBuilder().comNome("TV Led").comDono(fulano).comValor(1999.0).encerrado().build();
Lance lanceTv1 = new Lance(Calendar.getInstance(), beltrano, 2250.0, leilao3);
Lance lanceTv2 = new Lance(Calendar.getInstance(), ciclano, 2300.0, leilao3);
Lance lanceTv3 = new Lance(Calendar.getInstance(), beltrano, 2400.0, leilao3);
Lance lanceTv4 = new Lance(Calendar.getInstance(), ciclano, 2499.0, leilao3);
leilao3.adicionaLance(lanceTv1);
leilao3.adicionaLance(lanceTv2);
leilao3.adicionaLance(lanceTv3);
leilao3.adicionaLance(lanceTv4);
leilaoDao.salvar(leilao1);
leilaoDao.salvar(leilao2);
leilaoDao.salvar(leilao3);
List<Leilao> leiloes = leilaoDao.disputadosEntre(1000.0, 1500.0);
assertEquals(1, leiloes.size());
}
Espero que ajude. =)