package com.megatim.fdxconsultation.dao.impl.log.util;
|
|
import com.megatim.fdxconsultation.model.log.dtos.ApiUserActionSummarySearch;
|
import javax.persistence.EntityManager;
|
import javax.persistence.TypedQuery;
|
|
/**
|
*
|
* @author Gabuntu
|
*/
|
public class QueryExtendsWithApiUserActionSummarySearch {
|
|
private final ApiUserActionSummarySearch apiUserActionSummarySearch;
|
private final String selectQueryString;
|
private final String whereQueryString;
|
private final String groupQueryString;
|
private final EntityManager em;
|
|
public QueryExtendsWithApiUserActionSummarySearch(
|
ApiUserActionSummarySearch apiUserActionSummarySearch,
|
EntityManager em,
|
String selectQueryString,
|
String whereQueryString,
|
String groupQueryString) {
|
|
this.apiUserActionSummarySearch = apiUserActionSummarySearch;
|
this.selectQueryString = selectQueryString;
|
this.whereQueryString = whereQueryString;
|
this.groupQueryString = groupQueryString;
|
this.em = em;
|
}
|
|
public TypedQuery<Object[]> query() {
|
|
TypedQuery<Object[]> query = em.createQuery(queryString(), Object[].class);
|
setParameter(query);
|
return query;
|
}
|
|
private void setParameter(TypedQuery<Object[]> query) {
|
|
if (apiUserActionSummarySearch.getParticipant() != null) {
|
query.setParameter("participant", apiUserActionSummarySearch.getParticipant().getCode());
|
}
|
|
if (apiUserActionSummarySearch.getDateDebut() != null) {
|
query.setParameter("dateDebut", apiUserActionSummarySearch.getDateDebut());
|
}
|
|
if (apiUserActionSummarySearch.getDateFin() != null) {
|
query.setParameter("dateFin", apiUserActionSummarySearch.getDateFin().toLocalDate().atTime(23, 59, 59));
|
}
|
|
}
|
|
private String queryString() {
|
|
StringBuilder stringBuilder = new StringBuilder(selectQueryString);
|
|
boolean result = withWhereString();
|
if (result) {
|
stringBuilder.append(" ").append(whereQueryString);
|
}
|
|
if (apiUserActionSummarySearch.getParticipant() != null) {
|
if (result) {
|
stringBuilder.append(" AND ");
|
} else {
|
stringBuilder.append(" WHERE ");
|
}
|
|
stringBuilder.append("u.userName = :participant");
|
result = true;
|
}
|
|
if (apiUserActionSummarySearch.getDateDebut() != null) {
|
if (result) {
|
stringBuilder.append(" AND ");
|
} else {
|
stringBuilder.append(" WHERE ");
|
}
|
|
stringBuilder.append("u.dateAction >= :dateDebut");
|
result = true;
|
}
|
|
if (apiUserActionSummarySearch.getDateFin() != null) {
|
if (result) {
|
stringBuilder.append(" AND ");
|
} else {
|
stringBuilder.append(" WHERE ");
|
}
|
|
stringBuilder.append("u.dateAction <= :dateFin");
|
}
|
|
stringBuilder.append(" ").append(groupQueryString);
|
|
return stringBuilder.toString();
|
}
|
|
private boolean withWhereString() {
|
return whereQueryString != null && !whereQueryString.isEmpty();
|
}
|
|
}
|