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<JpqlQueryParam> parameters() {
|
return buildedParameters(queryCriterion);
|
}
|
|
private List<JpqlQueryParam> buildedParameters(JpqlQueryCriterion criterion) {
|
|
List<JpqlQueryParam> 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();
|
}
|
|
}
|