Skip to content

Commit 1807629

Browse files
yuremmyurem
andauthored
feat: allow to use like with lower together (#2944)
Co-authored-by: Yuriy Movchan <Yuriy.Movchan@gmail.com>
1 parent 864691d commit 1807629

File tree

4 files changed

+41
-8
lines changed

4 files changed

+41
-8
lines changed

jans-orm/couchbase-sample/src/main/java/io/jans/orm/couchbase/CouchbaseSample.java

+16
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,22 @@ public static void main(String[] args) {
4949
newUser.getCustomAttributes().add(new CustomObjectAttribute("test", "test_value"));
5050
couchbaseEntryManager.persist(newUser);
5151

52+
// Find all with lower and or filters
53+
Filter orFilterWithLower = Filter.createORFilter(Filter.createEqualityFilter(Filter.createLowercaseFilter("description"), "test1"),
54+
Filter.createEqualityFilter(Filter.createLowercaseFilter("description"), "test2"));
55+
List<SimpleUser> usersWithOrFilter = couchbaseEntryManager.findEntries("ou=sessions,o=gluu", SimpleUser.class, orFilterWithLower);
56+
for (SimpleUser user : usersWithOrFilter) {
57+
LOG.info("User with uid: '{}' with DN: '{}'", user.getUserId(), user.getDn());
58+
}
59+
60+
// Find all with lower and or filters
61+
Filter orFilterWithLower2 = Filter.createORFilter(Filter.createSubstringFilter(Filter.createLowercaseFilter("description"), null, new String[] { "test1" }, null),
62+
Filter.createSubstringFilter(Filter.createLowercaseFilter("displayName"), null, new String[] { "test1" }, null));
63+
List<SimpleUser> usersWithOrFilter2 = couchbaseEntryManager.findEntries("ou=sessions,o=gluu", SimpleUser.class, orFilterWithLower2);
64+
for (SimpleUser user : usersWithOrFilter2) {
65+
LOG.info("User with uid: '{}' with DN: '{}'", user.getUserId(), user.getDn());
66+
}
67+
5268
// Find all users which have specified object classes defined in SimpleUser
5369
List<SimpleUser> users = couchbaseEntryManager.findEntries("ou=people,o=jans", SimpleUser.class, null);
5470
for (SimpleUser user : users) {

jans-orm/couchbase/src/main/java/io/jans/orm/couchbase/impl/CouchbaseFilterConverter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public ConvertedExpression convertToCouchbaseFilter(Filter genericFilter, Map<St
102102
canJoinOrFilters = false;
103103
continue;
104104
}
105-
105+
106106
if (tmpFilter.getMultiValued() != null) {
107107
canJoinOrFilters = false;
108108
continue;

jans-orm/filter/src/main/java/io/jans/orm/search/filter/Filter.java

+21-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.List;
1010

1111
import io.jans.orm.util.ArrayHelper;
12+
import io.jans.orm.util.StringHelper;
1213

1314
/**
1415
* Simple filter without dependency to specific persistence filter mechanism
@@ -205,6 +206,10 @@ public final void setSubFinal(String subFinal) {
205206
this.subFinal = subFinal;
206207
}
207208

209+
protected void setMultiValued(Boolean multiValued) {
210+
this.multiValued = multiValued;
211+
}
212+
208213
public final Boolean getMultiValued() {
209214
return multiValued;
210215
}
@@ -271,22 +276,22 @@ public String toString() {
271276
return sb.append(this.filters[0].toString()).append(this.type.getSign()).append(this.assertionValue).append(')')
272277
.toString();
273278
} else {
274-
return sb.append(this.attributeName).append(this.type.getSign()).append(this.assertionValue).append(')')
279+
return sb.append(toStringAttributeName()).append(this.type.getSign()).append(this.assertionValue).append(')')
275280
.toString();
276281
}
277282
}
278283

279284
if (FilterType.PRESENCE == this.type) {
280-
return sb.append(this.attributeName).append("=").append(this.type.getSign()).append(')').toString();
285+
return sb.append(toStringAttributeName()).append("=").append(this.type.getSign()).append(')').toString();
281286
}
282287

283288
if (FilterType.APPROXIMATE_MATCH == this.type) {
284-
return sb.append(this.attributeName).append(this.type.getSign()).append("=").append(this.assertionValue)
289+
return sb.append(toStringAttributeName()).append(this.type.getSign()).append("=").append(this.assertionValue)
285290
.append(')').toString();
286291
}
287292

288293
if (FilterType.SUBSTRING == this.type) {
289-
sb.append(this.attributeName).append(this.type.getSign());
294+
sb.append(toStringAttributeName()).append(this.type.getSign());
290295
if (this.subInitial != null) {
291296
sb.append(this.subInitial);
292297
sb.append('*');
@@ -314,4 +319,16 @@ public String toString() {
314319
return super.toString();
315320
}
316321

322+
private String toStringAttributeName() {
323+
if (StringHelper.isNotEmpty(this.attributeName)) {
324+
return this.attributeName;
325+
}
326+
327+
if (ArrayHelper.isNotEmpty(this.filters)) {
328+
return this.filters[0].toString();
329+
}
330+
331+
return "";
332+
}
333+
317334
}

jans-orm/filter/src/main/java/io/jans/orm/search/filter/FilterProcessor.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ public Filter excludeFilter(Filter genericFilter, Filter... excludeFilters) {
4343
return null;
4444
}
4545

46-
Filter resultFilter = new Filter(type, resultFilters.toArray(new Filter[0]));
47-
resultFilter.setAssertionValue(genericFilter.getAssertionValue());
48-
46+
Filter resultFilter = genericFilter.clone();
47+
resultFilter.setFilters(resultFilters.toArray(new Filter[0]));
48+
4949
return resultFilter;
5050
}
5151

0 commit comments

Comments
 (0)