package org.aplikator.server.data; import java.util.List; import org.aplikator.client.shared.data.PrimaryKey; import org.aplikator.server.descriptor.Collection; import org.aplikator.server.descriptor.SortItem; import org.aplikator.server.descriptor.View; import org.aplikator.server.query.QueryExpression; /** * */ public class QueryBuilder { private final View view; private final Context ctx; private QueryExpression queryExpression = null; private SortItem[] sortItems = null; private String searchString = null; private Collection ownerProperty = null; private PrimaryKey ownerPrimaryKey = null; private int pageOffset = 0; private int pageSize = 0; QueryBuilder(Context ctx, View view) { this.ctx = ctx; this.view = view; } public QueryBuilder withOwner(Collection ownerProperty, PrimaryKey ownerPrimaryKey) { this.ownerProperty = ownerProperty; this.ownerPrimaryKey = ownerPrimaryKey; return this; } public QueryBuilder withQuery(QueryExpression queryExpression) { this.queryExpression = queryExpression; return this; } public QueryBuilder withSort(SortItem... sortItems) { this.sortItems = sortItems; return this; } public QueryBuilder withSortFromValue(String searchString, SortItem... sortItems) { this.sortItems = sortItems; this.searchString = searchString; return this; } public QueryBuilder withDefaultSort() { if (this.view.getDefaultSortDescriptor() != null) { List<SortItem> viewSort = this.view.getDefaultSortDescriptor().getItems(); this.sortItems = viewSort.toArray(new SortItem[viewSort.size()]); } return this; } public QueryBuilder limitPage(int pageOffset, int pageSize) { this.pageOffset = pageOffset; this.pageSize = pageSize; return this; } public List<Record> list() { return ctx.getAplikatorServiceBackend().getRecords(view, queryExpression, sortItems, searchString, ownerProperty, ownerPrimaryKey, pageOffset, pageSize, ctx); } public int count() { return ctx.getAplikatorServiceBackend().getRecordCount(view, queryExpression, sortItems, searchString, ownerProperty, ownerPrimaryKey, ctx); } }