package com.megatim.fdxcommons.tools.database.queries.jpql; import com.megatim.fdxcommons.model.enumeration.OrderByType; import com.megatim.fdxcommons.model.pojo.OrderByDefinition; import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryCriterion; import java.util.List; /** * * @author ASUS */ public class JqplQueryString { private final String simpleClassName; private final JpqlQueryCriterion queryCriterion; public JqplQueryString(String simpleClassName, JpqlQueryCriterion queryCriterion) { this.simpleClassName = simpleClassName; this.queryCriterion = queryCriterion; } public String selectQuery(List orderByFields) throws Exception { String classAlias = simpleClassName.toLowerCase().charAt(0) + ""; String selectFromQueryPart = "SELECT " + classAlias + " FROM " + simpleClassName + " " + classAlias + " "; String whereQueryPart = new JpqlWhereQueryString(queryCriterion, classAlias).query(); String query = selectFromQueryPart + " " + whereQueryPart + " " + orderByClause(classAlias, orderByFields); return query; } public String countQuery() throws Exception { String classAlias = simpleClassName.toLowerCase().charAt(0) + ""; String selectFromQueryPart = "SELECT COUNT(*) FROM " + simpleClassName + " " + classAlias + " "; String whereQueryPart = new JpqlWhereQueryString(queryCriterion, classAlias).query(); String query = selectFromQueryPart + " " + whereQueryPart; return query; } private String orderByClause(String classAlias, List orderByFields) { StringBuilder orderBy = new StringBuilder("ORDER BY "); if (orderByFields == null || orderByFields.isEmpty()) { return ""; } for (OrderByDefinition def : orderByFields) { if (def.getFieldName() != null && !def.getFieldName().isEmpty()) { String orderByType = def.getOrderByType() != null ? def.getOrderByType().name() : OrderByType.ASC.name(); orderBy.append(classAlias).append(".").append(def.getFieldName()).append(" ").append(orderByType).append(","); } } orderBy.replace(orderBy.length() - 1, orderBy.length(), "");//retirer la dernière virgule return orderBy.toString(); } }