[RESOLVIDO]iReport com varias condições no select

Ola,
Quero saber qual a melhor forma de implementar uma query no iReport onde pode haver mais de uma condicao ou nenhuma condicao. Por exemplo:

//Esse seria o select sem parametro nenhum
"select campo1,campo2,campo3,campo4 from produto"

//Esse seria o com parametros
"select campo1,campo2,campo3,campo4 from produto where data='20150113' and idgrupo=17"

Os parametros seria selecionados em tela. Via codigo fonte posso colocar uma estrutura de IF para ir alterando o select. Mas no iReport onde o select ja tem que estar montado, como seria?

Obrigado.

Poste sempre a solução por favor

Ola vou explicar como ficou minha solucao. Primeiro eu fiz o select no iReport sem passar as condicoes para eu poder montar o relatorio se nao ele nao carrega os fields. Depois de montado o leiaute as condicoes ficam assim:

//Observar a exclamalçao depois do $P
select numeroNota,serieNota,dataEmissao, dataRecebimento from notafiscal where loja=$P{loja} $P!{fornecedor} $P!{categoria} $P!{tiponota} 

Quando coloca essa exclamação ele para de carregar os campos automaticamente e sem a exclamacao o iReport nao compila o relatorio. Por isso montei primeiro sem where para depois coloca-lo. Agora no codigo do programa o metodo que chama o relatorio ficou assim:

public String imprimirRelatorioNotaFiscalAnalitico() {
        InputStream relatorioStream = getClass().getClassLoader().getResourceAsStream("caminho_do_relatorio/notaFiscalAnalitico.jasper");
        HashMap parametros = new HashMap();
        parametros.put("loja", loja.getCodigo());
        parametros.put("fornecedor", "");
        parametros.put("categoria", "");
        parametros.put("tipoNota", "");
        if (fornecedor != null) {
            parametros.put("fornecedor", "and n.idfornecedor=" + fornecedor.getID());
        }
        if (categoria != null) {
            parametros.put("categoria", "and categoria=" + categoria.getID());
        }

        if (!tipoNota.equals("A")) {
            parametros.put("tipoNota", "and tiponota=\'" + tipoNota.trim() + "\'");
        }
        RelatorioUtil.imprimirRelatorio(relatorioStream, parametros, Database.getInstance().getConnection(), "notaFiscal.pdf");
        return null;
    }

Abaixo o metodo da classe que faz a geracao do pdf.

public static void imprimirRelatorio(InputStream relatorioStream, HashMap parametros, Connection conexao, String nomeArquivo) {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
        String header = "inline);filename=";

        try {
            JasperPrint print = JasperFillManager.fillReport(relatorioStream, parametros, conexao);
            byte[] dados = JasperExportManager.exportReportToPdf(print);            
            response.setContentType("application/pdf");
            response.setHeader("Content-disposition", header + nomeArquivo);
            OutputStream output = context.getExternalContext().getResponseOutputStream();
            output.write(dados);                        
            output.flush();
            output.close();
            response.getCharacterEncoding();
            context.responseComplete();
        } catch (JRException ex) {
            Logger.getLogger(RelatorioUtil.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
        } catch (IOException ex) {
            Logger.getLogger(RelatorioUtil.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
 }

Funcionou igual quando fazemos os IFs no codigo fonte para ir construindo os selects concatenando as strings.

[]'s