package org.zstack.header.query;
import org.zstack.header.message.APIParam;
import org.zstack.header.message.APISyncCallMessage;
import java.util.ArrayList;
import java.util.List;
public abstract class APIQueryMessage extends APISyncCallMessage {
@APIParam
private List<QueryCondition> conditions;
private Integer limit = 1000;
private Integer start;
private boolean count;
private String groupBy;
private boolean replyWithCount;
private String sortBy;
@APIParam(required = false, validValues = {"asc", "desc"})
private String sortDirection = "asc";
private List<String> fields;
public String getGroupBy() {
return groupBy;
}
public void setGroupBy(String groupBy) {
this.groupBy = groupBy;
}
public List<QueryCondition> getConditions() {
if (conditions == null) {
conditions = new ArrayList<QueryCondition>();
}
return conditions;
}
public List<String> getFields() {
return fields;
}
public void setFields(List<String> fields) {
this.fields = fields;
}
public String getSortBy() {
return sortBy;
}
public void setSortBy(String sortBy) {
this.sortBy = sortBy;
}
public String getSortDirection() {
return sortDirection;
}
public void setSortDirection(String sortDirection) {
this.sortDirection = sortDirection;
}
public boolean isReplyWithCount() {
return replyWithCount;
}
public void setReplyWithCount(boolean replyWithCount) {
this.replyWithCount = replyWithCount;
}
public void setConditions(List<QueryCondition> conditions) {
this.conditions = conditions;
}
public Integer getLimit() {
return limit;
}
public void setLimit(Integer limit) {
this.limit = limit;
}
public Integer getStart() {
return start;
}
public void setStart(Integer start) {
this.start = start;
}
public void addQueryCondition(String name, String op, String... vals) {
QueryCondition qc = new QueryCondition();
qc.setName(name);
qc.setOp(op);
if (vals.length == 1) {
qc.setValue(vals[0]);
} else {
qc.setValues(vals);
}
getConditions().add(qc);
}
// internal use for test
public void addQueryCondition(String name, QueryOp op, String... vals) {
addQueryCondition(name, op.toString(), vals);
}
public void addField(String name) {
if (fields == null) {
fields = new ArrayList<String>();
}
fields.add(name);
}
public boolean isFieldQuery() {
return fields != null && !fields.isEmpty();
}
public boolean isCount() {
return count;
}
public void setCount(boolean count) {
this.count = count;
}
}