|
class SharedChamberPropertyDelegate<T>( |
|
private val sharedChamber: SharedChamber<Any>, |
|
private val defaultValue: T, |
|
private val getter: SharedChamber<Any>.(String, T) -> T, |
|
private val setter: SharedChamber<Any>.(String, T) -> Unit |
|
) : ReadWriteProperty<Any, T> { |
|
|
|
|
|
override fun getValue(thisRef: Any, property: KProperty<*>): T = |
|
sharedChamber.getter(property.name, defaultValue) |
|
|
|
override fun setValue(thisRef: Any, property: KProperty<*>, value: T) { |
|
sharedChamber.setter(property.name, value) |
|
} |
|
} |
|
|
|
fun SharedChamber<Any>.booleanDelegate(defaultValue: Boolean = false): ReadWriteProperty<Any, Boolean> = |
|
SharedChamberPropertyDelegate( |
|
sharedChamber = this, |
|
defaultValue = defaultValue, |
|
getter = SharedChamber<Any>::getBoolean, |
|
setter = SharedChamber<Any>::put |
|
) |
|
|
|
fun SharedChamber<Any>.intDelegate(defaultValue: Int = 0): ReadWriteProperty<Any, Int> = |
|
SharedChamberPropertyDelegate( |
|
sharedChamber = this, |
|
defaultValue = defaultValue, |
|
getter = SharedChamber<Any>::getInt, |
|
setter = SharedChamber<Any>::put |
|
) |
|
|
|
fun SharedChamber<Any>.longDelegate(defaultValue: Long = 0L): ReadWriteProperty<Any, Long> = |
|
SharedChamberPropertyDelegate( |
|
sharedChamber = this, |
|
defaultValue = defaultValue, |
|
getter = SharedChamber<Any>::getLong, |
|
setter = SharedChamber<Any>::put |
|
) |
|
|
|
fun SharedChamber<Any>.floatDelegate(defaultValue: Float = 0f): ReadWriteProperty<Any, Float> = |
|
SharedChamberPropertyDelegate( |
|
sharedChamber = this, |
|
defaultValue = defaultValue, |
|
getter = SharedChamber<Any>::getFloat, |
|
setter = SharedChamber<Any>::put |
|
) |
|
|
|
fun SharedChamber<Any>.stringDelegate(defaultValue: String? = null): ReadWriteProperty<Any, String?> = |
|
SharedChamberPropertyDelegate( |
|
sharedChamber = this, |
|
defaultValue = defaultValue, |
|
getter = SharedChamber<Any>::getString, |
|
setter = SharedChamber<Any>::put |
|
) |
|
|
|
fun SharedChamber<Any>.dateDelegate(defaultValue: Date? = null): ReadWriteProperty<Any, Date?> = |
|
SharedChamberPropertyDelegate( |
|
sharedChamber = this, |
|
defaultValue = defaultValue, |
|
getter = SharedChamber<Any>::getDate, |
|
setter = SharedChamber<Any>::put |
|
) |
|
|
|
fun SharedChamber<Any>.getDate(key: String, defaultValue: Date? = null): Date? = |
|
getLong(key, -1).let { |
|
if (it >= 0) Date(it) else defaultValue |
|
} |
|
|
|
fun SharedChamber<Any>.put(key: String, value: Date? = null) = |
|
if (value != null) { |
|
put(key, value.time) |
|
} else { |
|
remove(key) |
|
} |