Reputation: 487
I have a resource with a few nullable query params. I want to return the relevant entities from the DB (GAE DataStore) Do I have a shorter or prettier way to do it (I'm looking for something like 'set if not null' method) ?
This is my code:
var query: Query<Kind> = ObjectifyService.ofy().load().type(Kind::class.java)
if (name != null) {
query = query.filter("name ==", name)
} else if (gender != null) {
query = query.filter("gender ==", gender)
} else if (address != null) {
query = query.filter("timing ==", address)
}
return query....
}
Upvotes: 1
Views: 546
Reputation: 1167
Unfortunately, there is no such thing in Objectify.
If you have a lot of parameters to use in filter, a popular approach is a builder pattern:
public class QueryBuilder {
public static final Class<Kind> TYPE = Kind.class;
private Query<Kind> query;
public QueryBuilder() {
query = ofy().load().type(TYPE);
}
public QueryBuilder name(String name) {
return setIfNotNull("name", name);
}
public QueryBuilder gender(String gender) {
return setIfNotNull("gender", gender);
}
public QueryBuilder address(String address) {
return setIfNotNull("address", address);
}
public Query<Kind> build() {
return query;
}
private QueryBuilder setIfNotNull(String name, Object value) {
if (value != null) {
query = query.filter(name, value);
}
return this;
}
}
And then:
Query<Kind> query = new QueryBuilder()
.name(name)
.address(address)
.gender(gender)
.build();
Upvotes: 1