Server has been upgraded to GitLab release 13.9.6

EnrichedFacetContainerBuilder.kt 2.21 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
/*
 * 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 <https://www.gnu.org/licenses/>.
 */

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<String>,
    private val targetType: String,
    private val nameProperty: String
) : IFieldBuilder {
    private val containers = mutableListOf<EnrichedFacetContainer>()

    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<EnrichedFacetContainer> {
        return containers
    }
}