Skip to content

Instantly share code, notes, and snippets.

@muffik
Created February 4, 2019 08:42
Show Gist options
  • Save muffik/e854621eb5b0a2c6fb90f4f767305449 to your computer and use it in GitHub Desktop.
Save muffik/e854621eb5b0a2c6fb90f4f767305449 to your computer and use it in GitHub Desktop.
package ru.brbpm.tnuzdo.utils;
import ru.blogic20.gp.services.list.api.query.Operation;
import ru.blogic20.gp.services.list.api.query.Query;
import ru.blogic20.gp.services.list.api.query.QueryCondition;
import ru.brbpm.tnuzdo.dto.DateInterval;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
/**
* Вспомогательные методы для работы с {@link Query}.
*/
public class QueryUtils {
private QueryUtils() {
}
/**
* Добавление условий поиска по заданному полю.
*
* @param query Объект условий
* @param field Имя поля
* @param value Значение поля
*/
public static void addCondition(Query query, String field, Object value) {
if (value == null) {
// добавление условия проверки на пустое значение атрибута
query.addCondition(new QueryCondition(field, Operation.IS_NULL));
} else if (value instanceof DateInterval) {
DateInterval interval = (DateInterval) value;
if (interval.getBegin() != null) {
query.addCondition(new QueryCondition(field, Operation.GE,
DateFormatters.midnight(interval.getBegin())));
}
if (interval.getEnd() != null) {
query.addCondition(new QueryCondition(field, Operation.LT,
DateFormatters.addFullDay(interval.getEnd())));
}
} else if (value instanceof Date) {
// получение начала дня для заданной даты
Date dateBegin = DateFormatters.midnight((Date) value);
// получение следующего дня
Date dateNext = DateFormatters.addFullDay(dateBegin);
// добавление условий вхождения искомой даты в интервал от начала до конца дня
query.addCondition(new QueryCondition(field, Operation.GE, dateBegin));
query.addCondition(new QueryCondition(field, Operation.LT, dateNext));
} else if (value instanceof Collection) {
// добавление условия вхождения в список
query.addCondition(new QueryCondition(field, Operation.EQ, ((Collection<?>) value)
.toArray(new Serializable[0])));
} else if (value.getClass().isArray()) {
// добавление условия вхождения в список
query.addCondition(new QueryCondition(field, Operation.EQ, (Serializable[]) value));
} else {
// добавление простого условия равенства
query.addCondition(new QueryCondition(field, Operation.EQ, (Serializable) value));
}
}
/**
* Формирование запроса.
*
* @param fieldValues Список значений полей
* @return Объект условий запроса
*/
public static Query buildQuery(Map<String, Object> fieldValues) {
Query query = new Query();
for (Map.Entry<String, Object> fieldValue : fieldValues.entrySet()) {
addCondition(query, fieldValue.getKey(), fieldValue.getValue());
}
return query;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment