Versão ALPHA! Este artigo está em versão 'Alpha' e, portanto, não foi ainda revisado corretamente

Entidades em hierarquia - Utilizando a consulta delegate

Introdução

Após a implementação de sua consulta delegate e de seu respectivo teste, é possível dar início as consultas que pertencem aos níveis inferiores da hierarquia de classes, isso claro, utilizando a consulta delegate recém implementada.

Reaproveitando seu teste

Como o teste de consulta delegate verifica cada um dos casos de entidade a ser procurada no banco, copie o teste que equivale a entidade a ser testada, em nosso caso Gerente, declare também a consulta de Gerente que utilizara a consula delegate.

@Inject
private ConsultaDeGerente consulta;

public void listagem_caso_gerente() {
  FakeRequestWrapper wrapper = new FakeRequestWrapper();

  List<Empregado> contra = contra(1, 2, 3, 4);
  List<String> prova = transform(contra, new GerenteToString());

  List<ConsultaDeGerenteDTO> list = consulta.list(wrapper, "G");
  List<String> res = transform(list, new DtoToString());

  assertThat(res, equalTo(prova));
}

Ao invés de retornar uma lista de ConsultaDeEmpregadoDTO, retorne uma lista de ConsultaDeGerenteDTO, crie a interface e adicione todas as propriedades que pertencem a Gerente

public interface ConsultaDeGerenteDTO {
  
  int getId();
  
  String getNome();
  
  String getDepartamento();
  
}

As funções GerenteToString e DtoToString foram omitidas por conta de seu tamanho, visto que já foram implementadas em outro teste, o objetivo deste tópico é apenas mostrar o que pode ser reutilizado do teste anterior.

Criando a Consulta

Ao finalizar o teste comece a implementar a consulta, sua implementação diminue bastante em relação as demais consultas, atente ao bloco de código abaixo.

private final ConsultaDeEmpregadoDelegate delegate;

@Inject
public ConsultaDeGerente(ConsultaDeEmpregadoDelegate delegate) {
  this.delegate = delegate;
}

public List<ConsultaDeGerenteDTO> list(RequestWrapper wrapper) {
  List<ConsultaDeEmpregadoDelegateDTO> dtos = delegate.list("B", wrapper);
  return dtos;
}

Ao adicionar este bloco é muito provavel que um erro de compilação seja lançado indicando incompatibilidade entre os tipos, para que este retorno seja possível é preciso seguir os três passos abaixo

Faça com que ConsultaDeEmpregadoDTO seja um Gerente

public interface ConsultaDeEmpregadoDTO extends ConsultaDeGerenteDTO {
  
  @Override
  int getId();
  
  @Override
  String getNome();
  
  @Override
  String getDepartamento();
  
  String getArea();
  
} 

Na consulta crie uma função de conversão, para que o método list retorne uma lista de ConsultaDeGerenteDTO.

private class ToDTO implements Function<ConsultaDeEmpregadoDelegateDTO, ConsultaDeGerenteBooleanoDTO> {
  @Override
  public ConsultaDeGerenteDTO apply(ConsultaDeEmpregadoDelegateDTO input) {
    return input;
  }
}

Não se esqueça de alterar o retorno do método list

public List<ConsultaDeGerenteDTO> list(RequestWrapper wrapper) {
  List<ConsultaDeEmpregadoDelegateDTO> dtos = delegate.list("B", wrapper);
  return transform(dtos, new ToDTO());
}

Assim é possível realizar a conversão de tipos e nossa consulta de Gerente pode retornar Gerentes e não Empregados, atente ao resultado final

public class ConsultaDeGerente {

  private final ConsultaDeEmpregadoDelegate delegate;

  @Inject
  public ConsultaDeGerente(ConsultaDeEmpregadoDelegate delegate) {
    this.delegate = delegate;
  }

  public List<ConsultaDeGerenteDTO> list(RequestWrapper wrapper) {
    List<ConsultaDeEmpregadoDelegateDTO> dtos = delegate.list("B", wrapper);
    return transform(dtos, new ToDTO());
  }

  private class ToDTO implements Function<ConsultaDeEmpregadoDelegateDTO, ConsultaDeGerenteDTO> {
    @Override
    public ConsultaDeGerenteDTO apply(ConsultaDeEmpregadoDelegateDTO input) {
      return input;
    }
  }

}

 
 

objectos, Fábrica de Software LTDA

  • R. Demóstenes, 627. cj 123
  • 04614-013 - Campo Belo
  • São Paulo - SP - Brasil
  • +55 11 5093-8640
  • +55 11 2359-8699
  • contato@objectos.com.br