Skip to content

Commit

Permalink
ADD : Inputs implementation for JSON and Reflection
Browse files Browse the repository at this point in the history
  • Loading branch information
kishorereddy committed Apr 21, 2019
1 parent 9affb59 commit 22cb6aa
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ operator fun ZonedDateTime.minus(period: Period): ZonedDateTime = this.minus(per
// ********************************************
fun LocalDateTime.format(pattern: String): String = this.format(DateTimeFormatter.ofPattern(pattern))
fun LocalDateTime.toStringMySql(): String = format("yyyy-MM-dd HH:mm:ss")
fun LocalDateTime.toNumeric(): Long = format("yyyyMMddHHmmss").toLong()
fun LocalDateTime.toStringNumeric(sep: String = "-"): String = format("yyyy${sep}MM${sep}dd${sep}HH${sep}mm${sep}ss")

fun ZonedDateTime.format(pattern: String): String = this.format(DateTimeFormatter.ofPattern(pattern))
fun ZonedDateTime.toIdWithRandom(digits:Int = 5): String = format("yyMMddHHmmss").toLong().toString() + Random.digitsN(digits)
fun ZonedDateTime.toStringNumeric(sep: String = "-"): String = format("yyyy${sep}MM${sep}dd${sep}HH${sep}mm${sep}ss")
Expand Down
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()
}
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
}
}
2 changes: 2 additions & 0 deletions src/lib/kotlin/slatekit-tests/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ compileKotlin {
}

repositories {
jcenter()
mavenCentral()
maven { url "http://dl.bintray.com/jetbrains/spek" }
maven { url "https://dl.bintray.com/codehelixinc/slatekit" }
Expand All @@ -41,6 +42,7 @@ dependencies {
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
compile "mysql:mysql-connector-java:5.1.13"
compile 'org.koin:koin-core:2.0.0-rc-2'
//compile "postgresql:postgresql:42.1.1"
compile "postgresql:postgresql:9.1-901-1.jdbc4"
compile 'org.threeten:threetenbp:1.3.8'
Expand Down
3 changes: 3 additions & 0 deletions src/lib/kotlin/slatekit/settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,8 @@ project(':slatekit-workers').projectDir=new File('../slatekit-workers')
include ':slatekit-providers'
project(':slatekit-providers').projectDir=new File('../slatekit-providers')

include ':slatekit-support'
project(':slatekit-support').projectDir=new File('../../../../../slatekit-extra/src/lib/kotlin/slatekit-support')

include ':slatekit-tests'
project(':slatekit-tests').projectDir=new File('../slatekit-tests')
2 changes: 1 addition & 1 deletion src/lib/kotlin/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.9.22
0.9.23

0 comments on commit 22cb6aa

Please sign in to comment.