-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ADD : Inputs implementation for JSON and Reflection
- Loading branch information
1 parent
9affb59
commit 22cb6aa
Showing
6 changed files
with
129 additions
and
1 deletion.
There are no files selected for viewing
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
63 changes: 63 additions & 0 deletions
63
src/lib/kotlin/slatekit-meta/src/main/kotlin/slatekit/meta/InputsJSON.kt
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
package slatekit.meta | ||
|
||
import org.json.simple.JSONObject | ||
import org.threeten.bp.* | ||
import slatekit.common.* | ||
import slatekit.common.encrypt.Encryptor | ||
|
||
/** | ||
* Used to represent a request that originate from a json file. | ||
* This is useful for automation purposes and replaying an api action from a file source. | ||
* @param json : The JSON object | ||
* @param enc : The encryptor | ||
*/ | ||
data class InputsJSON( | ||
val rawSource: Any, | ||
val enc: Encryptor?, | ||
val json: JSONObject | ||
) : Inputs { | ||
|
||
override fun get(key: String): Any? = getInternal(key) | ||
//override fun getObject(key: String): Any? = getInternal(key) | ||
override fun size(): Int = json.size | ||
|
||
override val raw: Any = json | ||
override fun getString(key: String): String = Strings.decrypt(getInternalString(key).trim()) { it -> enc?.decrypt(it) ?: it } | ||
override fun getBool(key: String): Boolean = Conversions.toBool(getStringRaw(key)) | ||
override fun getShort(key: String): Short = Conversions.toShort(getStringRaw(key)) | ||
override fun getInt(key: String): Int = Conversions.toInt(getStringRaw(key)) | ||
override fun getLong(key: String): Long = Conversions.toLong(getStringRaw(key)) | ||
override fun getFloat(key: String): Float = Conversions.toFloat(getStringRaw(key)) | ||
override fun getDouble(key: String): Double = Conversions.toDouble(getStringRaw(key)) | ||
override fun getInstant(key: String): Instant = Conversions.toInstant(getStringRaw(key)) | ||
override fun getDateTime(key: String): DateTime = Conversions.toDateTime(getStringRaw(key)) | ||
override fun getLocalDate(key: String): LocalDate = Conversions.toLocalDate(getStringRaw(key)) | ||
override fun getLocalTime(key: String): LocalTime = Conversions.toLocalTime(getStringRaw(key)) | ||
override fun getLocalDateTime(key: String): LocalDateTime = Conversions.toLocalDateTime(getStringRaw(key)) | ||
override fun getZonedDateTime(key: String): ZonedDateTime = Conversions.toZonedDateTime(getStringRaw(key)) | ||
override fun getZonedDateTimeUtc(key: String): ZonedDateTime = Conversions.toZonedDateTimeUtc(getStringRaw(key)) | ||
|
||
override fun containsKey(key: String): Boolean { | ||
return json.containsKey(key) | ||
} | ||
|
||
fun getInternal(key: String): Any? { | ||
val value = if (json.containsKey(key)) { | ||
json.get(key) | ||
} else { | ||
null | ||
} | ||
return value | ||
} | ||
|
||
fun getInternalString(key: String): String { | ||
val value = if (json.containsKey(key)) { | ||
json.get(key) ?: "" | ||
} else { | ||
"" | ||
} | ||
return value.toString() | ||
} | ||
|
||
fun getStringRaw(key: String): String = getInternalString(key).trim() | ||
} |
58 changes: 58 additions & 0 deletions
58
src/lib/kotlin/slatekit-meta/src/main/kotlin/slatekit/meta/InputsReflected.kt
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package slatekit.meta | ||
|
||
import org.threeten.bp.* | ||
import slatekit.common.* | ||
import slatekit.common.encrypt.Encryptor | ||
import slatekit.common.ext.atUtc | ||
import kotlin.reflect.KClass | ||
import kotlin.reflect.full.declaredMemberProperties | ||
import kotlin.reflect.full.memberProperties | ||
|
||
/** | ||
* Used to represent a request that originate from a json file. | ||
* This is useful for automation purposes and replaying an api action from a file source. | ||
* @param json : The JSON object | ||
* @param enc : The encryptor | ||
*/ | ||
data class InputsReflected( | ||
val source: Any, | ||
val enc: Encryptor?, | ||
val cls:KClass<*> | ||
) : Inputs { | ||
|
||
private val lookup = cls.memberProperties.map { Pair(it.name, it) }.toMap() | ||
|
||
override fun get(key: String): Any? = getInternal(key) | ||
//override fun getObject(key: String): Any? = getInternal(key) | ||
override fun size(): Int = cls.declaredMemberProperties.size | ||
|
||
override val raw: Any = source | ||
override fun getString(key: String): String = getInternal(key) as String | ||
override fun getBool(key: String): Boolean = getInternal(key) as Boolean | ||
override fun getShort(key: String): Short = getInternal(key) as Short | ||
override fun getInt(key: String): Int = getInternal(key) as Int | ||
override fun getLong(key: String): Long = getInternal(key) as Long | ||
override fun getFloat(key: String): Float = getInternal(key) as Float | ||
override fun getDouble(key: String): Double = getInternal(key) as Double | ||
override fun getInstant(key: String): Instant = getInternal(key) as Instant | ||
override fun getDateTime(key: String): DateTime = getInternal(key) as DateTime | ||
override fun getLocalDate(key: String): LocalDate = getInternal(key) as LocalDate | ||
override fun getLocalTime(key: String): LocalTime = getInternal(key) as LocalTime | ||
override fun getLocalDateTime(key: String): LocalDateTime = getInternal(key) as LocalDateTime | ||
override fun getZonedDateTime(key: String): ZonedDateTime = getInternal(key) as ZonedDateTime | ||
override fun getZonedDateTimeUtc(key: String): ZonedDateTime = (getInternal(key) as ZonedDateTime).atUtc() | ||
|
||
override fun containsKey(key: String): Boolean { | ||
return lookup.containsKey(key) | ||
} | ||
|
||
fun getInternal(key: String): Any? { | ||
val value = if (lookup.containsKey(key)) { | ||
val prop = lookup.get(key) | ||
prop?.getter?.call(source) | ||
} else { | ||
null | ||
} | ||
return value | ||
} | ||
} |
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
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
0.9.22 | ||
0.9.23 |