diff --git a/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/FilterField.java b/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/FilterField.java index f5c58bb..b4e1752 100644 --- a/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/FilterField.java +++ b/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/FilterField.java @@ -8,6 +8,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; +import java.time.LocalDate; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -177,6 +178,11 @@ private Object castToType(Object field) { return field; } return new Date(Long.parseLong(field.toString())); + case LocalDate: + if(field instanceof LocalDate) { + return field; + } + return LocalDate.parse(field.toString()); case Boolean: return Boolean.parseBoolean(field.toString()); case Object: diff --git a/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/dsl/FilterFieldsBuilder.kt b/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/dsl/FilterFieldsBuilder.kt index b2b8e10..98a7d31 100644 --- a/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/dsl/FilterFieldsBuilder.kt +++ b/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/dsl/FilterFieldsBuilder.kt @@ -5,6 +5,7 @@ import dev.krud.crudframework.modelfilter.FilterField import dev.krud.crudframework.modelfilter.dsl.annotation.FilterFieldDsl import dev.krud.crudframework.modelfilter.enums.FilterFieldDataType import dev.krud.crudframework.modelfilter.enums.FilterFieldOperation +import java.time.LocalDate import java.util.Date import java.util.UUID import kotlin.reflect.KProperty @@ -76,6 +77,15 @@ class FilterFieldsBuilder(private val filterFields: ) } + infix fun KProperty1.Equal(target: LocalDate) { + filterFields += FilterField( + effectiveName, + FilterFieldOperation.Equal, + FilterFieldDataType.LocalDate, + target + ) + } + infix fun > KProperty1.Equal(target: EnumType) { filterFields += FilterField( effectiveName, @@ -157,6 +167,15 @@ class FilterFieldsBuilder(private val filterFields: ) } + infix fun KProperty1.NotEqual(target: LocalDate) { + filterFields += FilterField( + effectiveName, + FilterFieldOperation.NotEqual, + FilterFieldDataType.LocalDate, + target + ) + } + infix fun > KProperty1.NotEqual(target: EnumType) { filterFields += FilterField( effectiveName, @@ -220,6 +239,15 @@ class FilterFieldsBuilder(private val filterFields: ) } + infix fun KProperty1.GreaterThan(target: LocalDate) { + filterFields += FilterField( + effectiveName, + FilterFieldOperation.GreaterThan, + FilterFieldDataType.LocalDate, + target + ) + } + infix fun KProperty1.GreaterOrEqual(target: Int) { filterFields += FilterField( effectiveName, @@ -256,6 +284,15 @@ class FilterFieldsBuilder(private val filterFields: ) } + infix fun KProperty1.GreaterOrEqual(target: LocalDate) { + filterFields += FilterField( + effectiveName, + FilterFieldOperation.GreaterEqual, + FilterFieldDataType.LocalDate, + target + ) + } + infix fun KProperty1.LowerThan(target: Int) { filterFields += FilterField( effectiveName, @@ -292,6 +329,15 @@ class FilterFieldsBuilder(private val filterFields: ) } + infix fun KProperty1.LowerThan(target: LocalDate) { + filterFields += FilterField( + effectiveName, + FilterFieldOperation.LowerThan, + FilterFieldDataType.LocalDate, + target + ) + } + infix fun KProperty1.LowerOrEqual(target: Int) { filterFields += FilterField( effectiveName, @@ -328,6 +374,15 @@ class FilterFieldsBuilder(private val filterFields: ) } + infix fun KProperty1.LowerOrEqual(target: LocalDate) { + filterFields += FilterField( + effectiveName, + FilterFieldOperation.LowerEqual, + FilterFieldDataType.LocalDate, + target + ) + } + @JvmName("stringRequireIn") infix fun KProperty1.RequireIn(target: Collection) { if (target.isEmpty()) { @@ -373,6 +428,15 @@ class FilterFieldsBuilder(private val filterFields: } } + @JvmName("localDateRequireIn") + infix fun KProperty1.RequireIn(target: Collection) { + if (target.isEmpty()) { + noop() + } else { + this.In(target) + } + } + @JvmName("enumRequireIn") infix fun > KProperty1.RequireIn(target: Collection) { if (target.isEmpty()) { @@ -436,6 +500,15 @@ class FilterFieldsBuilder(private val filterFields: } } + @JvmName("localDateRequireNotIn") + infix fun KProperty1.RequireNotIn(target: Collection) { + if (target.isEmpty()) { + noop() + } else { + this.NotIn(target) + } + } + @JvmName("enumRequireNotIn") infix fun > KProperty1.RequireNotIn(target: Collection) { if (target.isEmpty()) { @@ -504,6 +577,16 @@ class FilterFieldsBuilder(private val filterFields: ) } + @JvmName("localDateIn") + infix fun KProperty1.In(target: Collection) { + filterFields += FilterField( + effectiveName, + FilterFieldOperation.In, + FilterFieldDataType.LocalDate, + *target.toTypedArray() + ) + } + @JvmName("enumIn") infix fun > KProperty1.In(target: Collection) { filterFields += FilterField( @@ -574,6 +657,16 @@ class FilterFieldsBuilder(private val filterFields: ) } + @JvmName("localDateNotIn") + infix fun KProperty1.NotIn(target: Collection) { + filterFields += FilterField( + effectiveName, + FilterFieldOperation.NotIn, + FilterFieldDataType.LocalDate, + *target.toTypedArray() + ) + } + @JvmName("enumNotIn") infix fun > KProperty1.NotIn(target: Collection) { filterFields += FilterField( @@ -610,6 +703,10 @@ class FilterFieldsBuilder(private val filterFields: return BetweenBuilder(effectiveName, target, FilterFieldDataType.Date) } + infix fun KProperty1.Between(target: LocalDate): BetweenBuilder { + return BetweenBuilder(effectiveName, target, FilterFieldDataType.LocalDate) + } + infix fun KProperty1.isNull(condition: Boolean) { when (condition) { true -> filterFields += FilterField( diff --git a/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/enums/FilterFieldDataType.java b/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/enums/FilterFieldDataType.java index 018f868..0eb0d6a 100644 --- a/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/enums/FilterFieldDataType.java +++ b/crud-framework-core/src/main/java/dev/krud/crudframework/modelfilter/enums/FilterFieldDataType.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import java.math.BigInteger; +import java.time.LocalDate; import java.util.Date; import java.util.EnumSet; import java.util.HashMap; @@ -15,6 +16,7 @@ public enum FilterFieldDataType { Double(java.lang.Double.class), Boolean(java.lang.Boolean.class), Date(java.util.Date.class), + LocalDate(java.time.LocalDate.class), Object(java.lang.Object.class), Enum(java.lang.Enum.class), UUID(java.util.UUID.class), @@ -54,6 +56,8 @@ public static FilterFieldDataType get(Class clazz) { return FilterFieldDataType.Double; } else if (java.util.Date.class.equals(clazz)) { return FilterFieldDataType.Date; + } else if (java.time.LocalDate.class.equals(clazz)) { + return FilterFieldDataType.LocalDate; } else if (boolean.class.equals(clazz) || Boolean.class.equals(clazz)) { return FilterFieldDataType.Boolean; } else if (Enum.class.isAssignableFrom(clazz)) {