Joel
Joel

Reputation: 487

Objectify - set filter if not null

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

Answers (1)

Eien
Eien

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

Related Questions