summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-10-18 16:20:40 +0200
committerJon Bratseth <bratseth@gmail.com>2021-10-18 16:20:40 +0200
commit42164bf6d23b411ad13dec8a4540a3450d072483 (patch)
tree290f4ab52c296244103a66f4b1be8f62f29389bb /config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java
parent6f6f21414a004a967ce54ab2a0a47e29b1f8609a (diff)
Inherit constants
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java29
1 files changed, 24 insertions, 5 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java b/config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java
index 8df68b210ce..1e0eacaea16 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java
@@ -6,7 +6,9 @@ import com.yahoo.vespa.model.AbstractService;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
+import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
@@ -18,11 +20,16 @@ import java.util.function.Function;
*/
public class RankingConstants {
- private final Map<String, RankingConstant> constants = new ConcurrentHashMap<>();
private final FileRegistry fileRegistry;
- public RankingConstants(FileRegistry fileRegistry) {
+ /** The schema this belongs to, or empty if it is global */
+ private final Optional<Schema> owner;
+
+ private final Map<String, RankingConstant> constants = new ConcurrentHashMap<>();
+
+ public RankingConstants(FileRegistry fileRegistry, Optional<Schema> owner) {
this.fileRegistry = fileRegistry;
+ this.owner = owner;
}
public void add(RankingConstant constant) {
@@ -33,12 +40,14 @@ public class RankingConstants {
if ( prev != null )
throw new IllegalArgumentException("Ranking constant '" + name + "' defined twice");
}
+
public void putIfAbsent(RankingConstant constant) {
constant.validate();
constant.register(fileRegistry);
String name = constant.getName();
constants.putIfAbsent(name, constant);
}
+
public void computeIfAbsent(String name, Function<? super String, ? extends RankingConstant> createConstant) {
constants.computeIfAbsent(name, key -> {
RankingConstant constant = createConstant.apply(key);
@@ -50,16 +59,26 @@ public class RankingConstants {
/** Returns the ranking constant with the given name, or null if not present */
public RankingConstant get(String name) {
- return constants.get(name);
+ var constant = constants.get(name);
+ if (constant != null) return constant;
+ if (owner.isPresent() && owner.get().inherited().isPresent())
+ return owner.get().inherited().get().rankingConstants().get(name);
+ return null;
}
/** Returns a read-only map of the ranking constants in this indexed by name */
public Map<String, RankingConstant> asMap() {
- return Collections.unmodifiableMap(constants);
+ // Shortcuts
+ if (owner.isEmpty() || owner.get().inherited().isEmpty()) return Collections.unmodifiableMap(constants);
+ if (constants.isEmpty()) return owner.get().inherited().get().rankingConstants().asMap();
+
+ var allConstants = new HashMap<>(owner.get().inherited().get().rankingConstants().asMap());
+ allConstants.putAll(constants);
+ return Collections.unmodifiableMap(allConstants);
}
/** Initiate sending of these constants to some services over file distribution */
public void sendTo(Collection<? extends AbstractService> services) {
- constants.values().forEach(constant -> constant.sendTo(services));
+ asMap().values().forEach(constant -> constant.sendTo(services));
}
}