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
    }
}