package com.megatim.fdxcommons.tools.database.queries.metadata.jpql; import static com.megatim.fdxcommons.model.enumeration.Operateur.BETWEEN; import static com.megatim.fdxcommons.model.enumeration.Operateur.EQUALS; import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_OR_EQUALS_THAN; import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_THAN; import static com.megatim.fdxcommons.model.enumeration.Operateur.IN; import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NOT_NULL; import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NULL; import static com.megatim.fdxcommons.model.enumeration.Operateur.LIKE; import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_OR_EQUALS_THAN; import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_THAN; import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_BETWEEN; import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_EQUALS; import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_IN; import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues; import java.util.ArrayList; import java.util.List; /** * * @author Gabuntu */ public class JpqlWhereQueryParameters { private final JpqlQueryCriterion queryCriterion; public JpqlWhereQueryParameters(JpqlQueryCriterion queryCriterion) { this.queryCriterion = queryCriterion; } public List parameters() { return buildedParameters(queryCriterion); } private List buildedParameters(JpqlQueryCriterion criterion) { List params = new ArrayList<>(); if (criterion == null) { return params; } if (criterion.getSubCriteria().isEmpty()) { switch (criterion.getOperateur()) { case EQUALS: case NOT_EQUALS: case LIKE: case GREATER_OR_EQUALS_THAN: case GREATER_THAN: case LOWER_OR_EQUALS_THAN: case LOWER_THAN: params.add(new JpqlQueryParam(criterion.getNomColonne(), getParameterValue(criterion))); break; case BETWEEN: case NOT_BETWEEN: BetweenOperatorValues betweenOperatorValues = (BetweenOperatorValues) criterion.getCriteriaValue(); params.add(new JpqlQueryParam(criterion.getNomColonne(), betweenOperatorValues.getLowerBound())); params.add(new JpqlQueryParam(criterion.getNomColonne(), betweenOperatorValues.getUpperBound())); break; case NOT_IN: case IN: List values = (List) criterion.getCriteriaValue(); for (Object value : values) { params.add(new JpqlQueryParam(criterion.getNomColonne(), value)); } break; case IS_NOT_NULL: case IS_NULL: break; } } else { for (JpqlQueryCriterion c : criterion.getSubCriteria()) { params.addAll(buildedParameters(c)); } } return params; } private Object getParameterValue(JpqlQueryCriterion criterion) { switch (criterion.getOperateur()) { case LIKE: return "%" + criterion.getCriteriaValue() + "%"; } return criterion.getCriteriaValue(); } }