Skip to content

Commit ef8ae90

Browse files
authored
Merge pull request #124 from Kentico/filtering-operators
Filtering operators
2 parents 1ec351b + bba22b4 commit ef8ae90

File tree

3 files changed

+144
-1
lines changed

3 files changed

+144
-1
lines changed

kontent-delivery/src/main/java/kentico/kontent/delivery/DeliveryClient.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,9 @@ private String createUrl(final String apiCall, final List<NameValuePair> queryPa
613613
final String queryStr = Optional.ofNullable(queryParams)
614614
.filter(params -> !params.isEmpty())
615615
.map(params -> params.stream()
616-
.map(pair -> String.format("%s=%s", pair.getName(), pair.getValue()))
616+
.map(pair -> pair.getValue() != null
617+
? String.format("%s=%s", pair.getName(), pair.getValue())
618+
: pair.getName())
617619
.collect(Collectors.joining("&")))
618620
.map("?"::concat)
619621
.orElse("");

kontent-delivery/src/main/java/kentico/kontent/delivery/DeliveryParameterBuilder.java

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,16 @@ public class DeliveryParameterBuilder {
171171
static final String LIMIT = "limit";
172172
static final String INCLUDE_TOTAL_COUNT = "includeTotalCount";
173173

174+
static final String NOT_EQUALS = "[neq]";
175+
static final String EMPTY = "[empty]";
176+
static final String NOT_EMPTY = "[nempty]";
174177
static final String LESS_THAN = "[lt]";
175178
static final String LESS_THAN_OR_EQUALS = "[lte]";
176179
static final String GREATER_THAN = "[gt]";
177180
static final String GREATER_THAN_OR_EQUALS = "[gte]";
178181
static final String RANGE = "[range]";
179182
static final String IN = "[in]";
183+
static final String NOT_IN = "[nin]";
180184
static final String CONTAINS = "[contains]";
181185
static final String ANY = "[any]";
182186
static final String ALL = "[all]";
@@ -211,6 +215,52 @@ public DeliveryParameterBuilder filterEquals(String attribute, String value) {
211215
return this;
212216
}
213217

218+
/**
219+
* Attribute value is not the same as the specified value.
220+
*
221+
* @param attribute The attribute.
222+
* @param value The value.
223+
* @return This DeliveryParameterBuilder with the added operator.
224+
* @see <a href="https://docs.kontent.ai/reference/delivery-api#tag/Filtering-content/filtering-operators">
225+
* More in Filtering operators.</a>
226+
*/
227+
public DeliveryParameterBuilder filterNotEquals(String attribute, String value) {
228+
if (attribute != null) {
229+
nameValuePairs.add(new NameValuePair(String.format("%s%s", attribute, NOT_EQUALS), value));
230+
}
231+
return this;
232+
}
233+
234+
/**
235+
* Attribute value is empty.
236+
*
237+
* @param attribute The attribute.
238+
* @return This DeliveryParameterBuilder with the added operator.
239+
* @see <a href="https://docs.kontent.ai/reference/delivery-api#tag/Filtering-content/filtering-operators">
240+
* More in Filtering operators.</a>
241+
*/
242+
public DeliveryParameterBuilder filterEmpty(String attribute) {
243+
if (attribute != null) {
244+
nameValuePairs.add(new NameValuePair(String.format("%s%s", attribute, EMPTY), null));
245+
}
246+
return this;
247+
}
248+
249+
/**
250+
* Attribute value is not empty.
251+
*
252+
* @param attribute The attribute.
253+
* @return This DeliveryParameterBuilder with the added operator.
254+
* @see <a href="https://docs.kontent.ai/reference/delivery-api#tag/Filtering-content/filtering-operators">
255+
* More in Filtering operators.</a>
256+
*/
257+
public DeliveryParameterBuilder filterNotEmpty(String attribute) {
258+
if (attribute != null) {
259+
nameValuePairs.add(new NameValuePair(String.format("%s%s", attribute, NOT_EMPTY), null));
260+
}
261+
return this;
262+
}
263+
214264
/**
215265
* Attribute value is less than the specified value.
216266
*
@@ -333,6 +383,35 @@ public DeliveryParameterBuilder filterIn(String attribute, Collection<String> va
333383
return filterIn(attribute, values.toArray(new String[0]));
334384
}
335385

386+
/**
387+
* Attribute value is not in the specified list of values.
388+
*
389+
* @param attribute The attribute.
390+
* @param values The values.
391+
* @return This DeliveryParameterBuilder with the added operator.
392+
* @see <a href="https://docs.kontent.ai/reference/delivery-api#tag/Filtering-content/filtering-operators">
393+
* More in Filtering operators.</a>
394+
*/
395+
public DeliveryParameterBuilder filterNotIn(String attribute, String... values) {
396+
if (attribute != null) {
397+
nameValuePairs.add(new NameValuePair(String.format("%s%s", attribute, NOT_IN), String.join(",", values)));
398+
}
399+
return this;
400+
}
401+
402+
/**
403+
* Attribute value is not in the specified list of values.
404+
*
405+
* @param attribute The attribute.
406+
* @param values The values.
407+
* @return This DeliveryParameterBuilder with the added operator.
408+
* @see <a href="https://docs.kontent.ai/reference/delivery-api#tag/Filtering-content/filtering-operators">
409+
* More in Filtering operators.</a>
410+
*/
411+
public DeliveryParameterBuilder filterNotIn(String attribute, Collection<String> values) {
412+
return filterNotIn(attribute, values.toArray(new String[0]));
413+
}
414+
336415
/**
337416
* Attribute with an array of values contains the specified value.
338417
*

kontent-delivery/src/test/java/kentico/kontent/delivery/DeliveryParameterBuilderTest.java

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,49 @@ public void testEqualsNullAttr() {
4747
Assert.assertEquals(0, params.size());
4848
}
4949

50+
@Test
51+
public void testNotEqualsNullAttr() {
52+
List<NameValuePair> params = DeliveryParameterBuilder.params().filterNotEquals(null, null).build();
53+
Assert.assertEquals(0, params.size());
54+
}
55+
56+
@Test
57+
public void testNotEquals() {
58+
List<NameValuePair> params = DeliveryParameterBuilder.params().filterNotEquals("foo", "bar").build();
59+
Assert.assertEquals(1, params.size());
60+
Assert.assertEquals("foo[neq]", params.get(0).getName());
61+
Assert.assertEquals("bar", params.get(0).getValue());
62+
}
63+
64+
@Test
65+
public void testEmptyNullAttr() {
66+
List<NameValuePair> params = DeliveryParameterBuilder.params().filterEmpty(null).build();
67+
Assert.assertEquals(0, params.size());
68+
}
69+
70+
@Test
71+
public void testEmpty() {
72+
List<NameValuePair> params = DeliveryParameterBuilder.params().filterEmpty("foo").build();
73+
Assert.assertEquals(1, params.size());
74+
Assert.assertEquals("foo[empty]", params.get(0).getName());
75+
Assert.assertEquals(null, params.get(0).getValue());
76+
}
77+
78+
@Test
79+
public void testNotEmptyNullAttr() {
80+
List<NameValuePair> params = DeliveryParameterBuilder.params().filterNotEmpty(null).build();
81+
Assert.assertEquals(0, params.size());
82+
}
83+
84+
@Test
85+
public void testNotEmpty() {
86+
List<NameValuePair> params = DeliveryParameterBuilder.params().filterNotEmpty("foo").build();
87+
Assert.assertEquals(1, params.size());
88+
Assert.assertEquals("foo[nempty]", params.get(0).getName());
89+
Assert.assertEquals(null, params.get(0).getValue());
90+
}
91+
92+
5093
@Test
5194
public void testLessThan() {
5295
List<NameValuePair> params = DeliveryParameterBuilder.params().filterLessThan("foo", "bar").build();
@@ -136,6 +179,25 @@ public void testInCollection() {
136179
Assert.assertEquals("bar,foobar", params.get(0).getValue());
137180
}
138181

182+
@Test
183+
public void testNotIn() {
184+
List<NameValuePair> params = DeliveryParameterBuilder.params().filterNotIn("foo", "bar", "foobar").build();
185+
Assert.assertEquals(1, params.size());
186+
Assert.assertEquals("foo[nin]", params.get(0).getName());
187+
Assert.assertEquals("bar,foobar", params.get(0).getValue());
188+
}
189+
190+
@Test
191+
public void testNotInCollection() {
192+
List<String> values = new ArrayList<>();
193+
values.add("bar");
194+
values.add("foobar");
195+
List<NameValuePair> params = DeliveryParameterBuilder.params().filterNotIn("foo", values).build();
196+
Assert.assertEquals(1, params.size());
197+
Assert.assertEquals("foo[nin]", params.get(0).getName());
198+
Assert.assertEquals("bar,foobar", params.get(0).getValue());
199+
}
200+
139201
@Test
140202
public void testInNullAttr() {
141203
List<NameValuePair> params = DeliveryParameterBuilder.params().filterIn(null, null, null).build();

0 commit comments

Comments
 (0)