QueryDecoder

O objetivo deste projeto é fornecer uma estrutura para desserialização de filtros a partir de uma string. A ideia surgiu a partir da necessidade de disponibilizar uma maneira de obter dados filtrados através de uma API, onde o filtro pode ser utilizado como uma URL query.

License

License

GroupId

GroupId

com.github.paulosalonso
ArtifactId

ArtifactId

querydecoder
Last Version

Last Version

2.0.1
Release Date

Release Date

Type

Type

jar
Description

Description

QueryDecoder
O objetivo deste projeto é fornecer uma estrutura para desserialização de filtros a partir de uma string. A ideia surgiu a partir da necessidade de disponibilizar uma maneira de obter dados filtrados através de uma API, onde o filtro pode ser utilizado como uma URL query.
Project URL

Project URL

https://github.com/paulosalonso/query-decoder
Source Code Management

Source Code Management

https://github.com/paulosalonso/query-decoder.git

Download querydecoder

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.paulosalonso/querydecoder/ -->
<dependency>
    <groupId>com.github.paulosalonso</groupId>
    <artifactId>querydecoder</artifactId>
    <version>2.0.1</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.paulosalonso/querydecoder/
implementation 'com.github.paulosalonso:querydecoder:2.0.1'
// https://jarcasting.com/artifacts/com.github.paulosalonso/querydecoder/
implementation ("com.github.paulosalonso:querydecoder:2.0.1")
'com.github.paulosalonso:querydecoder:jar:2.0.1'
<dependency org="com.github.paulosalonso" name="querydecoder" rev="2.0.1">
  <artifact name="querydecoder" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.paulosalonso', module='querydecoder', version='2.0.1')
)
libraryDependencies += "com.github.paulosalonso" % "querydecoder" % "2.0.1"
[com.github.paulosalonso/querydecoder "2.0.1"]

Dependencies

test (3)

Group / Artifact Type Version
org.junit.jupiter : junit-jupiter-api jar 5.3.1
org.junit.jupiter : junit-jupiter-params jar 5.3.1
org.junit.jupiter : junit-jupiter-engine jar 5.3.1

Project Modules

There are no modules declared in this project.

QueryDecoder

Maven Dependency
<dependency>
    <groupId>com.github.paulosalonso</groupId>
    <artifactId>querydecoder</artifactId>
    <version>2.0.1</version>
</dependency>

O objetivo deste projeto é fornecer uma estrutura para desserialização de filtros a partir de uma string. A ideia surgiu da necessidade de disponibilizar uma maneira de obter dados filtrados através de uma API, onde o filtro pode ser utilizado como uma URL query.

Chamaremos essa string de "expressão". A expressão tem uma sintaxe mínima, a qual chamaremos de "expressão unitária", e que pode ser combinada/agrupada através de operadores lógicos (AND/OR) e parênteses.

A sintaxe da expressão mínima é a seguinte:

  • atributo[operador]:valor

Operadores

Operador Abreviação de Função
EQ ou suprimido Equal Verifica se os valores são iguais
SW Starts With Verifica se um texto começa com o valor informado
EW Ends With Verifica se um texto termina com o valor informado
CT ConTains Verifica se um texto contém determinado texto em seu conteúdo
LT Less Than Verifica se é menor que determinado valor
LTE Less Than or Equal Verifica se é menor ou igual a determinado valor
GT Greater Than Verifica se é maior que determinado valor
GTE Greater Than ou Equal Verifica se é maior ou igual a determinado valor
BT BeTween Verifica se está entre dois valores
IN IN Verifica se está entre uma lista de valores
Exemplos
  • nome[EQ]:João da Silva, nome:João da Silva
  • nome[CT]:João
  • valor[LT]:100
  • valor[LTE]:100
  • valor[GT]:100
  • valor[GTE]:100
  • valor[BT]:100-200
  • valor[IN]:100,120,150
Operadores negados

É possível negar os operadores iniciando-os com 'N'. Por exemplo:

  • nome[NEQ]:João da Silva
  • nome[NCT]:João
  • valor[NLT]:100
  • valor[NLTE]:100
  • valor[NGT]:100
  • valor[NGTE]:100
  • valor[NBT]:100-200
  • valor[NIN]:100,120,150

Operadores lógicos (AND/OR)

Os operadores AND (E) e OR (OU) podem ser usados da forma habitual em consultas SQL, incluindo aninhamentos:

  • nome:João da Silva AND (valor[LT]:100 OR valor[GT]:500)

Utilização

A interface com.alon.querydecoder.Expression representa uma expressão. Ela tem duas implementações:

  • com.alon.querydecoder.SingleExpression: representa uma expressão unitária.
  • com.alon.querydecoder.GroupExpression: representa um grupo de expressões unitárias que estão entre parênteses.

Toda instância de Expression faz referência às suas próprias informações e à próxima expressão, que é uma outra instância de Expression. Dessa maneira podemos trabalhar com todos os níveis de agrupamento das expressões unitárias.

Vamos tomar como exemplo a expressão abaixo:

  • nome:João da Silva AND (valor[LT]:100 OR valor[GT]:500)

Para converter essa string em uma estrutura de objetos, temos o seguinte:

Expression expression = ExpressionParser.parse("nome:João da Silva AND (valor[LT]:100 OR valor[GT]:500)");

Como saída, teremos:

  • SingleExpression
    • field: nome
    • match: Match
      • negated: false
      • type: MatchType.EQ
    • value: João da Silva
    • logicalOperator: LogicalOperator.AND
    • next: GroupExpression
      • groupedExpression: SingleExpression
        • field: valor
        • match: Match
          • negated: false
          • type: MatchType.LT
        • value: 100
        • logicalOperator: LogicalOperator.OR
        • next: SingleExpression
          • field: valor
          • match: Match
            • negated: false
            • type: MatchType.GT
          • value: 500
          • next: null

Versions

Version
2.0.1
2.0.0
1.1.0
1.0.0