From 819c74bb57899737c27e1f27bbe925777dbf896b Mon Sep 17 00:00:00 2001 From: Jari Date: Sun, 19 Oct 2025 15:19:14 +0200 Subject: [PATCH] =?UTF-8?q?git=20porcodio=20per=C3=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dtos/validators/EntryHexColorValidator.kt | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100755 src/main/kotlin/org/octopus/internal/web/utils/dtos/validators/EntryHexColorValidator.kt diff --git a/src/main/kotlin/org/octopus/internal/web/utils/dtos/validators/EntryHexColorValidator.kt b/src/main/kotlin/org/octopus/internal/web/utils/dtos/validators/EntryHexColorValidator.kt new file mode 100755 index 0000000..ecca425 --- /dev/null +++ b/src/main/kotlin/org/octopus/internal/web/utils/dtos/validators/EntryHexColorValidator.kt @@ -0,0 +1,41 @@ +package org.octopus.internal.web.utils.dtos.validators + +import jakarta.validation.Constraint +import jakarta.validation.ConstraintValidator +import jakarta.validation.ConstraintValidatorContext +import jakarta.validation.Payload +import org.octopus.internal.common.enums.EEntryType +import kotlin.reflect.KClass + + +class EntryHexColorValidator : ConstraintValidator { + companion object { + private val HEX_COLOR_PATTERN = Regex("^0x([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$") + } + + override fun isValid(value: String?, context: ConstraintValidatorContext): Boolean { + if (value.isNullOrBlank()) { + return false + } + + val isMatched = HEX_COLOR_PATTERN.matches(value) + + if (!isMatched) { + context.disableDefaultConstraintViolation() + context.buildConstraintViolationWithTemplate("Invalid hex color format. Value must be in 0xRRGGBB format.") + .addConstraintViolation() + } + + return isMatched + } + + @Target(AnnotationTarget.FIELD, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER) + @Retention(AnnotationRetention.RUNTIME) + @MustBeDocumented + @Constraint(validatedBy = [EntryHexColorValidator::class]) + annotation class Validate( + val message: String = "", + val groups: Array> = [], + val payload: Array> = [] + ) +} \ No newline at end of file