package com.ctp.cdi.query.builder.postprocessor; import javax.persistence.metamodel.SingularAttribute; import com.ctp.cdi.query.builder.OrderDirection; import com.ctp.cdi.query.builder.QueryBuilder; import com.ctp.cdi.query.handler.QueryStringPostProcessor; public class OrderByQueryStringPostProcessor implements QueryStringPostProcessor { private static final String ORDER_BY = " order by "; private final String attribute; private OrderDirection direction; public OrderByQueryStringPostProcessor(SingularAttribute<?, ?> attribute, OrderDirection direction) { this.attribute = attribute.getName(); this.direction = direction; } public OrderByQueryStringPostProcessor(String attribute, OrderDirection direction) { this.attribute = attribute; this.direction = direction; } @Override public String postProcess(String queryString) { StringBuilder builder = new StringBuilder(queryString); if (queryString.contains(ORDER_BY)) { builder.append(","); } else { builder.append(ORDER_BY); } return builder.append(QueryBuilder.ENTITY_NAME).append(".").append(attribute) .append(" ").append(direction) .toString(); } public boolean matches(SingularAttribute<?, ?> attribute) { return matches(attribute.getName()); } public boolean matches(String attribute) { return this.attribute.equals(attribute); } public void changeDirection() { direction = direction.change(); } }