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 query() { TypedQuery query = em.createQuery(queryString(), Object[].class); setParameter(query); return query; } private void setParameter(TypedQuery 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(); } }