protected void applyOrderBy(CriteriaQuery query, OrderBy orderBy) { OrderBy.Item[] items = orderBy.items(); StringBuilder s = new StringBuilder(); for (int i = 0; i < items.length; i++) { if (i > 0) { s.append(','); } OrderBy.Item item = items[i]; String name = item.name(); MApiProperty ap = am.tryGetProperty(name); if (null == ap) { throw new BadRequestException("Property '" + name + "' not exists in model '" + am.getName() + "'"); } if (ap.isNotSortableExplicitly()) { throw new BadRequestException("Property '" + name + "' is not sortable!"); } if (Strings.isNotEmpty(query.alias())) { s.append(query.alias() + "." + name); } else { s.append(name); } if (!item.isAscending()) { s.append(" desc"); } } query.orderBy(s.toString()); }
throw new BadRequestException("Property '" + aggregate.getField() + "' is not aggregatable"); select.add(aggregate.getFunction() + "(" + query.alias() + "." + aggregate.getField() + ") as " + aggregate.getAlias());