diff --git a/src/main/kotlin/com/looker/droidify/database/Database.kt b/src/main/kotlin/com/looker/droidify/database/Database.kt index ba6057e6..30ac607d 100644 --- a/src/main/kotlin/com/looker/droidify/database/Database.kt +++ b/src/main/kotlin/com/looker/droidify/database/Database.kt @@ -340,11 +340,11 @@ object Database { return ObservableCursor(this, dataObservable(subject)) } - private fun ByteArray.jsonParse(callback: (JsonParser) -> T): T { + fun ByteArray.jsonParse(callback: (JsonParser) -> T): T { return Json.factory.createParser(this).use { it.parseDictionary(callback) } } - private fun jsonGenerate(callback: (JsonGenerator) -> Unit): ByteArray { + fun jsonGenerate(callback: (JsonGenerator) -> Unit): ByteArray { val outputStream = ByteArrayOutputStream() Json.factory.createGenerator(outputStream).use { it.writeDictionary(callback) } return outputStream.toByteArray() diff --git a/src/main/kotlin/com/looker/droidify/database/DatabaseX.kt b/src/main/kotlin/com/looker/droidify/database/DatabaseX.kt index ed11c6c2..341667cb 100644 --- a/src/main/kotlin/com/looker/droidify/database/DatabaseX.kt +++ b/src/main/kotlin/com/looker/droidify/database/DatabaseX.kt @@ -4,6 +4,7 @@ import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase +import androidx.room.TypeConverters @Database( entities = [ @@ -14,6 +15,7 @@ import androidx.room.RoomDatabase Lock::class ], version = 1 ) +@TypeConverters(Converters::class) abstract class DatabaseX : RoomDatabase() { // TODO add the DAOs for the tables diff --git a/src/main/kotlin/com/looker/droidify/database/Tables.kt b/src/main/kotlin/com/looker/droidify/database/Tables.kt index 6b1e15e1..fb4077e8 100644 --- a/src/main/kotlin/com/looker/droidify/database/Tables.kt +++ b/src/main/kotlin/com/looker/droidify/database/Tables.kt @@ -3,6 +3,9 @@ package com.looker.droidify.database import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey +import androidx.room.TypeConverter +import com.looker.droidify.database.Database.jsonGenerate +import com.looker.droidify.database.Database.jsonParse import com.looker.droidify.entity.Product import com.looker.droidify.entity.ProductItem import com.looker.droidify.entity.Repository @@ -64,4 +67,59 @@ class Lock { var package_name = "" var version_code = 0 +} + +class Converters { + @TypeConverter + fun toRepository(byteArray: ByteArray): Repository { + return byteArray.jsonParse { + Repository.deserialize( + 0,//id, + it + ) + } + } + + @TypeConverter + fun toByteArray(repository: Repository): ByteArray { + return jsonGenerate(repository::serialize) + } + + @TypeConverter + fun toProduct(byteArray: ByteArray): Product { + return byteArray.jsonParse { + Product.deserialize( + 0,//repository_id, + "",//description, + it + ) + } + } + + @TypeConverter + fun toByteArray(product: Product): ByteArray { + return jsonGenerate(product::serialize) + } + + @TypeConverter + fun toProductItem(byteArray: ByteArray): ProductItem { + return byteArray.jsonParse { + ProductItem.deserialize( + 0,//repository_id, + "",//package_name, + "",//name, + "",//summary, + "",//version, + true,//compatible, + true,//canUpdate, + 0,//matchRank, + it + ) + } + } + + @TypeConverter + fun toByteArray(productItem: ProductItem): ByteArray { + return jsonGenerate(productItem::serialize) + } } \ No newline at end of file