
com.github.charleslzq.facestore.FaceStore.kt Maven / Gradle / Ivy
Show all versions of face-store Show documentation
package com.github.charleslzq.facestore
import org.joda.time.LocalDateTime
import rx.Observable
/**
* Created by charleslzq on 18-2-28.
*/
fun createObservableFromNullable(data: T?): Observable = Observable.create {
data?.run { it.onNext(this) }
it.onCompleted()
}
fun createObservableFromNullable(generator: () -> T?): Observable = Observable.create {
generator()?.run { it.onNext(this) }
it.onCompleted()
}
interface Meta {
val id: String
val createTime: LocalDateTime
val updateTime: LocalDateTime
}
interface ReadOnlyFaceStore {
val personClass: Class
val faceClass: Class
fun getPersonIds(): List = emptyList()
fun getPersonIdsAsObservable(): Observable = Observable.from(getPersonIds())
fun getPerson(personId: String): P? = null
fun getPersonAsObservable(personId: String): Observable = createObservableFromNullable(getPerson(personId))
fun getFaceIdList(personId: String): List = emptyList()
fun getFaceIdListAsObservable(personId: String): Observable = Observable.from(getFaceIdList(personId))
fun getFace(personId: String, faceId: String): F? = null
fun getFaceAsObservable(personId: String, faceId: String): Observable = createObservableFromNullable(getFace(personId, faceId))
}
interface ReadWriteFaceStore : ReadOnlyFaceStore
{
fun savePerson(person: P) {}
fun saveFace(personId: String, face: F) {}
fun deletePerson(personId: String) {}
fun deleteFace(personId: String, faceId: String) {}
}
interface FaceStoreChangeListener {
fun onPersonUpdate(person: P) {}
fun onFaceUpdate(personId: String, face: F) {}
fun onPersonDelete(personId: String) {}
fun onFaceDelete(personId: String, faceId: String) {}
}
interface ListenableReadWriteFaceStore : ReadWriteFaceStore
{
val listeners: MutableList>
}
abstract class CompositeReadWriteFaceStore(
readOnlyStore: ReadOnlyFaceStore
) : ReadOnlyFaceStore
by readOnlyStore, ReadWriteFaceStore