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<OrderByDefinition> 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<OrderByDefinition> 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();
|
}
|
}
|