
com.simiacryptus.jopenai.proxy.ValidatedObject.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jo-penai Show documentation
Show all versions of jo-penai Show documentation
A Java client for OpenAI's API
The newest version!
package com.simiacryptus.jopenai.proxy
import com.simiacryptus.util.JsonUtil.toJson
import org.slf4j.LoggerFactory
import kotlin.reflect.full.memberProperties
interface ValidatedObject {
fun validate(): String? = validateFields(this)
class ValidationError(message: String, val obj: Any) : RuntimeException(
"""
Error validating object:
```text
${message}
|```
|
|```json
|${toJson(obj)}
|```
""".trimMargin()
)
companion object {
private val logger = LoggerFactory.getLogger(ValidatedObject::class.java)
fun validateFields(obj: Any): String? {
logger.debug("Starting validation for object: ${obj.javaClass.name}")
obj.javaClass.declaredFields.forEach { field ->
field.isAccessible = true
val value = field.get(obj)
logger.debug("Validating field: ${field.name} with value: $value")
if (value is ValidatedObject) {
val validate = value.validate()
logger.warn("Validation failed for field: ${field.name} with message: $validate")
if (null != validate) return validate
}
// If the property is a list, validate each element
if (value is List<*>) {
value.forEach {
logger.debug("Validating list element: $it")
if (it is ValidatedObject) {
val validate = it.validate()
logger.warn("Validation failed for list element with message: $validate")
if (null != validate) return validate
}
}
}
}
obj.javaClass.kotlin.memberProperties.forEach { property ->
val value = property.getter.call(obj)
logger.debug("Validating property: ${property.name} with value: $value")
if (value is ValidatedObject) {
val validate = value.validate()
logger.warn("Validation failed for property: ${property.name} with message: $validate")
if (null != validate) return validate
}
// If the property is a list, validate each element
if (value is List<*>) {
value.forEach {
logger.debug("Validating list element: $it")
if (it is ValidatedObject) {
val validate = it.validate()
logger.warn("Validation failed for list element with message: $validate")
if (null != validate) return validate
}
}
}
}
logger.debug("Validation completed successfully for object: ${obj.javaClass.name}")
return null
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy