Created
February 4, 2019 08:42
-
-
Save muffik/e854621eb5b0a2c6fb90f4f767305449 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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