Pergunta

Seu aplicativo pode exigir uma pesquisa com base em intervalos de datas, por exemplo, pesquisar todos os nós que foram criados nos últimos três dias.

Como é possível fazer uma pesquisa por intervalo de datas?

Resposta

O CRX oferece a possibilidade de expressar intervalos de datas usando o mapeamento xs:dateTime. O exemplo a seguir mostra como pesquisar nós abaixo do /content/mypage que foram criados entre 24/04/2009 e 28/04/2009:

/jcr:root/content/mypage//*[@jcr:created >= xs:dateTime('2009-04-24T00:00:00.000+02:00') e @jcr:created < xs:dateTime('2009-04-28T00:00:00.000+02:00')] 

O mecanismo de pesquisa Lucene indexa a data real em milissegundos, e é por isso que o mapeamento usando a função xs:dateTime é necessária na pesquisa por intervalo de datas. A sequência de caracteres formatada passada para essa função deve ser obtida conforme mostrado no seguinte trecho de código:

// obtain javax.jcr.ValueFactory from JCR session ValueFactory factory = session.getValueFactory(); // obtain Calendar object Calendar cal = Calendar.getInstance(); // create javax.jcr.Value object of PropertyType.DATE Value dateValue = factory.createValue(cal); // finally, get string representation of the DATE-value which can be used in xs:dateTime function String dateString = dateValue.getString();