Bom, quando você usa JCheckBoxes, existem vários filtros que você vai usar de uma vez só na pesquisa.
Eu vejo duas soluções para a situação:
- Na sua classe de serviços, criar um método de pesquisa genérico:
[code]public class ServicosImovel {
public List<Imovel> recuperarImoveisPorCriteria(Map<String, Object> criteria) throws SQLException {
PersistenciaImovel persistenciaImovel = new PersistenciaImovel();
return persistenciaImovel.recuperarPorCriteria(criteria);
}
}[/code]
e, no seu evento de pesquisar:
Map<String, Object> criteria = new HashMap<String, Object>();
if (checkboxCampo1.isChecked()) {
criteria.add("chaveDoCampo1", campo1);
}
if (checkboxCampo2.isChecked()) {
criteria.add("chaveDoCampo2", campo2);
}
ServicosImovel servicosImovel = new ServicosImovel();
List<Imovel> imoveis = servicosImovel.recuperarImoveisPorCriteria(criteria);
- Realizar uma busca para cada um dos filtros específicos e juntar os registros, sem repetição, para que formem uma coleção única e distinta:
[code]public class ServicosImovel {
public List<Imovel> recuperarListaDistinta(List<Imovel> original, List<Imovel> imoveis) {
// ESSE MÉTODO SERVE PARA PEGAR OS VALORES DAS LISTAS QUE VOCÊ
// PESQUISOU E JUNTAR PARA UMA LISTA ÚNICA E DISTINTA.
// OBS: FIZ NO OLHO; SE FOR USAR ESSA SOLUÇÃO, ME FALA QUE A GENTE
// PENSA NELE CORRETAMENTE, É SÓ PRA VOCÊ TER UMA IDEIA.
List<Imovel> imoveisDistintos = new ArrayList<Imovel>();
for (List<Imovel> imovel : imoveis) {
if (!original.contains(imovel))
imoveisDistintos.add(imovel);
}
return imoveisDistintos;
}
public List<Imovel> recuperarImoveisPorFiltro1(String filtro1) throws SQLException {
PersistenciaImovel persistenciaImovel = new PersistenciaImovel();
Map<String, Object> criteria = new HashMap<String, Object>();
criteria.add("filtro1", filtro1);
return persistenciaImovel.recuperarPorCriteria(criteria);
}
public List<Imovel> recuperarImoveisPorFiltro2(String filtro2) throws SQLException {
PersistenciaImovel persistenciaImovel = new PersistenciaImovel();
Map<String, Object> criteria = new HashMap<String, Object>();
criteria.add("filtro2", filtro2);
return persistenciaImovel.recuperarPorCriteria(criteria);
}
}[/code]
e, no seu evento de pesquisa:
ServicosImovel servicosImovel = new ServicosImovel();
List<Imovel> imoveis = new ArrayList<Imovel>();
List<Imovel> temp = new ArrayList<Imovel>();
if (checkboxEndereco.isChecked()) {
temp = servicosImovel.recuperarPorEndereco("Endereço qualquer");
imoveis = servicosImovel.recuperarListaDistinta(imoveis, temp);
}
if (checkboxStatus.isChecked()) {
temp = servicosImovel.recuperarPorStatus("Status qualquer");
imoveis = servicosImovel.recuperarListaDistinta(imoveis, temp);
}
Se tiver alguma outra ideia, posta ela aí que vamos desenvolvendo-a!