package nl.knaw.huygens.alexandria.api.model.search; /* * #%L * alexandria-api * ======= * Copyright (C) 2015 - 2017 Huygens ING (KNAW) * ======= * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import javax.validation.constraints.Min; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import nl.knaw.huygens.alexandria.api.JsonTypeNames; import nl.knaw.huygens.alexandria.api.model.AlexandriaState; import nl.knaw.huygens.alexandria.api.model.JsonWrapperObject; import nl.knaw.huygens.alexandria.api.model.Prototype; @JsonTypeName(JsonTypeNames.QUERY) public class AlexandriaQuery extends JsonWrapperObject implements Prototype { // find: find(annotation|resource) private String find = "annotation"; // where: field.function(params) // functions: eq(par) - equals // match(par) - match regexp // inSet(par0,par1,...,parn) - equals in set // inRange(par0,par1) - par0 <= value <= par1 private String where = ""; // sort: sort([-|+]field,...) - = descending, default = + = ascending private String sort = "-" + QueryField.when.name(); // return: return(field,...) @JsonProperty("return") private String fields = QueryField.id.name(); private Boolean distinct = false; @Min(1) private int pageSize = 10; public String getFind() { return find; } public AlexandriaQuery setFind(String find) { this.find = find; return this; } public String getWhere() { return where; } public AlexandriaQuery setWhere(String where) { this.where = where; String state = QueryField.state.name(); if (!(where.startsWith(state + ":") || where.contains(") " + state + ":"))) { this.where += " " + state + ":" + QueryFunction.eq.name() + "(\"" + AlexandriaState.CONFIRMED.name() + "\")"; } return this; } public String getSort() { return sort; } public AlexandriaQuery setSort(String sort) { this.sort = sort; return this; } public String getFields() { return fields; } public AlexandriaQuery setReturns(String fields) { this.fields = fields; return this; } public Boolean isDistinct() { return distinct; } public AlexandriaQuery setDistinct(Boolean distinct) { this.distinct = distinct; return this; } public int getPageSize() { return pageSize; } public AlexandriaQuery setPageSize(Integer pageSize) { this.pageSize = pageSize; return this; } }