Здравствуйте. Такая проблема. У сущности есть поле var maxLifetime: Long? = null
отображает какой-то период времени в миллисекундах. Сделали datatype:
class DurationDatatype : Datatype<Long?> {
private val formatter: PeriodFormatter = PeriodFormatterBuilder()
.appendDays().appendSuffix("д")
.appendHours().appendSuffix("ч")
.appendMinutes().appendSuffix("м")
.appendSeconds().appendSuffix("с")
// .appendMillis().appendSuffix("мс")
.toFormatter()
override fun format(value: Any?): String {
return when (value) {
is Long -> {
formatter.print(Period(value).normalizedStandard(PeriodType.dayTime()))
}
else -> value?.toString() ?: ""
}
}
override fun format(value: Any?, locale: Locale) = format(value)
override fun parse(value: String?): Long? {
if (value.isNullOrBlank()) return null
try {
return formatter.parsePeriod(value).toStandardDuration().millis
} catch (e: IllegalArgumentException) {
throw ParseException(e.message, 0)
}
}
override fun parse(value: String?, locale: Locale) = parse(value)
}
Добавили его metadata
и полю сущности добавили @MetaProperty(datatype = "duration")
. Все замечательно работает. При вводе в редакторе 1м
в поле сохраняется значение в 60000
и тд. В таблице тоже выводится значения согласно datatype
.
Однако при использовании фильтра тот выдает ошибку о неверном формате числа. Не могли бы вы подсказать что не так и как это можно исправить?