Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package fr.free.nrw.commons.wikidata.json

import com.google.gson.TypeAdapter
import com.google.gson.stream.JsonReader
import com.google.gson.stream.JsonToken
import com.google.gson.stream.JsonWriter
import fr.free.nrw.commons.wikidata.model.page.Namespace
import java.io.IOException
Expand All @@ -14,13 +13,5 @@ class NamespaceTypeAdapter : TypeAdapter<Namespace>() {
}

@Throws(IOException::class)
override fun read(reader: JsonReader): Namespace {
if (reader.peek() == JsonToken.STRING) {
// Prior to 3210ce44, we marshaled Namespace as the name string of the enum, instead of
// the code number. This introduces a backwards-compatible check for the string value.
// TODO: remove after April 2017, when all older namespaces have been deserialized.
return Namespace.valueOf(reader.nextString())
}
return Namespace.of(reader.nextInt())
}
override fun read(reader: JsonReader): Namespace = Namespace.of(reader.nextInt())
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,12 @@
package fr.free.nrw.commons.wikidata.model

import android.util.SparseArray

class EnumCodeMap<T>(
enumeration: Class<T>,
) where T : Enum<T>, T : EnumCode {
private val map: SparseArray<T>

init {
map = codeToEnumMap(enumeration)
}

operator fun get(code: Int): T = map.get(code) ?: throw IllegalArgumentException("code=$code")
private val map: HashMap<Int, T> =
enumeration.enumConstants.associateByTo(HashMap()) { it.code() }

private fun codeToEnumMap(enumeration: Class<T>): SparseArray<T> {
val ret = SparseArray<T>()
for (value in enumeration.enumConstants) {
ret.put(value.code(), value)
}
return ret
}
operator fun get(code: Int): T = map[code] ?: throw IllegalArgumentException("code=$code")

fun size(): Int = map.size()
fun size(): Int = map.size
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package fr.free.nrw.commons.wikidata.json

import com.google.gson.stream.JsonReader
import com.google.gson.stream.JsonWriter
import fr.free.nrw.commons.wikidata.model.page.Namespace
import org.junit.Assert.assertEquals
import org.junit.Test
import java.io.StringReader
import java.io.StringWriter

class NamespaceTypeAdapterTest {
private val adapter = NamespaceTypeAdapter()

@Test
fun `reads integer namespace code`() {
val reader = JsonReader(StringReader("6"))
assertEquals(Namespace.FILE, adapter.read(reader))
}

@Test
fun `writes namespace as integer code`() {
val sw = StringWriter()
adapter.write(JsonWriter(sw), Namespace.FILE)
assertEquals("6", sw.toString())
}
}