
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
}
data class FaceData(val person: P, val faces: List = emptyList())
interface FaceDataType {
val personClass: Class
val faceClass: Class
}
interface ReadOnlyFaceStore {
val dataType: FaceDataType
fun getPersonIds(): List = emptyList()
fun getPersonIdsAsObservable(): Observable = Observable.from(getPersonIds())
fun getFaceData(personId: String): FaceData? = null
fun getFaceDataAsObservable(personId: String): Observable> = createObservableFromNullable(getFaceData(personId))
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 saveFaceData(faceData: FaceData
) {}
fun deleteFaceData(personId: String) {}
fun deleteFace(personId: String, faceId: String) {}
fun clearFace(personId: String) {}
}
interface FaceStoreChangeListener {
fun onPersonUpdate(person: P) {}
fun onFaceUpdate(personId: String, face: F) {}
fun onFaceDataDelete(personId: String) {}
fun onFaceDelete(personId: String, faceId: String) {}
fun onPersonFaceClear(personId: String) {}
}
abstract class CompositeReadWriteFaceStore(
readOnlyStore: ReadOnlyFaceStore
) : ReadOnlyFaceStore
by readOnlyStore, ReadWriteFaceStore