package org.memobase.helpers import ch.memobase.rdf.NS import com.beust.klaxon.JsonArray import com.beust.klaxon.JsonObject import com.beust.klaxon.Klaxon import com.beust.klaxon.KlaxonException import java.io.StringReader import org.apache.logging.log4j.LogManager object JSON { private val log = LogManager.getLogger("JsonParser") private const val graph = "@graph" private const val atId = "@id" const val atType = "@type" // rdf:type const val type = "type" // rico:type private const val Record = "Record" private const val RecordSet = "RecordSet" private const val CorporateBody = "CorporateBody" private const val memobaseInstitution = "memobaseInstitution" const val institution = "institution" const val record = "record" const val recordSet = "recordSet" private val klaxon = Klaxon() fun parse(data: String): JsonObject { return try { klaxon.parseJsonObject(StringReader(data)) } catch (ex: KlaxonException) { log.error("${ex.localizedMessage} -> $data.") JsonObject() } } fun unpack(input: JsonObject): Map { val graph = input[graph] as JsonArray return graph.map { if (it[atType] == NS.rico + Record) { Pair(record, it) } else if (it[atType] == NS.rico + RecordSet) { Pair(record, it) } else if (it[atType] == NS.rico + CorporateBody && it[type] == memobaseInstitution) { Pair(institution, it) } else { Pair(it[atId] as String, it) } }.toMap() } }