Match DataModel On Query
This commit is contained in:
parent
40cda05ad4
commit
d7dd858d42
|
@ -1,6 +1,7 @@
|
||||||
package org.hso.texturesyncclient.controller.net
|
package org.hso.texturesyncclient.controller.net
|
||||||
|
|
||||||
import com.google.gson.*
|
import com.google.gson.*
|
||||||
|
import org.hso.texturesyncclient.model.Texture
|
||||||
import java.io.*
|
import java.io.*
|
||||||
import java.lang.RuntimeException
|
import java.lang.RuntimeException
|
||||||
import java.net.*
|
import java.net.*
|
||||||
|
@ -53,7 +54,7 @@ class Connection(val addr: InetAddress, val port: Int = 10796) : Closeable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun query(query : Array<String>) : Array<InternalTexture> {
|
fun query(query : Array<String>) : Array<Texture> {
|
||||||
val io = getStreams()
|
val io = getStreams()
|
||||||
|
|
||||||
val obj = JsonObject()
|
val obj = JsonObject()
|
||||||
|
@ -76,9 +77,11 @@ class Connection(val addr: InetAddress, val port: Int = 10796) : Closeable {
|
||||||
when (pkg) {
|
when (pkg) {
|
||||||
is JsonPacket -> {
|
is JsonPacket -> {
|
||||||
try {
|
try {
|
||||||
return Gson().fromJson<Array<InternalTexture>>(pkg.content, Array<InternalTexture>::class.java)
|
return Gson().fromJson<Array<InternalTexture>>(pkg.content, Array<InternalTexture>::class.java).map {
|
||||||
|
tex -> tex.toTexture()
|
||||||
|
}.toTypedArray()
|
||||||
} catch (e : JsonSyntaxException ){
|
} catch (e : JsonSyntaxException ){
|
||||||
throw ConnectionInvalidJsonException(e)
|
throw ConnectionInvalidJsonException()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is BinaryPacket -> throw ConnectionUnexpectedPacket()
|
is BinaryPacket -> throw ConnectionUnexpectedPacket()
|
||||||
|
|
|
@ -1,14 +1,72 @@
|
||||||
package org.hso.texturesyncclient.controller.net
|
package org.hso.texturesyncclient.controller.net
|
||||||
|
|
||||||
|
import org.hso.texturesyncclient.model.Texture
|
||||||
|
import org.hso.texturesyncclient.model.TextureFormat
|
||||||
|
import java.lang.Exception
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
// These types will be converted to the model.DataModel
|
// These types will be converted to the model.DataModel
|
||||||
|
|
||||||
|
private fun bytes2hexString(bytes: ByteArray): String {
|
||||||
|
val s = StringBuilder(64)
|
||||||
|
for (byte in bytes) {
|
||||||
|
s.append(String.format("%02X"), byte)
|
||||||
|
}
|
||||||
|
return s.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hexString2Bytes(bytes: String): ByteArray {
|
||||||
|
return ByteArray(bytes.length / 2) { i ->
|
||||||
|
bytes.substring(i * 2, i * 2 + 2).toInt(16).toByte()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Suppress("ArrayInDataClass")
|
@Suppress("ArrayInDataClass")
|
||||||
data class InternalTexture(
|
data class InternalTexture(
|
||||||
val id : String,
|
val id: String,
|
||||||
val name : String,
|
val name: String,
|
||||||
val tags : Array<String>,
|
val tags: Array<String>,
|
||||||
val format : String,
|
val format: String,
|
||||||
val resolution: Array<Int>,
|
val resolution: Array<Int>,
|
||||||
val added_on : String,
|
val added_on: Array<Int>,
|
||||||
val texture_hash: String
|
val texture_hash: String
|
||||||
)
|
) {
|
||||||
|
constructor(tex: Texture) : this(
|
||||||
|
id = tex.id.toString(),
|
||||||
|
name = tex.name,
|
||||||
|
tags = tex.tags.clone(),
|
||||||
|
format = when (tex.format) {
|
||||||
|
TextureFormat.PNG -> "png"
|
||||||
|
TextureFormat.JPEG -> "jpeg"
|
||||||
|
},
|
||||||
|
resolution = arrayOf(tex.resolution.first, tex.resolution.second),
|
||||||
|
added_on = arrayOf(
|
||||||
|
tex.addedOn.get(Calendar.YEAR), //
|
||||||
|
tex.addedOn.get(Calendar.MONTH), //
|
||||||
|
tex.addedOn.get(Calendar.DAY_OF_MONTH)
|
||||||
|
),
|
||||||
|
texture_hash = bytes2hexString(tex.textureHash)
|
||||||
|
)
|
||||||
|
|
||||||
|
@Throws(ConnectionException::class)
|
||||||
|
fun toTexture(): Texture {
|
||||||
|
try {
|
||||||
|
return Texture(
|
||||||
|
id = UUID.fromString(id),
|
||||||
|
name = name,
|
||||||
|
tags = tags.clone(),
|
||||||
|
format = when (format.toLowerCase()) {
|
||||||
|
"jpeg" -> TextureFormat.JPEG
|
||||||
|
"jpg" -> TextureFormat.JPEG
|
||||||
|
"png" -> TextureFormat.PNG
|
||||||
|
else -> throw ConnectionInvalidJsonException()
|
||||||
|
},
|
||||||
|
resolution = Pair(resolution[0], resolution[1]),
|
||||||
|
addedOn = GregorianCalendar(added_on[0], added_on[1], added_on[2]),
|
||||||
|
textureHash = hexString2Bytes(texture_hash)
|
||||||
|
)
|
||||||
|
} catch (e: Exception) { // i Know, but no time :[]
|
||||||
|
throw ConnectionInvalidJsonException()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,9 +6,12 @@ import java.lang.Exception
|
||||||
|
|
||||||
|
|
||||||
sealed class ConnectionException(val msg : String) : Exception(msg)
|
sealed class ConnectionException(val msg : String) : Exception(msg)
|
||||||
|
|
||||||
class ConnectionErrorException(val error : ErrorPacket) : ConnectionException("${error.code} ${error.message}")
|
class ConnectionErrorException(val error : ErrorPacket) : ConnectionException("${error.code} ${error.message}")
|
||||||
class ConnectionUnexpectedPacket() : ConnectionException("Got Unexpected Type of Packet")
|
class ConnectionUnexpectedPacket : ConnectionException("Got Unexpected Type of Packet")
|
||||||
class ConnectionInvalidJsonException(val jsonError : JsonSyntaxException) : ConnectionException("The Format of the Json Received is Unexpected.")
|
class ConnectionInvalidJsonException : ConnectionException("The Format of the Json Received is Unexpected.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sealed class PacketException(msg: String) : ConnectionException(msg)
|
sealed class PacketException(msg: String) : ConnectionException(msg)
|
||||||
class PacketTooLongException : PacketException("The Package is too long.")
|
class PacketTooLongException : PacketException("The Package is too long.")
|
||||||
|
|
|
@ -16,6 +16,6 @@ data class Texture(
|
||||||
val tags : Array<String>,
|
val tags : Array<String>,
|
||||||
val format : TextureFormat,
|
val format : TextureFormat,
|
||||||
val resolution : Pair<Int, Int>,
|
val resolution : Pair<Int, Int>,
|
||||||
val addedOn : Date,
|
val addedOn : Calendar,
|
||||||
val textureHash : ByteArray
|
val textureHash : ByteArray
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue