List listaMetodos = Util.listaMetodosGet(obj);
Object auxObj = null;
String nomeAtributo;
String nomeMetodo;
String tipoRetorno;
AvaliaMetodo avaliaMetodo;
for (int i = 0; i < listaMetodos.size(); i++) {
if (((Method)listaMetodos.get(i)).getParameterTypes().length==0){
avaliaMetodo = ((Method)listaMetodos.get(i)).getAnnotation(AvaliaMetodo.class);
if (avaliaMetodo != null && !avaliaMetodo.valida()) {
auxObj = null;
} else {
auxObj = ((Method)listaMetodos.get(i)).invoke(obj, null);
}
}
// somente adiciona um criterio se o conteudo for != vazio
if (auxObj != null) {
// obtem o nome do m�todo para retirar o nome do atributo
nomeMetodo = ((Method)listaMetodos.get(i)).getName();
tipoRetorno = ((Method)listaMetodos.get(i)).getReturnType().getName().toLowerCase();
nomeAtributo = nomeMetodo.substring(3,4).toLowerCase() +nomeMetodo.substring(4);
avaliaMetodo = ((Method)listaMetodos.get(i)).getAnnotation(AvaliaMetodo.class);
if (tipoRetorno.endsWith("string")) {
select.add(Expression.ilike(nomeAtributo, "%" + auxObj + "%"));
} else if (avaliaMetodo != null && avaliaMetodo.valida() && tipoRetorno.endsWith("boolean")) {
select.add(Expression.eq(nomeAtributo, auxObj));
} else {
// Se o atributo for Set n�o entra na pesquisa ser� filtrado depois
if (avaliaMetodo == null) {
if(!tipoRetorno.endsWith("set"))
select.add(Expression.eq(nomeAtributo, auxObj));
} else {
if (avaliaMetodo.valida()){
if(!tipoRetorno.endsWith("set"))
select.add(Expression.eq(nomeAtributo, auxObj));
}
}
}