/* * search-doc-service * Copyright (C) 2020 Memoriav * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package org.memobase.builders import com.beust.klaxon.JsonObject import com.fasterxml.jackson.module.kotlin.jacksonTypeRef import org.memobase.helpers.Extract import org.memobase.helpers.KEYS import org.memobase.model.EnrichedFacetContainer import org.memobase.model.LanguageContainer import org.memobase.rdf.NS /** * */ class EnrichedFacetContainerBuilder( private val identifiers: List, private val targetType: String, private val nameProperty: String ) : IFieldBuilder { private val containers = mutableListOf() override fun filter(jsonObject: JsonObject): Boolean { if (jsonObject[KEYS.atType] != targetType) return false // Filter any values of this type which were not enriched. These will be found via the resultsFrom link. if (!jsonObject.containsKey(KEYS.resultsFrom)) return false if (identifiers.isNotEmpty()) return identifiers.contains(jsonObject[KEYS.entityId]) return true } override fun append(key: String, jsonObject: JsonObject): String { val names = Extract.languageContainer(targetType, jsonObject[nameProperty]) .reduce { acc, languageContainer -> acc.merge(languageContainer) }.fillInEmpty() val ricoType = jsonObject[KEYS.ricoType] as String? containers.add( EnrichedFacetContainer(LanguageContainer.EMPTY, names, ricoType) ) return "" } override fun build(): List { return containers } }